商品可售时间设置校验
This commit is contained in:
@@ -617,7 +617,6 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
|||||||
if err = dao.GetEntity(db, store); err != nil {
|
if err = dao.GetEntity(db, store); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
valid := dao.StrictMakeMapByStructObject(payload, store, userName)
|
valid := dao.StrictMakeMapByStructObject(payload, store, userName)
|
||||||
if err = checkStoreDeliveryRange(utils.Interface2String(valid["deliveryRange"])); err != nil {
|
if err = checkStoreDeliveryRange(utils.Interface2String(valid["deliveryRange"])); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@@ -733,6 +732,22 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
|||||||
if valid["deliveryRange"] != nil {
|
if valid["deliveryRange"] != nil {
|
||||||
valid["deliveryRange"] = strings.Trim(valid["deliveryRange"].(string), ";")
|
valid["deliveryRange"] = strings.Trim(valid["deliveryRange"].(string), ";")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//时间校验
|
||||||
|
if store.OpenTime1 != 0 && store.CloseTime1 != 0 {
|
||||||
|
if err := ValidateStructPartial(store, "OpenTime1", "CloseTime1"); err != nil {
|
||||||
|
return 0, errors.New(fmt.Sprintf("门店营业时间1设置不合法!时间范围1 :[%v] 至 [%v]", store.OpenTime1, store.CloseTime1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if store.OpenTime2 != 0 && store.CloseTime2 != 0 {
|
||||||
|
if err := ValidateStructPartial(store, "OpenTime2", "CloseTime2"); err != nil {
|
||||||
|
return 0, errors.New(fmt.Sprintf("门店营业时间2设置不合法!时间范围2 :[%v] 至 [%v]", store.OpenTime2, store.CloseTime2))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if beginAt, endAt := GetTimeMixByInt(store.OpenTime1, store.CloseTime1, store.OpenTime2, store.CloseTime2); beginAt != 0 && endAt != 0 {
|
||||||
|
return 0, errors.New(fmt.Sprintf("两段门店营业时间不可交叉!时间范围1 :[%v] 至 [%v], 时间范围2 :[%v] 至 [%v]", store.OpenTime1, store.CloseTime1, store.OpenTime2, store.CloseTime2))
|
||||||
|
}
|
||||||
|
|
||||||
// districtCode := 0
|
// districtCode := 0
|
||||||
// if valid["districtCode"] != nil {
|
// if valid["districtCode"] != nil {
|
||||||
// districtCode = int(utils.MustInterface2Int64(valid["districtCode"]))
|
// districtCode = int(utils.MustInterface2Int64(valid["districtCode"]))
|
||||||
|
|||||||
@@ -122,8 +122,8 @@ type StoreSkuBindInfo struct {
|
|||||||
IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注
|
IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注
|
||||||
IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售
|
IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售
|
||||||
SubStoreID int `json:"subStoreID,omitempty"`
|
SubStoreID int `json:"subStoreID,omitempty"`
|
||||||
StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围
|
StatusSaleBegin int16 `json:"statusSaleBegin" validate:"max=2359,min=1,ltfield=StatusSaleEnd"` //商品可售时间范围
|
||||||
StatusSaleEnd int16 `json:"statusSaleEnd"`
|
StatusSaleEnd int16 `json:"statusSaleEnd" validate:"max=2359,min=1"`
|
||||||
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1079,15 +1079,10 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
updateFieldMap["JxPrice"] = 1
|
updateFieldMap["JxPrice"] = 1
|
||||||
}
|
}
|
||||||
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
||||||
if skuBindInfo.StatusSaleBegin < 0 || skuBindInfo.StatusSaleBegin > 2359 ||
|
if err := ValidateStruct(skuBindInfo); err != nil {
|
||||||
skuBindInfo.StatusSaleEnd < 0 || skuBindInfo.StatusSaleEnd > 2359 {
|
|
||||||
dao.Rollback(db)
|
dao.Rollback(db)
|
||||||
return nil, fmt.Errorf("更改商品:%s, 可售时间不合法!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
return nil, fmt.Errorf("更改商品:%s, 可售时间不合法!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
||||||
}
|
}
|
||||||
if skuBindInfo.StatusSaleBegin >= skuBindInfo.StatusSaleEnd {
|
|
||||||
dao.Rollback(db)
|
|
||||||
return nil, fmt.Errorf("更改商品:%s, 可售时间不允许交叉!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
|
||||||
}
|
|
||||||
updateFieldMap["StatusSaleBegin"] = int(skuBindInfo.StatusSaleBegin)
|
updateFieldMap["StatusSaleBegin"] = int(skuBindInfo.StatusSaleBegin)
|
||||||
updateFieldMap["StatusSaleEnd"] = int(skuBindInfo.StatusSaleEnd)
|
updateFieldMap["StatusSaleEnd"] = int(skuBindInfo.StatusSaleEnd)
|
||||||
skuBind.StatusSaleBegin = skuBindInfo.StatusSaleBegin
|
skuBind.StatusSaleBegin = skuBindInfo.StatusSaleBegin
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package cms
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"gopkg.in/go-playground/validator.v9"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
)
|
)
|
||||||
@@ -10,6 +12,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
unitNamesMap map[string]int
|
unitNamesMap map[string]int
|
||||||
specUnitNamesMap map[string]int
|
specUnitNamesMap map[string]int
|
||||||
|
validate = validator.New()
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -33,3 +36,15 @@ func ValidateUnit(value interface{}) (err error) {
|
|||||||
func ValidateSpecUnit(value interface{}) (err error) {
|
func ValidateSpecUnit(value interface{}) (err error) {
|
||||||
return validateStringInMap("SpecUnit", value, specUnitNamesMap)
|
return validateStringInMap("SpecUnit", value, specUnitNamesMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ValidateStruct(value interface{}) (err error) {
|
||||||
|
return validate.Struct(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ValidateVar(value interface{}, tag string) (err error) {
|
||||||
|
return validate.Var(value, tag)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ValidateStructPartial(value interface{}, fields ...string) (err error) {
|
||||||
|
return validate.StructPartial(value, fields...)
|
||||||
|
}
|
||||||
|
|||||||
@@ -252,14 +252,14 @@ type Store struct {
|
|||||||
Address string `orm:"size(255)" json:"address"`
|
Address string `orm:"size(255)" json:"address"`
|
||||||
Tel1 string `orm:"size(32);index" json:"tel1"`
|
Tel1 string `orm:"size(32);index" json:"tel1"`
|
||||||
Tel2 string `orm:"size(32);index" json:"tel2"`
|
Tel2 string `orm:"size(32);index" json:"tel2"`
|
||||||
OpenTime1 int16 `json:"openTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有
|
OpenTime1 int16 `json:"openTime1" validate:"max=2359,min=1,ltfield=CloseTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有
|
||||||
CloseTime1 int16 `json:"closeTime1"` // 格式同上
|
CloseTime1 int16 `json:"closeTime1" validate:"max=2359,min=1` // 格式同上
|
||||||
OpenTime2 int16 `json:"openTime2"` // 格式同上
|
OpenTime2 int16 `json:"openTime2" validate:"max=2359,min=1,ltfield=CloseTime2"` // 格式同上
|
||||||
CloseTime2 int16 `json:"closeTime2"` // 格式同上
|
CloseTime2 int16 `json:"closeTime2" validate:"max=2359,min=1` // 格式同上
|
||||||
Lng int `json:"-"` // 乘了10的6次方
|
Lng int `json:"-"` // 乘了10的6次方
|
||||||
Lat int `json:"-"` // 乘了10的6次方
|
Lat int `json:"-"` // 乘了10的6次方
|
||||||
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
|
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
|
||||||
DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米
|
DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米
|
||||||
Status int `json:"status"`
|
Status int `json:"status"`
|
||||||
AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用)
|
AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用)
|
||||||
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
|
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
|
||||||
|
|||||||
@@ -64,10 +64,12 @@ func FilterMapByStructObject(mapData map[string]interface{}, obj interface{}, ex
|
|||||||
for k, v := range mapData {
|
for k, v := range mapData {
|
||||||
if m[k] != nil && excludedMap[k] == 0 && v != nil && (!isCheckValue || !IsValueEqual(m[k], v)) {
|
if m[k] != nil && excludedMap[k] == 0 && v != nil && (!isCheckValue || !IsValueEqual(m[k], v)) {
|
||||||
valid[k] = v
|
valid[k] = v
|
||||||
|
m[k] = v
|
||||||
} else {
|
} else {
|
||||||
invalid[k] = v
|
invalid[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
utils.Map2Struct(m, obj, true, "")
|
||||||
return valid, invalid
|
return valid, invalid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user