diff --git a/business/jxcallback/auth/weixin/weixin.go b/business/jxcallback/auth/weixin/weixin.go index a865892d9..f66dc999e 100644 --- a/business/jxcallback/auth/weixin/weixin.go +++ b/business/jxcallback/auth/weixin/weixin.go @@ -67,13 +67,13 @@ func GetUserInfo(code string, state string) (token *UserInfoExt, err error) { func (a *Auther) Login(openid, password string) (err error) { if value := globals.Cacher.Get(openid); value != nil { if password == value.(string) { - wxUser := &model.WeiXins{ - OpenID: openid, - } - if err = dao.GetEntity(nil, wxUser, "OpenID"); err == nil { - globals.Cacher.Del(openid) - return nil - } + // wxUser := &model.WeiXins{ + // OpenID: openid, + // } + // if err = dao.GetEntity(nil, wxUser, "OpenID"); err == nil { + globals.Cacher.Del(openid) + return nil + // } } } else { err = ErrLoginFailed diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index fd1f6fc9e..798067c1f 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1,9 +1,7 @@ package cms import ( - "math" "strconv" - "strings" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" @@ -274,7 +272,7 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str SkuID: v.RealSkuID, SubStoreID: skuBindInfo.SubStoreID, // todo 这个应该从用户信息中自动获得 UnitPrice: unitPrice, - Price: calStoreSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit), + Price: jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit), Status: model.StoreSkuBindStatusDontSale, // 缺省不可售? } if inSkuBind != nil && inSkuBind.IsSale == 1 { @@ -319,7 +317,7 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str } if skuBindInfo.UnitPrice != 0 { // 这里是否需要加此条件限制 skuBind.UnitPrice = unitPrice - skuBind.Price = calStoreSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit) + skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit) setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask) needUpdate = true } @@ -356,14 +354,6 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str return int64(len(skuIDs)), err } -// 计算SKU价格,unitPrice为一斤的单价,specQuality为质量,单位为克 -func calStoreSkuPrice(unitPrice int, specQuality float32, specUnit string) int { - if strings.ToLower(specUnit) == "kg" { - specQuality *= 1000 - } - return int(math.Round(float64(float32(unitPrice) * specQuality / 500))) -} - func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) { skuBind.JdSyncStatus |= status skuBind.ElmSyncStatus |= status diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 77bc210c5..6d25431f1 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -3,6 +3,7 @@ package cms import ( "errors" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" @@ -47,10 +48,12 @@ func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, u if err = dao.GetEntitiesByKV(db, &cats, cond, true); err == nil { tasksch.RunTask("", func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { cat := batchItemList[0].(*model.SkuCategory) + updateFields := []string{model.FieldJdSyncStatus} if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 { //删除 err = multiStoresHandler.DeleteCategory(db, cat, userName) } else if (cat.JdSyncStatus&model.SyncFlagNewMask) != 0 || isForce { // 新增 err = multiStoresHandler.CreateCategory(db, cat, userName) + updateFields = append(updateFields, model.FieldJdID) } else if (cat.JdSyncStatus & model.SyncFlagModifiedMask) != 0 { // 修改 err = multiStoresHandler.UpdateCategory(db, cat, userName) } @@ -92,6 +95,7 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce boo } func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, userName string) (err error) { + globals.SugarLogger.Debugf("SyncSku, nameID:%d, skuID:%d, isForce:%t, userName:%s", nameID, skuID, isForce, userName) err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) var skuList []*model.Sku @@ -102,16 +106,17 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use if skuID != -1 { cond[model.FieldID] = skuID } - if err = dao.GetEntitiesByKV(db, &skuList, cond, true); err == nil { - tasksch.RunTask("", func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + if err := dao.GetEntitiesByKV(db, &skuList, cond, true); err == nil { + globals.SugarLogger.Debug(utils.Format4Output(skuList, false)) + task := tasksch.RunTask("SyncSku", func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { sku := batchItemList[0].(*model.Sku) if (skuID == -1 || skuID == sku.ID) && (isForce || sku.JdSyncStatus != 0) { updateFields := []string{model.FieldJdSyncStatus} if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除 + err = multiStoresHandler.DeleteSku(db, sku, userName) + } else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 新增 err = multiStoresHandler.CreateSku(db, sku, userName) updateFields = append(updateFields, model.FieldJdID) - } else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 新增 - err = multiStoresHandler.DeleteSku(db, sku, userName) } else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改 err = multiStoresHandler.UpdateSku(db, sku, userName) } @@ -122,6 +127,7 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use } return nil, err }, nil, len(skuList), 1, "", skuList) + _, err = task.GetResult(0) } return nil, err }) @@ -151,12 +157,15 @@ func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, storeID int, handler tasksch.Wo } func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, handler tasksch.WorkFunc) (err error) { - task := tasksch.RunTask("", handler, nil, len(MultiStoresVendorHandlers), 1, "", MultiStoresVendorHandlers) + task := tasksch.RunTask("LoopMultiStoresVendors", handler, nil, len(MultiStoresVendorHandlers), 1, "", MultiStoresVendorHandlers) _, err = task.GetResult(0) return err } func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { + if taskName == "" { + taskName = "LoopSingleStoreVendors" + } var storeMaps []*model.StoreMap if err = dao.GetRows(db, &storeMaps, ` SELECT * diff --git a/business/jxutils/jxutils_cms.go b/business/jxutils/jxutils_cms.go index fa4010514..cb7a239d2 100644 --- a/business/jxutils/jxutils_cms.go +++ b/business/jxutils/jxutils_cms.go @@ -99,3 +99,11 @@ func IntMap2List(intMap map[int]int) []int { } return retVal } + +// 计算SKU价格,unitPrice为一斤的单价,specQuality为质量,单位为克 +func CaculateSkuPrice(unitPrice int, specQuality float32, specUnit string) int { + if strings.ToLower(specUnit) == "kg" { + specQuality *= 1000 + } + return int(math.Round(float64(float32(unitPrice) * specQuality / 500))) +} diff --git a/business/jxutils/tasksch/task.go b/business/jxutils/tasksch/task.go index 1a23f5813..60cbabbc0 100644 --- a/business/jxutils/tasksch/task.go +++ b/business/jxutils/tasksch/task.go @@ -7,6 +7,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/globals" ) const ( @@ -91,6 +92,7 @@ func RunTask(taskName string, worker WorkFunc, resultHandler ResultHandlerFunc, } task.C = task.finishChan go func() { + globals.SugarLogger.Debugf("RunTask %s", taskName) for i := 0; i < parallelCount; i++ { go func() { var chanRetVal interface{} @@ -104,19 +106,25 @@ func RunTask(taskName string, worker WorkFunc, resultHandler ResultHandlerFunc, chanRetVal = retVal goto end } else { - if result, err := worker(job, params...); err == nil { + result, err := worker(job, params...) + globals.SugarLogger.Debugf("RunTask %s, after call worker result:%v, err:%v", taskName, result, err) + if err == nil { task.finishedOneJob(len(job)) if result != nil { retVal = append(retVal, utils.Interface2Slice(result)...) } } else { chanRetVal = err - task.Cancel() + go func() { + task.Cancel() + }() + goto end } } } } end: + // globals.SugarLogger.Debugf("RunTask %s, put to chann chanRetVal:%v", taskName, chanRetVal) task.subFinishChan <- chanRetVal }() } @@ -157,6 +165,7 @@ func RunTask(taskName string, worker WorkFunc, resultHandler ResultHandlerFunc, task.TerminatedAt = time.Now() task.locker.Unlock() + globals.SugarLogger.Debugf("RunTask %s, result:%v, err:%v", taskName, taskResult, taskErr) close(task.finishChan) close(task.subFinishChan) diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index f5e9846d3..a18d02760 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -17,7 +17,7 @@ const ( DefJdCategoryID = 20362 ) -type skuInfoExt struct { +type tSkuInfoExt struct { model.SkuName Img string JdID int64 `orm:"column(jd_id)"` // 商家类别 @@ -102,9 +102,9 @@ func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, user return err } -func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) { - var otherInfo skuInfoExt - err = dao.GetRow(nil, &otherInfo, ` +func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) { + var skuInfoExt tSkuInfoExt + err = dao.GetRow(nil, &skuInfoExt, ` SELECT t2.*, t3.jd_id, t3.jd_category_id, t4.jd_id sku_cat_id FROM sku t1 JOIN sku_name t2 ON t1.name_id = t2.id @@ -113,20 +113,20 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE WHERE t1.id = ? `, sku.ID) if err == nil { - shopCategories := []int64{otherInfo.JdID} - if otherInfo.SkuCatID != 0 { - shopCategories = append(shopCategories, otherInfo.SkuCatID) + shopCategories := []int64{skuInfoExt.JdID} + if skuInfoExt.SkuCatID != 0 { + shopCategories = append(shopCategories, skuInfoExt.SkuCatID) } - if otherInfo.JdCategoryID == 0 { - otherInfo.JdCategoryID = DefJdCategoryID + if skuInfoExt.JdCategoryID == 0 { + skuInfoExt.JdCategoryID = DefJdCategoryID } - if otherInfo.BrandID == 0 { - otherInfo.BrandID = DefBrandID + if skuInfoExt.BrandID == 0 { + skuInfoExt.BrandID = DefBrandID } addParams := map[string]interface{}{} - if otherInfo.IsGlobal == 0 { //如果不是全国可售,要查可售区域 - sellPlaces, err2 := dao.GetSellCities(db, otherInfo.ID, model.VendorIDJD) + if skuInfoExt.IsGlobal == 0 { //如果不是全国可售,要查可售区域 + sellPlaces, err2 := dao.GetSellCities(db, skuInfoExt.ID, model.VendorIDJD) if err = err2; err == nil && len(sellPlaces) > 0 { sellCites := make([]int, len(sellPlaces)) for k, v := range sellPlaces { @@ -136,9 +136,10 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE } } if err == nil { - skuName := jxutils.ComposeSkuName(otherInfo.Prefix, otherInfo.Name, otherInfo.Comment, otherInfo.Unit, sku.SpecQuality, sku.SpecUnit, 0) - globals.SugarLogger.Debug(skuName) - result, err2 := handler(&otherInfo, skuName, shopCategories, addParams) + skuName := jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, skuInfoExt.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, 0) + globals.SugarLogger.Debug(utils.Format4Output(skuInfoExt, false), utils.Format4Output(sku, false)) + skuPrice := jxutils.CaculateSkuPrice(skuInfoExt.Price, sku.SpecQuality, sku.SpecUnit) + result, err2 := handler(&skuInfoExt, skuPrice, skuName, shopCategories, addParams) if err = err2; err == nil { if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 { sku.JdID = jdID @@ -150,9 +151,9 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE } func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { - return p.cuSku(db, sku, func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) { + return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) { if globals.EnableStoreWrite { - vendorSkuID, err = api.JdAPI.AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, skuExt.Price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, 1, true, addParams) + vendorSkuID, err = api.JdAPI.AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, 1, true, addParams) } return vendorSkuID, err }) @@ -225,7 +226,7 @@ func (p *PurchaseHandler) ReadSku(vendorSkuID string) (skuNameExt *model.SkuName } func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { - return p.cuSku(db, sku, func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) { + return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) { params := utils.MergeMaps(addParams) params["categoryId"] = skuExt.JdCategoryID params["shopCategories"] = shopCategories diff --git a/business/partner/purchase/jd/sku_test.go b/business/partner/purchase/jd/sku_test.go index a8ac58023..6e084943d 100644 --- a/business/partner/purchase/jd/sku_test.go +++ b/business/partner/purchase/jd/sku_test.go @@ -23,12 +23,13 @@ func TestCreateSku(t *testing.T) { func TestUpdateSku(t *testing.T) { // t.Log(beego.BConfig.RunMode) + db := dao.GetDB() skuID := 21741 sku := &model.Sku{} sku.ID = skuID - dao.GetEntity(nil, sku) + dao.GetEntity(db, sku) - err := new(PurchaseHandler).UpdateSku(sku, "autotest") + err := new(PurchaseHandler).UpdateSku(db, sku, "autotest") if err != nil { t.Fatal(err.Error()) } diff --git a/business/partner/purchase/jd/store_test.go b/business/partner/purchase/jd/store_test.go index 9d0acacc6..0b20021c6 100644 --- a/business/partner/purchase/jd/store_test.go +++ b/business/partner/purchase/jd/store_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model/dao" ) const ( @@ -27,13 +28,13 @@ func TestUpdateStore(t *testing.T) { // result := &model.Store{} // result.ID = 100164 // err := dao.GetEntity(nil, result) - + db := dao.GetDB() if err != nil { t.Fatal(err.Error()) } result.Name += "h" newName := result.Name - err = handler.UpdateStore(TestStoreNo, "autotest") + err = handler.UpdateStore(db, TestStoreNo, "autotest") if err != nil { t.Fatal(err.Error()) } @@ -46,7 +47,7 @@ func TestUpdateStore(t *testing.T) { // restore result.Name = strings.Trim(result.Name, "h") - err = handler.UpdateStore(TestStoreNo, "autotest") + err = handler.UpdateStore(db, TestStoreNo, "autotest") if err != nil { t.Fatal(err.Error()) }