获取某个商品平台价,商品名前缀

This commit is contained in:
苏尹岚
2019-12-19 18:40:46 +08:00
parent a3c236d281
commit dad7a5a926
17 changed files with 293 additions and 68 deletions

View File

@@ -24,8 +24,8 @@ const (
maxLastHours = 7 * 24 // 最多只能查询7天内的订单数据
defLastHours = 2 * 24 // 缺省是两天内的订单
orderMixTimeImmediatelyArrive = 8
orderMixTimeDelayArrive = 5
orderSubTimeImmediatelyArrive = 8
orderSubTimeDelayArrive = 5
)
type tWaybillExt struct {
@@ -939,6 +939,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
}
if len(dateVendorList) > 0 {
var missingOrderList []*tOrderVendorPair
var updateOrderStatusList []*tOrderVendorPair
db := dao.GetDB()
vendorStoreIDMap := make(map[int]string)
if storeID > 0 {
@@ -995,12 +996,12 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
} else {
if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled {
if goodsOrder.BusinessType == model.BusinessTypeImmediate {
if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderMixTimeImmediatelyArrive {
missingOrderList = append(missingOrderList, pair)
if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderSubTimeImmediatelyArrive {
updateOrderStatusList = append(updateOrderStatusList, pair)
}
} else {
if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderMixTimeDelayArrive {
missingOrderList = append(missingOrderList, pair)
if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderSubTimeDelayArrive {
updateOrderStatusList = append(updateOrderStatusList, pair)
}
}
}
@@ -1013,9 +1014,6 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil {
order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID)
if err = err2; err == nil {
if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished {
err = c.UpdateOrderFields(order, []string{"Status"})
}
isDuplicated, err2 := c.SaveOrder(order, false, dao.GetDB())
if err2 == nil && !isDuplicated {
retVal = []int{1}
@@ -1026,9 +1024,25 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
}, missingOrderList)
tasksch.HandleTask(task2, task, true).Run()
result, err = task2.GetResult(0)
case 2:
task3 := tasksch.NewParallelTask("AmendMissingOrders UpdateOrders", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
pair := batchItemList[0].(*tOrderVendorPair)
if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil {
order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID)
if err = err2; err == nil {
if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished {
err = c.UpdateOrderFields(order, []string{"Status"})
}
}
}
return retVal, err
}, updateOrderStatusList)
tasksch.HandleTask(task3, task, true).Run()
_, err = task3.GetResult(0)
}
return result, err
}, 2)
}, 3)
tasksch.HandleTask(task, nil, true).Run()
if !isAsync {
result, err2 := task.GetResult(0)

View File

@@ -871,10 +871,10 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
return 0, err
}
if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil {
dao.Rollback(db)
return 0, err
}
// if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil {
// dao.Rollback(db)
// return 0, err
// }
}
}
skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID})
@@ -1355,23 +1355,28 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int)
now := utils.Time2Date(time.Now())
switch step {
case 0:
task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
nameID := batchItemList[0].(int)
if (time.Now().Before(toTimeP) && time.Now().After(fromTimeP)) || (time.Now().After(fromTimeP) && time.Now().After(toTimeP)) {
payload := map[string]interface{}{
"exPrefix": exPrefix,
"exPrefixBegin": fromTimeP,
"exPrefixEnd": toTimeP,
}
payload := map[string]interface{}{
"exPrefix": exPrefix,
"exPrefixBegin": fromTimeP,
"exPrefixEnd": toTimeP,
}
if now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0 {
_, err = UpdateSkuName(ctx, nameID, payload)
} else if now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0 {
payload["exPrefixBegin"] = nil
payload["exPrefixEnd"] = nil
_, err = UpdateSkuName(ctx, nameID, payload)
} else {
skuName := &model.SkuName{
ExPrefix: exPrefix,
ExPrefixBegin: fromTimeP,
ExPrefixEnd: toTimeP,
ExPrefixBegin: &fromTimeP,
ExPrefixEnd: &toTimeP,
}
skuName.ID = nameID
skuName.LastOperator = ctx.GetLoginID()
@@ -1391,7 +1396,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
tasksch.HandleTask(task, nil, true).Run()
_, err = task.GetResult(0)
case 1:
if (time.Now().Before(toTimeP) && time.Now().After(fromTimeP)) || (time.Now().After(fromTimeP) && time.Now().After(toTimeP)) {
if (now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0) || (now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0) {
var skuIDs []int
skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil)
if err = err2; err == nil {
@@ -1399,7 +1404,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
for _, v := range skuList {
skuIDs = append(skuIDs, v.ID)
}
CurVendorSync.SyncStoresSkus2(ctx, db, []int{model.VendorIDEBAI, model.VendorIDMTWM}, nil, false, skuIDs, nil, 0, true, true)
CurVendorSync.SyncStoresSkus2(ctx, db, partner.GetSingleStoreVendorIDs(), nil, false, skuIDs, nil, 0, true, true)
}
}
}
@@ -1416,12 +1421,17 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
return hint, err
}
func SetSingleStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorIDs []int) (err error) {
func SetSingleStoreSkuSyncModifyStatus(db *dao.DaoDB, vendorIDs []int) (err error) {
_, err = dao.UpdateStoreSkuBindSyncStatusForExPrefix(db, vendorIDs)
return err
}
func SetMultiStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorIDs []int) (err error) {
func SetMultiStoreSkuSyncModifyStatus(db *dao.DaoDB, vendorIDs []int) (err error) {
_, err = dao.UpdateSkuSyncStatusForExPrefix(db, vendorIDs)
return err
}
func DeleteSkuNameExPrefixOverdue(db *dao.DaoDB) (err error) {
_, err = dao.DeleteSkuNameExPrefixOverdue(db)
return err
}

View File

@@ -18,6 +18,7 @@ import (
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jd"
"git.rosy.net.cn/jx-callback/globals/api/apimanager"
"git.rosy.net.cn/jx-callback/business/partner"
@@ -42,6 +43,13 @@ const (
CopyStoreSkuModeUpdatePrice = "updatePrice" // 增量复制价格
)
//通用写入Excel
type ExcelParam struct {
DataList interface{}
SheetName string
TitleList []string
}
// UpdateStoreSku用API调用时
type StoreSkuBindSkuInfo struct {
SkuID int `json:"skuID"`
@@ -117,6 +125,15 @@ type SheetParam struct {
SkuRow int
}
type DataVendorStoreSkuPrice struct {
StoreID int `json:"门店ID"`
StoreName string `json:"门店名"`
SkuID int `json:"商品ID"`
SkuNameID int `json:"商品NameID"`
SkuName string `json:"商品名"`
VendorPrice int64 `json:"平台价"`
}
type DataSuccess struct {
NameID int `json:"商品NameID"`
Name string `json:"商品名称"`
@@ -151,7 +168,15 @@ var (
"18180948107": 1, // 徐
// "13684045763": 1, // 周
}
dataLock DataLock
dataLock DataLock
titleListVendorStoreSkuPrice = []string{
"门店ID",
"门店名",
"商品ID",
"商品NameID",
"商品名",
"平台价",
}
titleListSuccess = []string{
"商品NameID",
"商品名称",
@@ -2484,3 +2509,129 @@ func IsChineseChar(str string) bool {
func GetStoreCategories(ctx *jxcontext.Context, storeID, parentID int) (catList []*model.SkuCategory, err error) {
return dao.GetStoreSkuCategories(dao.GetDB(), storeID, parentID)
}
func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
storeSkuListJD []DataVendorStoreSkuPrice
storeSkuListMT []DataVendorStoreSkuPrice
storeSkuListEB []DataVendorStoreSkuPrice
excelParamList []ExcelParam
)
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
case 0:
for _, v := range vendorIDs {
vendorID := v
handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
handlerStore := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IStoreHandler)
for _, v := range apimanager.CurAPIManager.GetAppOrgCodeList(vendorID) {
vendorStoreIDs, err2 := handlerStore.GetAllStoresVendorID(ctx, v)
err = err2
task := tasksch.NewParallelTask("获取各平台所有门店某商品价格", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vendorStoreID := batchItemList[0].(string)
var inStoreSkuList []*partner.StoreSkuInfo
var storeDetail *dao.StoreDetail
inStoreSku := &partner.StoreSkuInfo{
SkuID: skuID,
}
inStoreSkuList = append(inStoreSkuList, inStoreSku)
db := dao.GetDB()
storeDetail, err = dao.GetStoreDetailByVendorStoreID(db, vendorStoreID, vendorID)
if err != nil {
return retVal, err
}
outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList)
if err != nil {
return retVal, err
}
if len(outStoreSkuList) > 0 {
if storeDetail != nil {
skuNameList, err := dao.GetSkus(db, []int{outStoreSkuList[0].SkuID}, nil, nil, nil)
if err != nil {
return retVal, err
}
if len(skuNameList) > 0 {
data := DataVendorStoreSkuPrice{
StoreID: storeDetail.ID,
StoreName: storeDetail.Name,
SkuID: outStoreSkuList[0].SkuID,
SkuNameID: outStoreSkuList[0].NameID,
SkuName: skuNameList[0].Name,
VendorPrice: outStoreSkuList[0].VendorPrice,
}
retVal = []DataVendorStoreSkuPrice{data}
}
}
}
return retVal, err
}, vendorStoreIDs)
tasksch.HandleTask(task, nil, true).Run()
storeSkuList, _ := task.GetResult(0)
for _, v := range storeSkuList {
if vendorID == model.VendorIDJD {
storeSkuListJD = append(storeSkuListJD, v.(DataVendorStoreSkuPrice))
}
if vendorID == model.VendorIDEBAI {
storeSkuListEB = append(storeSkuListEB, v.(DataVendorStoreSkuPrice))
}
if vendorID == model.VendorIDMTWM {
storeSkuListMT = append(storeSkuListMT, v.(DataVendorStoreSkuPrice))
}
}
}
}
excelParam1 := ExcelParam{
DataList: storeSkuListJD,
TitleList: titleListVendorStoreSkuPrice,
SheetName: "京东平台",
}
excelParam2 := ExcelParam{
DataList: storeSkuListEB,
TitleList: titleListVendorStoreSkuPrice,
SheetName: "饿百平台",
}
excelParam3 := ExcelParam{
DataList: storeSkuListMT,
TitleList: titleListVendorStoreSkuPrice,
SheetName: "美团平台",
}
excelParamList = append(excelParamList, excelParam1, excelParam2, excelParam3)
case 1:
WriteToExcelNormal(task, "各平台"+utils.Int2Str(skuID)+"商品所有门店价格", excelParamList)
}
return result, err
}
taskSeq := tasksch.NewSeqTask2("获取各平台所有门店某商品价格-序列任务", ctx, isContinueWhenError, taskSeqFunc, 2)
tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync {
_, err = taskSeq.GetResult(0)
hint = "1"
} else {
hint = taskSeq.GetID()
}
return hint, err
}
func WriteToExcelNormal(task *tasksch.SeqTask, fileName string, excelParam []ExcelParam) (err error) {
var sheetList []*excel.Obj2ExcelSheetConfig
for _, v := range excelParam {
if v.DataList != nil {
excelConf := &excel.Obj2ExcelSheetConfig{
Title: v.SheetName,
Data: v.DataList,
CaptionList: v.TitleList,
}
sheetList = append(sheetList, excelConf)
}
}
downloadURL, fileNameResult, err := jxutils.UploadExeclAndPushMsg(sheetList, fileName)
if err != nil {
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s failed error:%v", fileNameResult, err)
} else {
noticeMsg := fmt.Sprintf("[详情点我]path=%s \n", downloadURL)
task.SetNoticeMsg(noticeMsg)
baseapi.SugarLogger.Debugf("WriteToExcel:upload %s success, downloadURL:%s", fileNameResult, downloadURL)
}
return err
}

View File

@@ -340,10 +340,10 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
//多规格商品不用比较数量单位
if jxSkuInfo.IsSpu == 0 {
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0, "", nil, nil)
} else {
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0, "", nil, nil)
}
//jxSkuSaleStatus : 商品状态 skustatus 优先级高于 StoreSkuStatus
@@ -462,9 +462,9 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool
var jxSkuDetailName string
//多规格商品不用比较数量单位
if jxSkuInfo.IsSpu == 0 {
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0, "", nil, nil)
} else {
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0, "", nil, nil)
}
vendorSkuInfoMap := filterVendorSkuInfoMap[skuid]

View File

@@ -384,7 +384,6 @@ func (v *VendorSync) SyncStoresCategory(ctx *jxcontext.Context, db *dao.DaoDB, v
func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled bool, skuIDs, excludeSkuIDs []int, setSyncStatus int, isAsync, isContinueWhenError bool) (hint string, err error) {
globals.SugarLogger.Debug("SyncStoresSkus2")
isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8
SetSingleStoreSkuSyncModifyStauts(db, []int{model.VendorIDEBAI, model.VendorIDMTWM})
task, hint, err := v.LoopStoresMap2(ctx, db, fmt.Sprintf("同步门店商品信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)

View File

@@ -131,7 +131,6 @@ func SyncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs
func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, appOrgCodes []string, nameIDs, skuIDs []int, isAsync bool) (hint string, err error) {
globals.SugarLogger.Debugf("SyncSkus vendorIDs:%v, appOrgCodes:%v, nameIDs:%v, skuIDs:%v", vendorIDs, appOrgCodes, nameIDs, skuIDs)
db := dao.GetDB()
SetMultiStoreSkuSyncModifyStauts(db, vendorIDs)
skuList, err := dao.GetSkusWithVendor(db, vendorIDs, appOrgCodes, nameIDs, skuIDs, true)
if err == nil && len(skuList) > 0 {
// todo 按vendorID orgCode合并操作

View File

@@ -165,13 +165,20 @@ func syncStoreSku() {
if (time.Now().Unix()/24*3600)%10 == 0 {
syncFlag |= model.SyncFlagSaleMask
}
db := dao.GetDB()
task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int)
errList := errlist.New()
switch step {
case 0:
_, err = cms.CurVendorSync.LoopMultiStoresVendors(jxcontext.AdminCtx, dao.GetDB(), "同步多门店平台商品库", false, true,
//清除skuname中额外前缀过期的时间
err = cms.DeleteSkuNameExPrefixOverdue(db)
//为sku和storeSkuBind打上要更新商品额外前缀的标记
err = cms.SetMultiStoreSkuSyncModifyStatus(db, partner.GetMultiStoreVendorIDs())
err = cms.SetSingleStoreSkuSyncModifyStatus(db, partner.GetSingleStoreVendorIDs())
case 1:
_, err = cms.CurVendorSync.LoopMultiStoresVendors(jxcontext.AdminCtx, db, "同步多门店平台商品库", false, true,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vendorInfo := batchItemList[0].(*cms.MultiStoreVendorInfo)
_, err = cms.FullSyncVendorStuff(jxcontext.AdminCtx, task, vendorInfo.VendorID, vendorInfo.OrgCode, false, true)
@@ -180,20 +187,20 @@ func syncStoreSku() {
errList.AddErr(err)
// cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, nil, []int{27379}, syncFlag, true, true)
_, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true)
_, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true)
errList.AddErr(err)
case 1:
case 2:
_, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false)
errList.AddErr(err)
SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID)
taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true)
taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true)
errList.AddErr(err2)
SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
}
err = errList.GetErrListAsOne()
return retVal, err
}, []int{0, 1})
}, []int{0, 1, 2})
tasksch.HandleTask(task, nil, true).Run()
}

View File

@@ -1451,7 +1451,7 @@ func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, i
}
price := sku.LinkID
sku.LinkID = 0
skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount,"",utils.ZeroTimeValue,utils.ZeroTimeValue)
skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount, "", nil, nil)
fixedStatus := 1
if sku.Status != model.SkuStatusNormal {
fixedStatus = 2

View File

@@ -327,9 +327,9 @@ func FloatWeight2Int(weight float32) int {
return int(math.Round(float64(weight * 1000)))
}
func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd time.Time) (skuName string) {
if exPrefix != "" && !utils.IsTimeZero(exPrefixBegin) && !utils.IsTimeZero(exPrefixEnd) {
if time.Now().After(exPrefixBegin) && time.Now().Before(exPrefixEnd) {
func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd *time.Time) (skuName string) {
if exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil {
if time.Now().After(*exPrefixBegin) && time.Now().Before(*exPrefixEnd) {
skuName = exPrefix
}
}
@@ -353,12 +353,12 @@ func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, sp
return skuName
}
func ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd time.Time) (skuName string) {
if exPrefix != "" && !utils.IsTimeZero(exPrefixBegin) && !utils.IsTimeZero(exPrefixEnd) {
if time.Now().Add(6*time.Hour).After(exPrefixBegin) && time.Now().Before(exPrefixEnd) {
func ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd *time.Time) (skuName string) {
if exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil {
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) < 0 {
skuName = exPrefix
}
if time.Now().Add(6 * time.Hour).After(exPrefixEnd) {
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixEnd) >= 0 {
skuName = ""
}
}

View File

@@ -201,8 +201,8 @@ type ActStoreSku2 struct {
Prefix string `json:"-"`
ExPrefix string
ExPrefixBegin time.Time
ExPrefixEnd time.Time
ExPrefixBegin *time.Time
ExPrefixEnd *time.Time
SkuNameName string `orm:"column(sku_name_name)" json:"-"`
Unit string `orm:"size(8)" json:"-"`
SpecQuality float32 `json:"-"`

View File

@@ -278,7 +278,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Tim
err = err2
if len(skuList) > 0 {
skuAndName := skuList[0]
jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0, "", nil, nil)
v.SkuName = jxSkuDetailName
}
}

View File

@@ -58,8 +58,8 @@ type StoreSkuSyncInfo struct {
// sku_name
Prefix string
ExPrefix string
ExPrefixBegin time.Time
ExPrefixEnd time.Time
ExPrefixBegin *time.Time
ExPrefixEnd *time.Time
// NameID int `orm:"column(name_id)"`
VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
Name string
@@ -918,7 +918,7 @@ func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num in
if len(vendorIDs) > 0 {
for _, v := range vendorIDs {
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
sql += ` %s_sync_status = ?,`
sql += ` %s_sync_status = %s_sync_status | ?,`
fmtParams = append(fmtParams, fieldPrefix)
sqlParams = append(sqlParams, model.SyncFlagModifiedMask)
}
@@ -927,13 +927,12 @@ func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num in
}
sql = sql[0:strings.LastIndex(sql, ",")]
sql = fmt.Sprintf(sql, fmtParams...)
sql += ` WHERE a.status = ?
AND a.deleted_at = ?
sql += ` WHERE a.deleted_at = ?
AND c.ex_prefix != ""
AND (DATE_FORMAT(c.ex_prefix_begin,'%Y-%m-%d') = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d')
OR DATE_FORMAT(c.ex_prefix_end,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d'))
AND (c.ex_prefix_begin = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00')
OR c.ex_prefix_end = DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00'))
`
sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue)
sqlParams = append(sqlParams, utils.DefaultTimeValue)
return ExecuteSQL(db, sql, sqlParams...)
}
@@ -950,7 +949,7 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err
if len(vendorIDs) > 0 {
for _, v := range vendorIDs {
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
sql += ` b.%s_sync_status = ?,`
sql += ` b.%s_sync_status = b.%s_sync_status | ?,`
fmtParams = append(fmtParams, fieldPrefix)
sqlParams = append(sqlParams, model.SyncFlagModifiedMask)
}
@@ -961,13 +960,24 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err
sql = fmt.Sprintf(sql, fmtParams...)
sql += ` WHERE b.deleted_at = ?
AND c.ex_prefix != ""
AND (DATE_FORMAT(c.ex_prefix_begin,'%Y-%m-%d') = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d')
OR DATE_FORMAT(c.ex_prefix_end,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d'))
AND (c.ex_prefix_begin = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00')
OR c.ex_prefix_end = DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00'))
`
sqlParams = append(sqlParams, utils.DefaultTimeValue)
return ExecuteSQL(db, sql, sqlParams...)
}
func DeleteSkuNameExPrefixOverdue(db *DaoDB) (num int64, err error) {
sql := `
UPDATE sku_name
SET ex_prefix_begin = null,ex_prefix_end = null
WHERE deleted_at = ?
AND DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00') >= ex_prefix_end
`
sqlParams := []interface{}{utils.DefaultTimeValue}
return ExecuteSQL(db, sql, sqlParams...)
}
func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) {
sql := `
SELECT a.*,c.unit,c.name

View File

@@ -170,10 +170,10 @@ type SkuName struct {
Prefix string `orm:"size(255)" json:"prefix"`
Name string `orm:"size(255);index" json:"name"`
ExPrefix string `orm:"size(255)" json:"exPrefix"`
ExPrefix string `orm:"size(255);index" json:"exPrefix"`
ExPrefixBegin time.Time `orm:"type(datetime);null" json:"exPrefixBegin"`
ExPrefixEnd time.Time `orm:"type(datetime);null" json:"exPrefixEnd"`
ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"`
ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"`
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo此属性暂时没有使用且有问题应该是不同平台都有一个brandid
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
@@ -209,6 +209,12 @@ func (*SkuName) TableUnique() [][]string {
}
}
func (*SkuName) TableIndex() [][]string {
return [][]string{
[]string{"ExPrefix", "ExPrefixBegin", "ExPrefixEnd"},
}
}
type Sku struct {
ModelIDCULD
@@ -234,8 +240,8 @@ type SkuAndName struct {
Prefix string
IsSpu int
ExPrefix string
ExPrefixBegin time.Time
ExPrefixEnd time.Time
ExPrefixBegin *time.Time
ExPrefixEnd *time.Time
}
func (*Sku) TableUnique() [][]string {

View File

@@ -246,7 +246,7 @@ func GetRecipeDetail(ctx *jxcontext.Context, recipeID int) (recipeDetail *FoodRe
}
choiceMap := make(map[int8][]*dao.FoodRecipeItemChoiceExt)
for _, v := range itemChoiceList {
v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, "", nil, nil)
choiceMap[v.Index] = append(choiceMap[v.Index], v)
}

View File

@@ -399,8 +399,8 @@ func (c *SkuController) GetJdUpcCodeByName() {
// @Param token header string true "认证token"
// @Param nameIDs formData string true "商品nameIDs"
// @Param exPrefix formData string true "商品额外前缀"
// @Param fromTime formData string true "生效开始时间,格式 2006-01-01 00:00:00"
// @Param toTime formData string true "生效结束时间,格式 2006-01-01 00:00:00"
// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 "
// @Param toDate formData string true "生效结束时间,格式 2006-01-01 "
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult

View File

@@ -537,3 +537,23 @@ func (c *StoreSkuController) GetStoreCategories() {
return retVal, "", err
})
}
// @Title 获取各平台所有门店某商品的价格
// @Description 获取各平台所有门店某商品的价格
// @Param token header string false "认证token"
// @Param skuID formData int true "商品ID"
// @Param vendorIDs formData string true "厂商ID列表"
// @Param isAsync formData bool true "是否异步,缺省是同步"
// @Param isContinueWhenError formData bool true "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetVendorStoreSkuPrice [post]
func (c *StoreSkuController) GetVendorStoreSkuPrice() {
var vendorIDList []int
c.callGetVendorStoreSkuPrice(func(params *tStoreSkuGetVendorStoreSkuPriceParams) (retVal interface{}, errCode string, err error) {
if jxutils.Strings2Objs(params.VendorIDs, &vendorIDList); err == nil {
retVal, err = cms.GetVendorStoreSkuPrice(params.Ctx, vendorIDList, params.SkuID, params.IsAsync, params.IsContinueWhenError)
}
return retVal, "", err
})
}

View File

@@ -1665,6 +1665,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{
Method: "GetVendorStoreSkuPrice",
Router: `/GetVendorStoreSkuPrice`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{
Method: "GetVendorStoreSkusInfo",