Files
jx-callback/business/partner/purchase/mtwm/store.go
2019-07-22 15:38:01 +08:00

200 lines
7.2 KiB
Go

package mtwm
import (
"errors"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist"
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"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"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
const (
VendorStorePrefix = "美好菜市"
)
type tEbaiStoreInfo struct {
model.Store
VendorStoreID string `orm:"column(vendor_store_id)"`
RealLastOperator string
EbaiStoreStatus int
SyncStatus int
ProvinceID int `orm:"column(province_id)"`
CityID int `orm:"column(city_id)"`
DistrictID int `orm:"column(district_id)"`
}
func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorStoreID string) (retVal *dao.StoreDetail, err error) {
result, err := api.MtwmAPI.PoiGet(vendorStoreID)
if err == nil {
// globals.SugarLogger.Debug(utils.Format4Output(result, false))
retVal = &dao.StoreDetail{
Store: model.Store{
Address: result.Address,
Tel1: result.Phone,
},
}
retVal.OriginalName = result.Name
_, retVal.Name = jxutils.SplitStoreName(retVal.OriginalName, partner.StoreNameSeparator, VendorStorePrefix)
retVal.SetOpTime(openTimeMtwm2JX(result.ShippingTime))
retVal.Status = bizStatusMtwm2JX(result.OpenLevel, result.IsOnline)
tel2 := result.StandbyTel
if tel2 != "" && tel2 != retVal.Tel1 {
retVal.Tel2 = tel2
}
retVal.Lng = int(result.Longitude)
retVal.Lat = int(result.Latitude)
lng := jxutils.IntCoordinate2Standard(retVal.Lng)
lat := jxutils.IntCoordinate2Standard(retVal.Lat)
db := dao.GetDB()
retVal.DistrictCode = api.AutonaviAPI.GetCoordinateDistrictCode(lng, lat)
if district, err := dao.GetPlaceByCode(db, retVal.DistrictCode); err == nil {
retVal.CityCode = district.ParentCode
}
poiCode := result.AppPoiCode
retVal.ID = int(utils.Str2Int64WithDefault(poiCode, 0))
retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon
var deliveryRangeInfo []map[string]interface{}
deliveryRangeInfo, err = api.MtwmAPI.ShippingList(poiCode)
if err != nil {
deliveryRangeInfo, err = api.MtwmAPI.ShippingFetch(poiCode)
}
if err == nil {
if len(deliveryRangeInfo) > 0 {
retVal.DeliveryRange = rangeMtwm2JX(deliveryRangeInfo[0]["area"].(string))
if utils.Interface2String(deliveryRangeInfo[0]["logistics_code"]) == mtwmapi.PeiSongTypeSelf {
retVal.DeliveryType = scheduler.StoreDeliveryTypeByStore
} else {
retVal.DeliveryType = scheduler.StoreDeliveryTypeCrowdSourcing
}
}
}
return retVal, nil
}
return nil, err
}
func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
return p.UpdateStore(db, storeID, userName)
}
func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
if db == nil {
db = dao.GetDB()
}
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDMTWM)
if err != nil {
return err
}
errList := errlist.New()
// remoteStoreInfo, err := api.MtwmAPI.PoiGet(storeDetail.VendorStoreID)
// if err != nil {
// return err
// }
// params := map[string]interface{}{
// "name": utils.Interface2String(remoteStoreInfo["name"]), //jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM),
// "phone": storeDetail.Tel1,
// "shipping_fee": jxutils.IntPrice2Standard(int64(storeDetail.DeliveryFee)),
// "shipping_time": openTimeJX2Mtwm(openTime),
// "third_tag_name": "蔬菜",
// }
// if true { //storeDetail.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 {
// params["address"] = storeDetail.Address
// params["longitude"] = jxutils.IntCoordinate2Standard(storeDetail.Lng)
// params["latitude"] = jxutils.IntCoordinate2Standard(storeDetail.Lat)
// }
// params["open_level"] = openLevel
// params["is_online"] = isOnline
// globals.SugarLogger.Debug(utils.Format4Output(params, false))
// if globals.EnableMtwmStoreWrite {
// err = api.MtwmAPI.PoiSave(storeDetail.VendorStoreID, params)
// }
errList.AddErr(p.UpdateStoreStatus(jxcontext.AdminCtx, storeID, storeDetail.VendorStoreID, jxutils.MergeStoreStatus(storeDetail.Status, storeDetail.VendorStatus)))
errList.AddErr(p.UpdateStoreOpTime(jxcontext.AdminCtx, storeID, storeDetail.VendorStoreID, storeDetail.GetOpTimeList()))
return errList.GetErrListAsOne()
}
func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
return "", errors.New("美团外卖不支持此操作")
}
func (p *PurchaseHandler) onStoreStatusChanged(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
var err error
poiStatus := int(utils.Str2Int64(msg.FormData.Get("poi_status")))
vendorStoreID := msg.FormData.Get("app_poi_code")
storeStatus := 0
if poiStatus == mtwmapi.MsgPoiStatusOpened {
storeStatus = model.StoreStatusOpened
} else if poiStatus == mtwmapi.MsgPoiStatusClosed {
storeStatus = model.StoreStatusClosed
} else if poiStatus == mtwmapi.MsgPoiStatusOffline {
storeStatus = model.StoreStatusDisabled
} else {
storeStatus, err = p.GetStoreStatus(jxcontext.AdminCtx, 0, vendorStoreID)
}
if err == nil {
err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDMTWM, storeStatus)
}
response = mtwmapi.Err2CallbackResponse(err, "")
return response
}
func (p *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string) (storeStatus int, err error) {
result, err := api.MtwmAPI.PoiGet(vendorStoreID)
if err == nil {
return bizStatusMtwm2JX(result.OpenLevel, result.IsOnline), nil
}
return 0, err
}
func (c *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, status int) (err error) {
openLevel, isOnline := bizStatusJX2Mtwm(status)
if globals.EnableMtwmStoreWrite {
if isOnline != mtwmapi.PoiStatusOnline {
err = api.MtwmAPI.PoiOffline(vendorStoreID)
} else {
if err = api.MtwmAPI.PoiOnline(vendorStoreID); err == nil { // 这个函数成功返回也并不表示上线成功。。。
remoteStoreInfo, err2 := api.MtwmAPI.PoiGet(vendorStoreID)
if err = err2; err != nil {
return err
}
if remoteStoreInfo.IsOnline == mtwmapi.PoiStatusOnline {
if openLevel == mtwmapi.PoiOpenLevelHaveRest {
err = api.MtwmAPI.PoiClose(vendorStoreID)
} else {
err = api.MtwmAPI.PoiOpen(vendorStoreID)
}
} else {
err = errors.New("门店还未上线,不能修改营业状态")
}
}
}
}
return err
}
func (c *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, storeID int, vendorStoreID string, opTimeList []int16) (err error) {
shippingTime := openTimeJX2Mtwm(opTimeList)
if globals.EnableMtwmStoreWrite {
err = api.MtwmAPI.PoiShipTimeUpdate(vendorStoreID, shippingTime)
}
return err
}
func (c *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context) (vendorStoreIDs []string, err error) {
vendorStoreIDs, err = api.MtwmAPI.PoiGetIDs()
return vendorStoreIDs, err
}