获取某个商品平台价,商品名前缀
This commit is contained in:
@@ -24,8 +24,8 @@ const (
|
|||||||
maxLastHours = 7 * 24 // 最多只能查询7天内的订单数据
|
maxLastHours = 7 * 24 // 最多只能查询7天内的订单数据
|
||||||
defLastHours = 2 * 24 // 缺省是两天内的订单
|
defLastHours = 2 * 24 // 缺省是两天内的订单
|
||||||
|
|
||||||
orderMixTimeImmediatelyArrive = 8
|
orderSubTimeImmediatelyArrive = 8
|
||||||
orderMixTimeDelayArrive = 5
|
orderSubTimeDelayArrive = 5
|
||||||
)
|
)
|
||||||
|
|
||||||
type tWaybillExt struct {
|
type tWaybillExt struct {
|
||||||
@@ -939,6 +939,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
|
|||||||
}
|
}
|
||||||
if len(dateVendorList) > 0 {
|
if len(dateVendorList) > 0 {
|
||||||
var missingOrderList []*tOrderVendorPair
|
var missingOrderList []*tOrderVendorPair
|
||||||
|
var updateOrderStatusList []*tOrderVendorPair
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
vendorStoreIDMap := make(map[int]string)
|
vendorStoreIDMap := make(map[int]string)
|
||||||
if storeID > 0 {
|
if storeID > 0 {
|
||||||
@@ -995,12 +996,12 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
|
|||||||
} else {
|
} else {
|
||||||
if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled {
|
if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled {
|
||||||
if goodsOrder.BusinessType == model.BusinessTypeImmediate {
|
if goodsOrder.BusinessType == model.BusinessTypeImmediate {
|
||||||
if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderMixTimeImmediatelyArrive {
|
if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderSubTimeImmediatelyArrive {
|
||||||
missingOrderList = append(missingOrderList, pair)
|
updateOrderStatusList = append(updateOrderStatusList, pair)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderMixTimeDelayArrive {
|
if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderSubTimeDelayArrive {
|
||||||
missingOrderList = append(missingOrderList, pair)
|
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 {
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil {
|
||||||
order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID)
|
order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID)
|
||||||
if err = err2; err == nil {
|
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())
|
isDuplicated, err2 := c.SaveOrder(order, false, dao.GetDB())
|
||||||
if err2 == nil && !isDuplicated {
|
if err2 == nil && !isDuplicated {
|
||||||
retVal = []int{1}
|
retVal = []int{1}
|
||||||
@@ -1026,9 +1024,25 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in
|
|||||||
}, missingOrderList)
|
}, missingOrderList)
|
||||||
tasksch.HandleTask(task2, task, true).Run()
|
tasksch.HandleTask(task2, task, true).Run()
|
||||||
result, err = task2.GetResult(0)
|
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
|
return result, err
|
||||||
}, 2)
|
}, 3)
|
||||||
tasksch.HandleTask(task, nil, true).Run()
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
if !isAsync {
|
if !isAsync {
|
||||||
result, err2 := task.GetResult(0)
|
result, err2 := task.GetResult(0)
|
||||||
|
|||||||
@@ -871,10 +871,10 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil {
|
// if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil {
|
||||||
dao.Rollback(db)
|
// dao.Rollback(db)
|
||||||
return 0, err
|
// return 0, err
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID})
|
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,
|
task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
step := batchItemList[0].(int)
|
step := batchItemList[0].(int)
|
||||||
|
now := utils.Time2Date(time.Now())
|
||||||
switch step {
|
switch step {
|
||||||
case 0:
|
case 0:
|
||||||
task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
nameID := batchItemList[0].(int)
|
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{}{
|
||||||
payload := map[string]interface{}{
|
"exPrefix": exPrefix,
|
||||||
"exPrefix": exPrefix,
|
"exPrefixBegin": fromTimeP,
|
||||||
"exPrefixBegin": fromTimeP,
|
"exPrefixEnd": toTimeP,
|
||||||
"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)
|
_, err = UpdateSkuName(ctx, nameID, payload)
|
||||||
} else {
|
} else {
|
||||||
skuName := &model.SkuName{
|
skuName := &model.SkuName{
|
||||||
ExPrefix: exPrefix,
|
ExPrefix: exPrefix,
|
||||||
ExPrefixBegin: fromTimeP,
|
ExPrefixBegin: &fromTimeP,
|
||||||
ExPrefixEnd: toTimeP,
|
ExPrefixEnd: &toTimeP,
|
||||||
}
|
}
|
||||||
skuName.ID = nameID
|
skuName.ID = nameID
|
||||||
skuName.LastOperator = ctx.GetLoginID()
|
skuName.LastOperator = ctx.GetLoginID()
|
||||||
@@ -1391,7 +1396,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
|
|||||||
tasksch.HandleTask(task, nil, true).Run()
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
_, err = task.GetResult(0)
|
_, err = task.GetResult(0)
|
||||||
case 1:
|
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
|
var skuIDs []int
|
||||||
skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil)
|
skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
@@ -1399,7 +1404,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
|
|||||||
for _, v := range skuList {
|
for _, v := range skuList {
|
||||||
skuIDs = append(skuIDs, v.ID)
|
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
|
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)
|
_, err = dao.UpdateStoreSkuBindSyncStatusForExPrefix(db, vendorIDs)
|
||||||
return err
|
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)
|
_, err = dao.UpdateSkuSyncStatusForExPrefix(db, vendorIDs)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeleteSkuNameExPrefixOverdue(db *dao.DaoDB) (err error) {
|
||||||
|
_, err = dao.DeleteSkuNameExPrefixOverdue(db)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
"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/jxutils/tasksch"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/jd"
|
"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"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
|
||||||
@@ -42,6 +43,13 @@ const (
|
|||||||
CopyStoreSkuModeUpdatePrice = "updatePrice" // 增量复制价格
|
CopyStoreSkuModeUpdatePrice = "updatePrice" // 增量复制价格
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//通用写入Excel
|
||||||
|
type ExcelParam struct {
|
||||||
|
DataList interface{}
|
||||||
|
SheetName string
|
||||||
|
TitleList []string
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateStoreSku用,API调用时
|
// UpdateStoreSku用,API调用时
|
||||||
type StoreSkuBindSkuInfo struct {
|
type StoreSkuBindSkuInfo struct {
|
||||||
SkuID int `json:"skuID"`
|
SkuID int `json:"skuID"`
|
||||||
@@ -117,6 +125,15 @@ type SheetParam struct {
|
|||||||
SkuRow int
|
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 {
|
type DataSuccess struct {
|
||||||
NameID int `json:"商品NameID"`
|
NameID int `json:"商品NameID"`
|
||||||
Name string `json:"商品名称"`
|
Name string `json:"商品名称"`
|
||||||
@@ -151,7 +168,15 @@ var (
|
|||||||
"18180948107": 1, // 徐
|
"18180948107": 1, // 徐
|
||||||
// "13684045763": 1, // 周
|
// "13684045763": 1, // 周
|
||||||
}
|
}
|
||||||
dataLock DataLock
|
dataLock DataLock
|
||||||
|
titleListVendorStoreSkuPrice = []string{
|
||||||
|
"门店ID",
|
||||||
|
"门店名",
|
||||||
|
"商品ID",
|
||||||
|
"商品NameID",
|
||||||
|
"商品名",
|
||||||
|
"平台价",
|
||||||
|
}
|
||||||
titleListSuccess = []string{
|
titleListSuccess = []string{
|
||||||
"商品NameID",
|
"商品NameID",
|
||||||
"商品名称",
|
"商品名称",
|
||||||
@@ -2484,3 +2509,129 @@ func IsChineseChar(str string) bool {
|
|||||||
func GetStoreCategories(ctx *jxcontext.Context, storeID, parentID int) (catList []*model.SkuCategory, err error) {
|
func GetStoreCategories(ctx *jxcontext.Context, storeID, parentID int) (catList []*model.SkuCategory, err error) {
|
||||||
return dao.GetStoreSkuCategories(dao.GetDB(), storeID, parentID)
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -340,10 +340,10 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
|
|||||||
//多规格商品不用比较数量单位
|
//多规格商品不用比较数量单位
|
||||||
if jxSkuInfo.IsSpu == 0 {
|
if jxSkuInfo.IsSpu == 0 {
|
||||||
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..)
|
//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 {
|
} else {
|
||||||
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..)
|
//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
|
//jxSkuSaleStatus : 商品状态 ,skustatus 优先级高于 StoreSkuStatus
|
||||||
@@ -462,9 +462,9 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool
|
|||||||
var jxSkuDetailName string
|
var jxSkuDetailName string
|
||||||
//多规格商品不用比较数量单位
|
//多规格商品不用比较数量单位
|
||||||
if jxSkuInfo.IsSpu == 0 {
|
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 {
|
} 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]
|
vendorSkuInfoMap := filterVendorSkuInfoMap[skuid]
|
||||||
|
|||||||
@@ -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) {
|
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")
|
globals.SugarLogger.Debug("SyncStoresSkus2")
|
||||||
isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8
|
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,
|
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) {
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
||||||
|
|||||||
@@ -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) {
|
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)
|
globals.SugarLogger.Debugf("SyncSkus vendorIDs:%v, appOrgCodes:%v, nameIDs:%v, skuIDs:%v", vendorIDs, appOrgCodes, nameIDs, skuIDs)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
SetMultiStoreSkuSyncModifyStauts(db, vendorIDs)
|
|
||||||
skuList, err := dao.GetSkusWithVendor(db, vendorIDs, appOrgCodes, nameIDs, skuIDs, true)
|
skuList, err := dao.GetSkusWithVendor(db, vendorIDs, appOrgCodes, nameIDs, skuIDs, true)
|
||||||
if err == nil && len(skuList) > 0 {
|
if err == nil && len(skuList) > 0 {
|
||||||
// todo 按vendorID orgCode合并操作
|
// todo 按vendorID orgCode合并操作
|
||||||
|
|||||||
@@ -165,13 +165,20 @@ func syncStoreSku() {
|
|||||||
if (time.Now().Unix()/24*3600)%10 == 0 {
|
if (time.Now().Unix()/24*3600)%10 == 0 {
|
||||||
syncFlag |= model.SyncFlagSaleMask
|
syncFlag |= model.SyncFlagSaleMask
|
||||||
}
|
}
|
||||||
|
db := dao.GetDB()
|
||||||
task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx,
|
task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
step := batchItemList[0].(int)
|
step := batchItemList[0].(int)
|
||||||
errList := errlist.New()
|
errList := errlist.New()
|
||||||
switch step {
|
switch step {
|
||||||
case 0:
|
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) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
vendorInfo := batchItemList[0].(*cms.MultiStoreVendorInfo)
|
vendorInfo := batchItemList[0].(*cms.MultiStoreVendorInfo)
|
||||||
_, err = cms.FullSyncVendorStuff(jxcontext.AdminCtx, task, vendorInfo.VendorID, vendorInfo.OrgCode, false, true)
|
_, err = cms.FullSyncVendorStuff(jxcontext.AdminCtx, task, vendorInfo.VendorID, vendorInfo.OrgCode, false, true)
|
||||||
@@ -180,20 +187,20 @@ func syncStoreSku() {
|
|||||||
errList.AddErr(err)
|
errList.AddErr(err)
|
||||||
|
|
||||||
// cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, nil, []int{27379}, syncFlag, true, true)
|
// 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)
|
errList.AddErr(err)
|
||||||
case 1:
|
case 2:
|
||||||
_, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false)
|
_, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false)
|
||||||
errList.AddErr(err)
|
errList.AddErr(err)
|
||||||
|
|
||||||
SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID)
|
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)
|
errList.AddErr(err2)
|
||||||
SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
|
SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
|
||||||
}
|
}
|
||||||
err = errList.GetErrListAsOne()
|
err = errList.GetErrListAsOne()
|
||||||
return retVal, err
|
return retVal, err
|
||||||
}, []int{0, 1})
|
}, []int{0, 1, 2})
|
||||||
tasksch.HandleTask(task, nil, true).Run()
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1451,7 +1451,7 @@ func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, i
|
|||||||
}
|
}
|
||||||
price := sku.LinkID
|
price := sku.LinkID
|
||||||
sku.LinkID = 0
|
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
|
fixedStatus := 1
|
||||||
if sku.Status != model.SkuStatusNormal {
|
if sku.Status != model.SkuStatusNormal {
|
||||||
fixedStatus = 2
|
fixedStatus = 2
|
||||||
|
|||||||
@@ -327,9 +327,9 @@ func FloatWeight2Int(weight float32) int {
|
|||||||
return int(math.Round(float64(weight * 1000)))
|
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) {
|
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 exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil {
|
||||||
if time.Now().After(exPrefixBegin) && time.Now().Before(exPrefixEnd) {
|
if time.Now().After(*exPrefixBegin) && time.Now().Before(*exPrefixEnd) {
|
||||||
skuName = exPrefix
|
skuName = exPrefix
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -353,12 +353,12 @@ func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, sp
|
|||||||
return skuName
|
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) {
|
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 exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil {
|
||||||
if time.Now().Add(6*time.Hour).After(exPrefixBegin) && time.Now().Before(exPrefixEnd) {
|
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) < 0 {
|
||||||
skuName = exPrefix
|
skuName = exPrefix
|
||||||
}
|
}
|
||||||
if time.Now().Add(6 * time.Hour).After(exPrefixEnd) {
|
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixEnd) >= 0 {
|
||||||
skuName = ""
|
skuName = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,8 +201,8 @@ type ActStoreSku2 struct {
|
|||||||
|
|
||||||
Prefix string `json:"-"`
|
Prefix string `json:"-"`
|
||||||
ExPrefix string
|
ExPrefix string
|
||||||
ExPrefixBegin time.Time
|
ExPrefixBegin *time.Time
|
||||||
ExPrefixEnd time.Time
|
ExPrefixEnd *time.Time
|
||||||
SkuNameName string `orm:"column(sku_name_name)" json:"-"`
|
SkuNameName string `orm:"column(sku_name_name)" json:"-"`
|
||||||
Unit string `orm:"size(8)" json:"-"`
|
Unit string `orm:"size(8)" json:"-"`
|
||||||
SpecQuality float32 `json:"-"`
|
SpecQuality float32 `json:"-"`
|
||||||
|
|||||||
@@ -278,7 +278,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Tim
|
|||||||
err = err2
|
err = err2
|
||||||
if len(skuList) > 0 {
|
if len(skuList) > 0 {
|
||||||
skuAndName := 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
|
v.SkuName = jxSkuDetailName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ type StoreSkuSyncInfo struct {
|
|||||||
// sku_name
|
// sku_name
|
||||||
Prefix string
|
Prefix string
|
||||||
ExPrefix string
|
ExPrefix string
|
||||||
ExPrefixBegin time.Time
|
ExPrefixBegin *time.Time
|
||||||
ExPrefixEnd time.Time
|
ExPrefixEnd *time.Time
|
||||||
// NameID int `orm:"column(name_id)"`
|
// NameID int `orm:"column(name_id)"`
|
||||||
VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
|
VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
|
||||||
Name string
|
Name string
|
||||||
@@ -918,7 +918,7 @@ func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num in
|
|||||||
if len(vendorIDs) > 0 {
|
if len(vendorIDs) > 0 {
|
||||||
for _, v := range vendorIDs {
|
for _, v := range vendorIDs {
|
||||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
|
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
|
||||||
sql += ` %s_sync_status = ?,`
|
sql += ` %s_sync_status = %s_sync_status | ?,`
|
||||||
fmtParams = append(fmtParams, fieldPrefix)
|
fmtParams = append(fmtParams, fieldPrefix)
|
||||||
sqlParams = append(sqlParams, model.SyncFlagModifiedMask)
|
sqlParams = append(sqlParams, model.SyncFlagModifiedMask)
|
||||||
}
|
}
|
||||||
@@ -927,13 +927,12 @@ func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num in
|
|||||||
}
|
}
|
||||||
sql = sql[0:strings.LastIndex(sql, ",")]
|
sql = sql[0:strings.LastIndex(sql, ",")]
|
||||||
sql = fmt.Sprintf(sql, fmtParams...)
|
sql = fmt.Sprintf(sql, fmtParams...)
|
||||||
sql += ` WHERE a.status = ?
|
sql += ` WHERE a.deleted_at = ?
|
||||||
AND a.deleted_at = ?
|
|
||||||
AND c.ex_prefix != ""
|
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')
|
AND (c.ex_prefix_begin = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00')
|
||||||
OR DATE_FORMAT(c.ex_prefix_end,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d'))
|
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...)
|
return ExecuteSQL(db, sql, sqlParams...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -950,7 +949,7 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err
|
|||||||
if len(vendorIDs) > 0 {
|
if len(vendorIDs) > 0 {
|
||||||
for _, v := range vendorIDs {
|
for _, v := range vendorIDs {
|
||||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
|
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v])
|
||||||
sql += ` b.%s_sync_status = ?,`
|
sql += ` b.%s_sync_status = b.%s_sync_status | ?,`
|
||||||
fmtParams = append(fmtParams, fieldPrefix)
|
fmtParams = append(fmtParams, fieldPrefix)
|
||||||
sqlParams = append(sqlParams, model.SyncFlagModifiedMask)
|
sqlParams = append(sqlParams, model.SyncFlagModifiedMask)
|
||||||
}
|
}
|
||||||
@@ -961,13 +960,24 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err
|
|||||||
sql = fmt.Sprintf(sql, fmtParams...)
|
sql = fmt.Sprintf(sql, fmtParams...)
|
||||||
sql += ` WHERE b.deleted_at = ?
|
sql += ` WHERE b.deleted_at = ?
|
||||||
AND c.ex_prefix != ""
|
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')
|
AND (c.ex_prefix_begin = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00')
|
||||||
OR DATE_FORMAT(c.ex_prefix_end,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d'))
|
OR c.ex_prefix_end = DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00'))
|
||||||
`
|
`
|
||||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||||
return ExecuteSQL(db, sql, sqlParams...)
|
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) {
|
func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT a.*,c.unit,c.name
|
SELECT a.*,c.unit,c.name
|
||||||
|
|||||||
@@ -170,10 +170,10 @@ type SkuName struct {
|
|||||||
|
|
||||||
Prefix string `orm:"size(255)" json:"prefix"`
|
Prefix string `orm:"size(255)" json:"prefix"`
|
||||||
Name string `orm:"size(255);index" json:"name"`
|
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"`
|
ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"`
|
||||||
ExPrefixEnd time.Time `orm:"type(datetime);null" json:"exPrefixEnd"`
|
ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"`
|
||||||
|
|
||||||
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
|
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
|
||||||
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
|
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 {
|
type Sku struct {
|
||||||
ModelIDCULD
|
ModelIDCULD
|
||||||
|
|
||||||
@@ -234,8 +240,8 @@ type SkuAndName struct {
|
|||||||
Prefix string
|
Prefix string
|
||||||
IsSpu int
|
IsSpu int
|
||||||
ExPrefix string
|
ExPrefix string
|
||||||
ExPrefixBegin time.Time
|
ExPrefixBegin *time.Time
|
||||||
ExPrefixEnd time.Time
|
ExPrefixEnd *time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*Sku) TableUnique() [][]string {
|
func (*Sku) TableUnique() [][]string {
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ func GetRecipeDetail(ctx *jxcontext.Context, recipeID int) (recipeDetail *FoodRe
|
|||||||
}
|
}
|
||||||
choiceMap := make(map[int8][]*dao.FoodRecipeItemChoiceExt)
|
choiceMap := make(map[int8][]*dao.FoodRecipeItemChoiceExt)
|
||||||
for _, v := range itemChoiceList {
|
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)
|
choiceMap[v.Index] = append(choiceMap[v.Index], v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -399,8 +399,8 @@ func (c *SkuController) GetJdUpcCodeByName() {
|
|||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
// @Param nameIDs formData string true "商品nameIDs"
|
// @Param nameIDs formData string true "商品nameIDs"
|
||||||
// @Param exPrefix formData string true "商品额外前缀"
|
// @Param exPrefix formData string true "商品额外前缀"
|
||||||
// @Param fromTime formData string true "生效开始时间,格式 2006-01-01 00:00:00"
|
// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 "
|
||||||
// @Param toTime formData string true "生效结束时间,格式 2006-01-01 00:00:00"
|
// @Param toDate formData string true "生效结束时间,格式 2006-01-01 "
|
||||||
// @Param isAsync formData bool false "是否异步"
|
// @Param isAsync formData bool false "是否异步"
|
||||||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
|||||||
@@ -537,3 +537,23 @@ func (c *StoreSkuController) GetStoreCategories() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1665,6 +1665,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetVendorStoreSkusInfo",
|
Method: "GetVendorStoreSkusInfo",
|
||||||
|
|||||||
Reference in New Issue
Block a user