diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 951062656..a66643ffe 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -219,22 +219,30 @@ func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, sp if unit == "份" { skuName += "约" } - if math.Round(float64(spec_quality)) == float64(spec_quality) || (spec_unit != "L" && spec_unit != "kg") { - skuName += fmt.Sprintf("%d", int(spec_quality)) - } else { - skuName += fmt.Sprintf("%.2f", spec_quality) - } - skuName += spec_unit + skuName += ComposeSkuSpec(spec_quality, spec_unit) skuName += "/" + unit if comment != "" { skuName += "(" + comment + ")" } if maxLen > 0 { - skuName = skuName[:maxLen] + runeList := []rune(skuName) + if len(runeList) > maxLen { + skuName = string(runeList[:maxLen]) + } } return skuName } +func ComposeSkuSpec(spec_quality float32, spec_unit string) (spec string) { + if math.Round(float64(spec_quality)) == float64(spec_quality) || (spec_unit != "L" && spec_unit != "kg") { + spec = fmt.Sprintf("%d", int(spec_quality)) + } else { + spec = strings.TrimRight(fmt.Sprintf("%.2f", spec_quality), "0.") + } + spec += spec_unit + return spec +} + // 1:商品特殊前缀 // 2:商品名字 // 3:商品说明1(可缺失) diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 6d452a1f3..56c252cd6 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -5,7 +5,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals" ) type SkuStoreCatInfo struct { @@ -88,6 +87,7 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*St } type StoreSkuSyncInfo struct { + BindID int `orm:"column(bind_id)"` Price int64 UnitPrice int64 StoreSkuStatus int @@ -109,7 +109,7 @@ type StoreSkuSyncInfo struct { func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*StoreSkuSyncInfo, err error) { sql := ` - SELECT t1.price, t1.unit_price, t1.status store_sku_status, t1.%s_id, t1.%s_sync_status sku_sync_status, + SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t1.%s_id, t1.%s_sync_status sku_sync_status, t2.*, t3.prefix, t3.name, t3.unit, t3.img, t4.%s_category_id vendor_vendor_cat_id, @@ -134,7 +134,7 @@ func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*Store } filedPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql = fmt.Sprintf(sql, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix) - globals.SugarLogger.Debug(sql) + // globals.SugarLogger.Debug(sql) if err = GetRows(db, &skus, sql, sqlParams...); err != nil { return nil, err } diff --git a/business/partner/purchase/mtwm/store_sku.go b/business/partner/purchase/mtwm/store_sku.go index e5da6500c..5dbed1077 100644 --- a/business/partner/purchase/mtwm/store_sku.go +++ b/business/partner/purchase/mtwm/store_sku.go @@ -192,43 +192,48 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks skus, err := dao.GetStoreSkus(db, model.VendorIDMTWM, storeID, skuIDs) // globals.SugarLogger.Debug(utils.Format4Output(skus, false)) strStoreID := utils.Int2Str(storeID) - rootTask := tasksch.NewParallelTask("mtwm SyncStoreSkus", tasksch.NewParallelConfig().SetBatchSize(200), ctx.GetUserName(), func(rootTask *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + rootTask := tasksch.NewParallelTask("mtwm SyncStoreSkus", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx.GetUserName(), func(rootTask *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { foodDataList := make([]map[string]interface{}, len(batchItemList)) - for k, v := range batchItemList { - skuItem := v.(*dao.StoreSkuSyncInfo) - foodDataList[k] = make(map[string]interface{}) - // globals.SugarLogger.Debug(utils.Format4Output(skuItem, false)) - foodDataList[k][mtwmapi.KeyAppFoodCode] = utils.Int2Str(skuItem.ID) - foodDataList[k]["name"] = skuItem.Name - foodDataList[k]["description"] = skuItem.Comment - foodDataList[k]["price"] = jxutils.IntPrice2Standard(skuItem.Price) - foodDataList[k]["min_order_count"] = 1 - foodDataList[k]["unit"] = skuItem.Unit - foodDataList[k]["box_num"] = 0 - foodDataList[k]["box_price"] = 0 - foodDataList[k]["category_name"] = skuItem.VendorCatID - foodDataList[k]["is_sold_out"] = skuStatusJX2Mtwm(jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus)) - foodDataList[k]["picture"] = skuItem.Img + // for k, v := range batchItemList { + v := batchItemList[0] + skuItem := v.(*dao.StoreSkuSyncInfo) + if skuItem.SkuSyncStatus&model.SyncFlagDeletedMask != 0 { + err = api.MtwmAPI.RetailDelete(strStoreID, utils.Int2Str(skuItem.ID)) + } else if skuItem.SkuSyncStatus&(model.SyncFlagModifiedMask|model.SyncFlagNewMask) != 0 { + foodData := make(map[string]interface{}) + foodDataList[0] = foodData + foodData[mtwmapi.KeyAppFoodCode] = utils.Int2Str(skuItem.ID) + foodData["name"] = jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30) + foodData["description"] = skuItem.Comment + foodData["price"] = jxutils.IntPrice2Standard(skuItem.Price) + foodData["min_order_count"] = 1 + foodData["unit"] = skuItem.Unit + foodData["box_num"] = 0 + foodData["box_price"] = 0 + foodData["category_name"] = skuItem.VendorCatID + foodData["is_sold_out"] = skuStatusJX2Mtwm(jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus)) + foodData["picture"] = skuItem.Img if skuItem.VendorVendorCatID != 0 { - foodDataList[k]["tag_id"] = utils.Int64ToStr(skuItem.VendorVendorCatID) + foodData["tag_id"] = utils.Int64ToStr(skuItem.VendorVendorCatID) } else { - foodDataList[k]["tag_id"] = utils.Int64ToStr(defVendorCatID) + foodData["tag_id"] = utils.Int64ToStr(defVendorCatID) } - foodDataList[k]["skus"] = []map[string]interface{}{ + foodData["skus"] = []map[string]interface{}{ map[string]interface{}{ - "sku_id": foodDataList[k][mtwmapi.KeyAppFoodCode], - "spec": "大", + "sku_id": foodData[mtwmapi.KeyAppFoodCode], + "spec": jxutils.ComposeSkuSpec(skuItem.SpecQuality, skuItem.SpecUnit), "weight": skuItem.Weight, - "price": foodDataList[k]["price"], + "price": foodData["price"], "stock": "*", }, } - // if err = api.MtwmAPI.RetailInitData(strStoreID, utils.Int2Str(skuItem.ID), foodDataList[k]); err != nil { - // return nil, err - // } + err = api.MtwmAPI.RetailBatchInitData(strStoreID, foodDataList) + } + if err == nil { + storeSkuBind := &model.StoreSkuBind{} + storeSkuBind.ID = skuItem.BindID + _, err = dao.UpdateEntity(nil, storeSkuBind, model.FieldMtwmSyncStatus) } - // globals.SugarLogger.Debug(utils.Format4Output(foodDataList, false)) - err = api.MtwmAPI.RetailBatchInitData(strStoreID, foodDataList) return nil, err }, skus) if parentTask != nil {