- 在修改美团外卖门店营业时间由于配送时间限制出错后,尝试根据限制时间调整后修改
This commit is contained in:
@@ -2,6 +2,9 @@ package mtwm
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"math"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -21,6 +24,10 @@ const (
|
|||||||
VendorStorePrefix = "美好菜市"
|
VendorStorePrefix = "美好菜市"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
opTimeErrReg = regexp.MustCompile(`当前配送营业时间为:([\d:~,]*)`)
|
||||||
|
)
|
||||||
|
|
||||||
type tEbaiStoreInfo struct {
|
type tEbaiStoreInfo struct {
|
||||||
model.Store
|
model.Store
|
||||||
VendorStoreID string `orm:"column(vendor_store_id)"`
|
VendorStoreID string `orm:"column(vendor_store_id)"`
|
||||||
@@ -186,10 +193,58 @@ func (c *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, storeID int,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func errOpStr2Int16(str string) []int16 {
|
||||||
|
list := strings.Split(str, "~")
|
||||||
|
if len(list) >= 2 {
|
||||||
|
return []int16{jxutils.StrTime2JxOperationTime(list[0]+":00", 0), jxutils.StrTime2JxOperationTime(list[1]+":00", 2359)}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getOpTimeListFromErr(err error) (opTimeList []int16) {
|
||||||
|
if errExt, ok := err.(*utils.ErrorWithCode); ok && errExt.IntCode() == mtwmapi.ErrCodeOpFailed {
|
||||||
|
if result := opTimeErrReg.FindStringSubmatch(errExt.ErrMsg()); len(result) >= 2 {
|
||||||
|
timeStrList := strings.Split(result[1], ",")
|
||||||
|
for _, v := range timeStrList {
|
||||||
|
v = utils.TrimBlankChar(v)
|
||||||
|
if len(v) == len("00:00~02:00") {
|
||||||
|
opTimeList = append(opTimeList, errOpStr2Int16(v)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return opTimeList
|
||||||
|
}
|
||||||
|
|
||||||
|
// 此函数只是简单实现,不支持区间切分,只做单一区间限制
|
||||||
|
func constrainOpTimeList(opTimeList, validOpTimeList []int16) (newOpTimeList []int16) {
|
||||||
|
for k := 0; k < len(opTimeList); k += 2 {
|
||||||
|
beginTime := opTimeList[k]
|
||||||
|
endTime := opTimeList[k+1]
|
||||||
|
for k2 := 0; k2 < len(validOpTimeList); k2 += 2 {
|
||||||
|
beginTime2 := validOpTimeList[k2]
|
||||||
|
endTime2 := validOpTimeList[k2+1]
|
||||||
|
if beginTime >= beginTime2 && beginTime <= endTime2 {
|
||||||
|
newOpTimeList = append(newOpTimeList, beginTime)
|
||||||
|
newOpTimeList = append(newOpTimeList, int16(math.Min(float64(endTime), float64(endTime2))))
|
||||||
|
} else if beginTime2 >= beginTime && beginTime2 <= endTime {
|
||||||
|
newOpTimeList = append(newOpTimeList, beginTime2)
|
||||||
|
newOpTimeList = append(newOpTimeList, int16(math.Min(float64(endTime), float64(endTime2))))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newOpTimeList
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, storeID int, vendorStoreID string, opTimeList []int16) (err error) {
|
func (c *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, storeID int, vendorStoreID string, opTimeList []int16) (err error) {
|
||||||
shippingTime := openTimeJX2Mtwm(opTimeList)
|
shippingTime := openTimeJX2Mtwm(opTimeList)
|
||||||
if globals.EnableMtwmStoreWrite {
|
if globals.EnableMtwmStoreWrite {
|
||||||
err = api.MtwmAPI.PoiShipTimeUpdate(vendorStoreID, shippingTime)
|
err = api.MtwmAPI.PoiShipTimeUpdate(vendorStoreID, shippingTime)
|
||||||
|
if err != nil {
|
||||||
|
if validOpTimeList := getOpTimeListFromErr(err); len(validOpTimeList) > 0 {
|
||||||
|
err = api.MtwmAPI.PoiShipTimeUpdate(vendorStoreID, openTimeJX2Mtwm(constrainOpTimeList(opTimeList, validOpTimeList)))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestReadStore(t *testing.T) {
|
func TestReadStore(t *testing.T) {
|
||||||
store, err := new(PurchaseHandler).ReadStore(jxcontext.AdminCtx, "4351018")
|
store, err := curPurchaseHandler.ReadStore(jxcontext.AdminCtx, "4351018")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@@ -18,8 +18,21 @@ func TestReadStore(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateStore(t *testing.T) {
|
func TestUpdateStore(t *testing.T) {
|
||||||
err := new(PurchaseHandler).UpdateStore(nil, 100002, "test")
|
err := curPurchaseHandler.UpdateStore(nil, 100002, "test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConstrainOpTimeList(t *testing.T) {
|
||||||
|
timeList := constrainOpTimeList([]int16{830, 1800}, []int16{
|
||||||
|
0,
|
||||||
|
200,
|
||||||
|
930,
|
||||||
|
1700,
|
||||||
|
})
|
||||||
|
t.Log(utils.Format4Output(timeList, false))
|
||||||
|
if timeList[0] != 930 || timeList[1] != 1700 {
|
||||||
|
t.Fatal("constrainOpTimeList failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user