From 4d3eb5d94c4be8dcb4339f479c57fbce4787a4ec Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 4 Dec 2019 17:49:45 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=B9=E4=BB=B7?= =?UTF-8?q?=E6=97=B6=E7=9A=84isScale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 67 +++++++++++++++++++++-------- business/jxstore/yonghui/yonghui.go | 2 +- controllers/cms_store_sku.go | 6 ++- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 54274907d..7f36dda0e 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -788,15 +788,15 @@ func UpdateStoreSku(ctx *jxcontext.Context, storeID int, skuBindInfo *StoreSkuBi } func UpdateStoreSkus(ctx *jxcontext.Context, storeID int, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) { - return UpdateStoresSkus(ctx, []int{storeID}, skuBindInfos, isAsync, isContinueWhenError) + return UpdateStoresSkus(ctx, []int{storeID}, skuBindInfos, false, isAsync, isContinueWhenError) } -func UpdateStoresSkus(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) { +func UpdateStoresSkus(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*StoreSkuBindInfo, isScale, isAsync, isContinueWhenError bool) (hint string, err error) { globals.SugarLogger.Debugf("UpdateStoresSkus:%s, storeIDs:%v, skuBindInfos:%s", ctx.GetTrackInfo(), storeIDs, utils.Format4Output(skuBindInfos, true)) var num int64 db := dao.GetDB() - skuIDs, err := updateStoresSkusWithoutSync(ctx, db, storeIDs, skuBindInfos) + skuIDs, err := updateStoresSkusWithoutSync(ctx, db, storeIDs, skuBindInfos, isScale) if err != nil { return "", err } @@ -836,7 +836,7 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBind } }() for _, storeID := range storeIDs { - skuIDs, err2 := updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosMap[storeID]) + skuIDs, err2 := updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosMap[storeID], false) if err = err2; err != nil { dao.Rollback(db) return "", err @@ -916,7 +916,7 @@ func uniqueStoreNameBind(skuBindInfos []*StoreSkuBindInfo) (outSkuBindInfos []*S return outSkuBindInfos } -func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs []int, skuBindInfos []*StoreSkuBindInfo) (needSyncSkus []int, err error) { +func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs []int, skuBindInfos []*StoreSkuBindInfo, isScale bool) (needSyncSkus []int, err error) { if len(storeIDs)*len(skuBindInfos) > maxStoreNameBind2 { return nil, fmt.Errorf("门店商品信息大于%d", maxStoreNameBind2) } @@ -957,6 +957,12 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs dao.Rollback(db) return nil, err } + scaleFactor := float64(1) + if isScale { + if storeDetail.PayPercentage > 0 { + scaleFactor = float64(storeDetail.PayPercentage) / 100 + } + } for _, skuBindInfo := range skuBindInfos { // 关注且没有给价时,需要尝试从store_sku_bind中得到已有的单价 needGetExistingUnitPrice := skuBindInfo.UnitPrice == 0 && skuBindInfo.IsFocus == 1 @@ -1018,6 +1024,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs unitPrice = allBinds[0].SkuNamePrice } } + unitPrice = int(float64(unitPrice) * scaleFactor) for _, v := range allBinds { var num int64 inSkuBind := inSkuBinsMap[v.RealSkuID] @@ -1263,16 +1270,18 @@ func UpdateStoresSkusSale(ctx *jxcontext.Context, storeIDs []int, skuBindSkuInfo return hint, err } -func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode string, params map[string]interface{}, userName string) (num int64, err error) { +func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode string, isScale bool, params map[string]interface{}, userName string) (num int64, err error) { if copyMode != CopyStoreSkuModeFresh && copyMode != CopyStoreSkuModeUpdate && copyMode != CopyStoreSkuModeUpdatePrice { return 0, fmt.Errorf("不支持的拷贝模式:%s", copyMode) } db := dao.GetDB() - if err = checkStoreExisting(db, fromStoreID); err != nil { + fromStore, err := checkStoreExisting(db, fromStoreID) + if err != nil { return 0, err } - if err = checkStoreExisting(db, toStoreID); err != nil { + toStore, err := checkStoreExisting(db, toStoreID) + if err != nil { return 0, err } @@ -1398,10 +1407,24 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode isModifyStatus = 0 syncStatus = model.SyncFlagPriceMask } + scaleFactor := float64(1) + if isScale { + fromPayPercentage := fromStore.PayPercentage + if fromPayPercentage <= 0 { + fromPayPercentage = 100 + } + toPayPercentage := toStore.PayPercentage + if toPayPercentage <= 0 { + toPayPercentage = 100 + } + scaleFactor = float64(fromPayPercentage) / float64(toPayPercentage) + } // 处理toStore中与fromStore中都存在的 sql := ` UPDATE store_sku_bind t1 + JOIN store t11 ON t11.id = t1.store_id LEFT JOIN store_sku_bind t0 ON t0.store_id = ? AND t0.sku_id = t1.sku_id AND t0.deleted_at = ? + JOIN store t01 ON t01.id = t0.store_id JOIN sku t2 ON t1.sku_id = t2.id/* AND t2.deleted_at = ?*/ JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/ LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ? @@ -1409,9 +1432,9 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode t1.last_operator = ?, t1.updated_at = ?, t1.sub_store_id = 0, - t1.price = IF(t0.price * ? / 100 > 0, t0.price * ? / 100, 1), - t1.jx_price = IF(t0.jx_price * ? / 100 > 0, t0.jx_price * ? / 100, 1), - t1.unit_price = IF(t0.unit_price * ? / 100 > 0, t0.unit_price * ? / 100, 1), + t1.price = IF(t0.price * ? / 100 > 0, t0.price * ? / 100, 1) * ?, + t1.jx_price = IF(t0.jx_price * ? / 100 > 0, t0.jx_price * ? / 100, 1) * ?, + t1.unit_price = IF(t0.unit_price * ? / 100 > 0, t0.unit_price * ? / 100, 1) * ?, t1.status = IF(? = 0, t1.status, t0.status), t1.jd_sync_status = t1.jd_sync_status | ?, t1.mtwm_sync_status = t1.mtwm_sync_status | ?, @@ -1428,10 +1451,13 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode now, pricePercentage, pricePercentage, + scaleFactor, pricePercentage, pricePercentage, + scaleFactor, pricePercentage, pricePercentage, + scaleFactor, isModifyStatus, syncStatus, syncStatus, @@ -1454,7 +1480,9 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode jd_sync_status, ebai_sync_status, mtwm_sync_status) SELECT ?, ?, ?, ?, ?, t1.sku_id, 0, - IF(t1.price * ? / 100 > 0, t1.price * ? / 100, 1), IF(t1.jx_price * ? / 100 > 0, t1.jx_price * ? / 100, 1), IF(t1.unit_price * ? / 100 > 0, t1.unit_price * ? / 100, 1), + IF(t1.price * ? / 100 > 0, t1.price * ? / 100, 1) * ?, + IF(t1.jx_price * ? / 100 > 0, t1.jx_price * ? / 100, 1) * ?, + IF(t1.unit_price * ? / 100 > 0, t1.unit_price * ? / 100, 1) * ?, IF(? = 0, ?, t1.status), ?, ?, ? FROM store_sku_bind t1 JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? @@ -1467,10 +1495,13 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode now, now, userName, utils.DefaultTimeValue, toStoreID, pricePercentage, pricePercentage, + scaleFactor, pricePercentage, pricePercentage, + scaleFactor, pricePercentage, pricePercentage, + scaleFactor, isModifyStatus, model.SkuStatusDontSale, model.SyncFlagNewMask, @@ -1648,7 +1679,7 @@ func AcceptStoreOpRequests(ctx *jxcontext.Context, reqIDs []int) (err error) { } } if err2 == nil { - _, err2 := UpdateStoresSkus(ctx, []int{op.StoreID}, []*StoreSkuBindInfo{skuBindInfo}, false, false) + _, err2 := UpdateStoresSkus(ctx, []int{op.StoreID}, []*StoreSkuBindInfo{skuBindInfo}, false, false, false) isLocalSucess := true if err2 != nil { subErrors[reqID] = err2 @@ -1845,16 +1876,16 @@ func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) { skuBind.MtwmSyncStatus |= status } -func checkStoreExisting(db *dao.DaoDB, storeID int) (err error) { - store := &model.Store{} +func checkStoreExisting(db *dao.DaoDB, storeID int) (store *model.Store, err error) { + store = &model.Store{} store.ID = storeID if err = dao.GetEntity(db, store); err != nil { if err == orm.ErrNoRows { - return fmt.Errorf("门店:%d不存在", storeID) + return nil, fmt.Errorf("门店:%d不存在", storeID) } - return err + return nil, err } - return nil + return store, nil } func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID int, isAsync bool) (hint string, err error) { diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 64d8769ac..f3f8a4562 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -863,7 +863,7 @@ func UpdateJxPriceByWeimob(ctx *jxcontext.Context, storeIDs []int, isAsync, isCo for _, v := range storeSkuBindInfoList { skuBindInfos = append(skuBindInfos, v.(*cms.StoreSkuBindInfo)) } - cms.UpdateStoresSkus(ctx, storeIDs, skuBindInfos, isAsync, isContinueWhenError) + cms.UpdateStoresSkus(ctx, storeIDs, skuBindInfos, false, isAsync, isContinueWhenError) case 2: WriteToExcel3(task, dataStoreSkusSuccess.dataStoreSkusSuccessList, dataFailed.dataFailedList) } diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 0a6857dc7..803d8f8d4 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -206,6 +206,7 @@ func (c *StoreSkuController) SyncStoresSkus() { // @Param token header string true "认证token" // @Param storeIDs formData string true "门店ID列表" // @Param payload formData string true "json数据,StoreSkuBindInfo对象数组" +// @Param isScale formData bool false "是否按门店结算比例缩放" // @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" // @Param isAsync formData bool false "是否异步操作" // @Success 200 {object} controllers.CallResult @@ -218,7 +219,7 @@ func (c *StoreSkuController) UpdateStoresSkus() { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.Payload, &skuBindInfos); err != nil { return retVal, "", err } - retVal, err = cms.UpdateStoresSkus(params.Ctx, storeIDs, skuBindInfos, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.UpdateStoresSkus(params.Ctx, storeIDs, skuBindInfos, params.IsScale, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) } @@ -252,12 +253,13 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { // @Param pricePercentage formData int false "价格调整百分比,缺省为100%" // @Param categoryIDs formData string false "json数据,skuName所属的类别,[1,2,3]" // @Param skuIDs formData string false "json数据,skuID列表,[1,2,3]" +// @Param isScale formData bool false "是否按门店结算比例缩放" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /CopyStoreSkus [post] func (c *StoreSkuController) CopyStoreSkus() { c.callCopyStoreSkus(func(params *tStoreSkuCopyStoreSkusParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.CopyStoreSkus(params.Ctx, params.FromStoreID, params.ToStoreID, params.CopyMode, params.MapData, params.Ctx.GetUserName()) + retVal, err = cms.CopyStoreSkus(params.Ctx, params.FromStoreID, params.ToStoreID, params.CopyMode, params.IsScale, params.MapData, params.Ctx.GetUserName()) return retVal, "", err }) } From 5cecffc5012fddd1f26e9e17a4fb56ce101dff86 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 4 Dec 2019 18:17:44 +0800 Subject: [PATCH 02/16] +ConstrainPayPercentage --- business/jxstore/cms/store_sku.go | 315 +++++++++++++++--------------- business/jxutils/jxutils_cms.go | 7 + controllers/cms_store_sku.go | 9 +- 3 files changed, 177 insertions(+), 154 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 7f36dda0e..477d82c58 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -15,6 +15,7 @@ import ( "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" @@ -959,9 +960,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } scaleFactor := float64(1) if isScale { - if storeDetail.PayPercentage > 0 { - scaleFactor = float64(storeDetail.PayPercentage) / 100 - } + scaleFactor = float64(jxutils.ConstrainPayPercentage(storeDetail.PayPercentage) / 100) } for _, skuBindInfo := range skuBindInfos { // 关注且没有给价时,需要尝试从store_sku_bind中得到已有的单价 @@ -1270,7 +1269,7 @@ func UpdateStoresSkusSale(ctx *jxcontext.Context, storeIDs []int, skuBindSkuInfo return hint, err } -func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode string, isScale bool, params map[string]interface{}, userName string) (num int64, err error) { +func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, copyMode string, isScale bool, params map[string]interface{}, userName string) (num int64, err error) { if copyMode != CopyStoreSkuModeFresh && copyMode != CopyStoreSkuModeUpdate && copyMode != CopyStoreSkuModeUpdatePrice { return 0, fmt.Errorf("不支持的拷贝模式:%s", copyMode) } @@ -1280,11 +1279,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode if err != nil { return 0, err } - toStore, err := checkStoreExisting(db, toStoreID) - if err != nil { - return 0, err - } - sqlCatAndSku := "" sqlCatAndSkuParams := make([]interface{}, 0) if params["categoryIDs"] != nil { @@ -1311,10 +1305,16 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode if params["pricePercentage"] != nil { pricePercentage = params["pricePercentage"].(int) } - - now := time.Now() - if fromStoreID == toStoreID { - sql := ` + errList := errlist.New() + for _, toStoreID := range toStoreIDs { + toStore, err := checkStoreExisting(db, toStoreID) + if err != nil { + errList.AddErr(err) + break + } + now := time.Now() + if fromStoreID == toStoreID { + sql := ` UPDATE store_sku_bind t1 JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? JOIN sku_name t3 ON t2.name_id = t3.id AND t2.deleted_at = ? @@ -1329,36 +1329,41 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode t1.ebai_sync_status = t1.ebai_sync_status | ? WHERE t1.store_id = ? AND t1.deleted_at = ? ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - userName, - now, - pricePercentage, - pricePercentage, - pricePercentage, - model.SyncFlagPriceMask, - model.SyncFlagPriceMask, - model.SyncFlagPriceMask, - toStoreID, - utils.DefaultTimeValue, + sqlParams := []interface{}{ + utils.DefaultTimeValue, + utils.DefaultTimeValue, + utils.DefaultTimeValue, + userName, + now, + pricePercentage, + pricePercentage, + pricePercentage, + model.SyncFlagPriceMask, + model.SyncFlagPriceMask, + model.SyncFlagPriceMask, + toStoreID, + utils.DefaultTimeValue, + } + sql += sqlCatAndSku + sqlParams = append(sqlParams, sqlCatAndSkuParams) + num2, err2 := dao.ExecuteSQL(db, sql, sqlParams) + if err2 != nil { + errList.AddErr(err2) + } else { + num += num2 + } + break } - sql += sqlCatAndSku - sqlParams = append(sqlParams, sqlCatAndSkuParams) - num, err = dao.ExecuteSQL(db, sql, sqlParams) - return num, err - } - dao.Begin(db) - defer func() { - dao.Rollback(db) - if r := recover(); r != nil { - panic(r) - } - }() - if copyMode == CopyStoreSkuModeFresh { - // 将toStore中存在,但fromStore中不存在的置删除标志 - sqlDelete := ` + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if copyMode == CopyStoreSkuModeFresh { + // 将toStore中存在,但fromStore中不存在的置删除标志 + sqlDelete := ` UPDATE store_sku_bind t1 LEFT JOIN store_sku_bind t0 ON t0.store_id = ? AND t0.sku_id = t1.sku_id AND t0.deleted_at = ? JOIN sku t2 ON t1.sku_id = t2.id/* AND t2.deleted_at = ?*/ @@ -1374,53 +1379,51 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode t1.ebai_sync_status = IF((t1.ebai_sync_status & ?) <> 0, 0, ?) WHERE t1.store_id = ? AND t1.deleted_at = ? AND t0.id IS NULL ` - sqlDeleteParams := []interface{}{ - fromStoreID, - utils.DefaultTimeValue, - // utils.DefaultTimeValue, - // utils.DefaultTimeValue, - utils.DefaultTimeValue, - now, - now, - userName, - model.StoreSkuBindStatusDeleted, - model.SyncFlagNewMask, - model.SyncFlagDeletedMask, - model.SyncFlagNewMask, - model.SyncFlagDeletedMask, - model.SyncFlagNewMask, - model.SyncFlagDeletedMask, - toStoreID, - utils.DefaultTimeValue, + sqlDeleteParams := []interface{}{ + fromStoreID, + utils.DefaultTimeValue, + // utils.DefaultTimeValue, + // utils.DefaultTimeValue, + utils.DefaultTimeValue, + now, + now, + userName, + model.StoreSkuBindStatusDeleted, + model.SyncFlagNewMask, + model.SyncFlagDeletedMask, + model.SyncFlagNewMask, + model.SyncFlagDeletedMask, + model.SyncFlagNewMask, + model.SyncFlagDeletedMask, + toStoreID, + utils.DefaultTimeValue, + } + sqlDelete += sqlCatAndSku + sqlDeleteParams = append(sqlDeleteParams, sqlCatAndSkuParams) + // globals.SugarLogger.Debug(sqlDelete) + num2, err2 := dao.ExecuteSQL(db, sqlDelete, sqlDeleteParams) + if err = err2; err != nil { + errList.AddErr(err) + dao.Rollback(db) + break + } + num += num2 + globals.SugarLogger.Debugf("CopyStoreSkus fromStoreID:%d, toStoreID:%d, trackInfo:%s num1:%d", fromStoreID, toStoreID, ctx.GetTrackInfo(), num2) } - sqlDelete += sqlCatAndSku - sqlDeleteParams = append(sqlDeleteParams, sqlCatAndSkuParams) - // globals.SugarLogger.Debug(sqlDelete) - if num, err = dao.ExecuteSQL(db, sqlDelete, sqlDeleteParams); err != nil { - return 0, err + isModifyStatus := 1 + syncStatus := model.SyncFlagStoreSkuOnlyMask + if copyMode == CopyStoreSkuModeUpdatePrice { + isModifyStatus = 0 + syncStatus = model.SyncFlagPriceMask } - globals.SugarLogger.Debugf("CopyStoreSkus trackInfo:%s num1:%d", ctx.GetTrackInfo(), num) - } - isModifyStatus := 1 - syncStatus := model.SyncFlagStoreSkuOnlyMask - if copyMode == CopyStoreSkuModeUpdatePrice { - isModifyStatus = 0 - syncStatus = model.SyncFlagPriceMask - } - scaleFactor := float64(1) - if isScale { - fromPayPercentage := fromStore.PayPercentage - if fromPayPercentage <= 0 { - fromPayPercentage = 100 + scaleFactor := float64(1) + if isScale { + fromPayPercentage := jxutils.ConstrainPayPercentage(fromStore.PayPercentage) + toPayPercentage := jxutils.ConstrainPayPercentage(toStore.PayPercentage) + scaleFactor = float64(fromPayPercentage) / float64(toPayPercentage) } - toPayPercentage := toStore.PayPercentage - if toPayPercentage <= 0 { - toPayPercentage = 100 - } - scaleFactor = float64(fromPayPercentage) / float64(toPayPercentage) - } - // 处理toStore中与fromStore中都存在的 - sql := ` + // 处理toStore中与fromStore中都存在的 + sql := ` UPDATE store_sku_bind t1 JOIN store t11 ON t11.id = t1.store_id LEFT JOIN store_sku_bind t0 ON t0.store_id = ? AND t0.sku_id = t1.sku_id AND t0.deleted_at = ? @@ -1441,41 +1444,43 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode t1.ebai_sync_status = t1.ebai_sync_status | ? WHERE t1.store_id = ? AND t1.deleted_at = ? AND t0.id IS NOT NULL ` - sqlParams := []interface{}{ - fromStoreID, - utils.DefaultTimeValue, - // utils.DefaultTimeValue, - // utils.DefaultTimeValue, - utils.DefaultTimeValue, - userName, - now, - pricePercentage, - pricePercentage, - scaleFactor, - pricePercentage, - pricePercentage, - scaleFactor, - pricePercentage, - pricePercentage, - scaleFactor, - isModifyStatus, - syncStatus, - syncStatus, - syncStatus, - toStoreID, - utils.DefaultTimeValue, - } - sql += sqlCatAndSku - sqlParams = append(sqlParams, sqlCatAndSkuParams) - // globals.SugarLogger.Debug(sql) - num, err = dao.ExecuteSQL(db, sql, sqlParams) - globals.SugarLogger.Debugf("CopyStoreSkus trackInfo:%s num2:%d", ctx.GetTrackInfo(), num) - if err != nil { - return 0, err - } - - // 添加toStore中不存在,但fromStore存在的 - sql = ` + sqlParams := []interface{}{ + fromStoreID, + utils.DefaultTimeValue, + // utils.DefaultTimeValue, + // utils.DefaultTimeValue, + utils.DefaultTimeValue, + userName, + now, + pricePercentage, + pricePercentage, + scaleFactor, + pricePercentage, + pricePercentage, + scaleFactor, + pricePercentage, + pricePercentage, + scaleFactor, + isModifyStatus, + syncStatus, + syncStatus, + syncStatus, + toStoreID, + utils.DefaultTimeValue, + } + sql += sqlCatAndSku + sqlParams = append(sqlParams, sqlCatAndSkuParams) + // globals.SugarLogger.Debug(sql) + num2, err2 := dao.ExecuteSQL(db, sql, sqlParams) + globals.SugarLogger.Debugf("CopyStoreSkus fromStoreID:%d, toStoreID:%d, trackInfo:%s num2:%d", fromStoreID, toStoreID, ctx.GetTrackInfo(), num2) + if err = err2; err != nil { + errList.AddErr(err) + dao.Rollback(db) + break + } + num += num2 + // 添加toStore中不存在,但fromStore存在的 + sql = ` INSERT INTO store_sku_bind(created_at, updated_at, last_operator, deleted_at, store_id, sku_id, sub_store_id, price, jx_price, unit_price, status, jd_sync_status, ebai_sync_status, mtwm_sync_status) SELECT ?, ?, ?, ?, ?, @@ -1491,39 +1496,43 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode LEFT JOIN store_sku_bind t0 ON t1.sku_id = t0.sku_id AND t0.store_id = ? AND t0.deleted_at = ? WHERE t1.store_id = ? AND t1.deleted_at = ? ` - sqlParams = []interface{}{ - now, now, userName, utils.DefaultTimeValue, toStoreID, - pricePercentage, - pricePercentage, - scaleFactor, - pricePercentage, - pricePercentage, - scaleFactor, - pricePercentage, - pricePercentage, - scaleFactor, - isModifyStatus, - model.SkuStatusDontSale, - model.SyncFlagNewMask, - model.SyncFlagNewMask, - model.SyncFlagNewMask, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - toStoreID, - utils.DefaultTimeValue, - fromStoreID, - utils.DefaultTimeValue, + sqlParams = []interface{}{ + now, now, userName, utils.DefaultTimeValue, toStoreID, + pricePercentage, + pricePercentage, + scaleFactor, + pricePercentage, + pricePercentage, + scaleFactor, + pricePercentage, + pricePercentage, + scaleFactor, + isModifyStatus, + model.SkuStatusDontSale, + model.SyncFlagNewMask, + model.SyncFlagNewMask, + model.SyncFlagNewMask, + utils.DefaultTimeValue, + utils.DefaultTimeValue, + utils.DefaultTimeValue, + toStoreID, + utils.DefaultTimeValue, + fromStoreID, + utils.DefaultTimeValue, + } + sql += sqlCatAndSku + " AND t0.id IS NULL" + sqlParams = append(sqlParams, sqlCatAndSkuParams) + num2, err = dao.ExecuteSQL(db, sql, sqlParams) + if err != nil { + errList.AddErr(err) + dao.Rollback(db) + break + } + num += num2 + globals.SugarLogger.Debugf("CopyStoreSkus fromStoreID:%d, toStoreID:%d, trackInfo:%s num3:%d", fromStoreID, toStoreID, ctx.GetTrackInfo(), num2) + dao.Commit(db) } - sql += sqlCatAndSku + " AND t0.id IS NULL" - sqlParams = append(sqlParams, sqlCatAndSkuParams) - num, err = dao.ExecuteSQL(db, sql, sqlParams) - if err != nil { - return 0, err - } - globals.SugarLogger.Debugf("CopyStoreSkus trackInfo:%s num3:%d", ctx.GetTrackInfo(), num) - dao.Commit(db) - return num, err + return num, errList.GetErrListAsOne() } func shouldPendingStorePriceChange(ctx *jxcontext.Context, storeID int, skuBindInfo *StoreSkuBindInfo) (shouldPending bool, err error) { diff --git a/business/jxutils/jxutils_cms.go b/business/jxutils/jxutils_cms.go index 11449a847..e7d20815a 100644 --- a/business/jxutils/jxutils_cms.go +++ b/business/jxutils/jxutils_cms.go @@ -326,6 +326,13 @@ func CaculatePriceByPricePack(l model.PricePercentagePack, defPricePercentage, p return CaculateSkuVendorPrice(price, pricePercentage, priceAdd) } +func ConstrainPayPercentage(payPerCentage int) int { + if payPerCentage <= 50 { + payPerCentage = 70 + } + return payPerCentage +} + func IsSkuSpecial(specQuality float32, specUnit string) bool { return int(specQuality) == model.SpecialSpecQuality && (specUnit == model.SpecialSpecUnit || specUnit == model.SpecialSpecUnit2) } diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 803d8f8d4..740cec50a 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -249,6 +249,7 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { // @Param token header string true "认证token" // @Param fromStoreID formData int true "源门店ID" // @Param toStoreID formData int true "目标门店ID" +// @Param toStoreIDs formData string false "目标门店ID列表" // @Param copyMode formData string true "拷贝模式,fresh:目标门店数据全部清除后拷贝,update:确保指定的源数据全部拷贝,已有的忽略" // @Param pricePercentage formData int false "价格调整百分比,缺省为100%" // @Param categoryIDs formData string false "json数据,skuName所属的类别,[1,2,3]" @@ -259,7 +260,13 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { // @router /CopyStoreSkus [post] func (c *StoreSkuController) CopyStoreSkus() { c.callCopyStoreSkus(func(params *tStoreSkuCopyStoreSkusParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.CopyStoreSkus(params.Ctx, params.FromStoreID, params.ToStoreID, params.CopyMode, params.IsScale, params.MapData, params.Ctx.GetUserName()) + var toStoreIDs []int + if err = jxutils.Strings2Objs(params.ToStoreIDs, &toStoreIDs); err == nil { + if params.ToStoreID > 0 { + toStoreIDs = append(toStoreIDs, params.ToStoreID) + } + retVal, err = cms.CopyStoreSkus(params.Ctx, params.FromStoreID, toStoreIDs, params.CopyMode, params.IsScale, params.MapData, params.Ctx.GetUserName()) + } return retVal, "", err }) } From d25ce87ebfacb9ebef39af603474704e0264fdcb Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 4 Dec 2019 18:30:34 +0800 Subject: [PATCH 03/16] up --- controllers/cms_store_sku.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 740cec50a..fe0b4d832 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -248,7 +248,7 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { // @Description 拷贝门店SKU信息(此函数当前只是本地数据操作,要同步到远端需要调用SyncStoresSkus) // @Param token header string true "认证token" // @Param fromStoreID formData int true "源门店ID" -// @Param toStoreID formData int true "目标门店ID" +// @Param toStoreID formData int false "目标门店ID" // @Param toStoreIDs formData string false "目标门店ID列表" // @Param copyMode formData string true "拷贝模式,fresh:目标门店数据全部清除后拷贝,update:确保指定的源数据全部拷贝,已有的忽略" // @Param pricePercentage formData int false "价格调整百分比,缺省为100%" From c2787d64b7cb3626ceb63f405a1469245e6c86fc Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 4 Dec 2019 18:36:56 +0800 Subject: [PATCH 04/16] fk --- business/jxstore/cms/store_sku.go | 1 + 1 file changed, 1 insertion(+) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 477d82c58..7ea47f5ee 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -961,6 +961,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs scaleFactor := float64(1) if isScale { scaleFactor = float64(jxutils.ConstrainPayPercentage(storeDetail.PayPercentage) / 100) + globals.SugarLogger.Debugf("updateStoresSkusWithoutSync scaleFactor:%f", scaleFactor) } for _, skuBindInfo := range skuBindInfos { // 关注且没有给价时,需要尝试从store_sku_bind中得到已有的单价 From 358e6723f3e2fb4f4f5a0fb38fe432e3d16381ab Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 4 Dec 2019 18:38:19 +0800 Subject: [PATCH 05/16] fk --- business/jxstore/cms/store_sku.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 7ea47f5ee..f6bde557b 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -960,8 +960,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } scaleFactor := float64(1) if isScale { - scaleFactor = float64(jxutils.ConstrainPayPercentage(storeDetail.PayPercentage) / 100) - globals.SugarLogger.Debugf("updateStoresSkusWithoutSync scaleFactor:%f", scaleFactor) + scaleFactor = float64(jxutils.ConstrainPayPercentage(storeDetail.PayPercentage)) / 100 } for _, skuBindInfo := range skuBindInfos { // 关注且没有给价时,需要尝试从store_sku_bind中得到已有的单价 From 527659bf55a15777d3b1ae161e353515290e4bc7 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 08:35:31 +0800 Subject: [PATCH 06/16] =?UTF-8?q?dao.GetOrders=E7=9A=84=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index afc941ad4..e1436b8a6 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -901,7 +901,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat ORDER BY IF(t1.status < ?, IF(t1.vendor_id = ?, 0, 1), 0), t1.order_created_at DESC` sqlParams = append(sqlParams, model.OrderStatusEndBegin, model.VendorIDJX) } else { - if isIncludeSku && userID == "" { + if isIncludeSku && userID == "" && len(ids) == 0 { sql += ` ORDER BY t1.id` } else { From e742d88efd9bef9de792894a9746fbe898be9b3b Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 09:04:23 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E5=8A=A0=E5=85=A5ThingMap=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E5=95=86=E5=93=81=E5=BA=93=E7=9A=84=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 28 +++++++++--------- business/jxstore/cms/sync.go | 56 ++++++++++++++++++++++++++++++++---- business/model/sync_map.go | 4 +-- globals/beegodb/beegodb.go | 2 +- 4 files changed, 67 insertions(+), 23 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index f4a4b0e8a..da7a1893a 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -109,7 +109,7 @@ func AddCategory(ctx *jxcontext.Context, cat *model.SkuCategory, userName string dao.Rollback(db) return nil, err } - if err = OnCreateThing(db, int64(cat.ID), model.ThingTypeCategory); err != nil { + if err = OnCreateThing(ctx, db, int64(cat.ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return nil, err } @@ -147,7 +147,7 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i dao.Rollback(db) return 0, err } - if err = OnUpdateThing(db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx,db, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -241,7 +241,7 @@ func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, dao.Rollback(db) return err } - if err = OnUpdateThing(db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx,db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return err } @@ -293,7 +293,7 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu dao.Rollback(db) return 0, err } - if err = OnDeleteThing(db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnDeleteThing(ctx,db, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -663,7 +663,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } - if err = OnCreateThing(db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { + if err = OnCreateThing(ctx,db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -779,7 +779,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf dao.Rollback(db) return 0, err } - if err = OnUpdateThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -816,7 +816,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf return 0, err } - if err = OnUpdateThing(db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx,db, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -887,14 +887,14 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int return 0, err } - if err = OnDeleteThing(db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx,db, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } } } - if err = OnDeleteThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnDeleteThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -943,7 +943,7 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) dao.Rollback(db) return nil, err } - if err = OnCreateThing(db, int64(sku.ID), model.ThingTypeSku); err != nil { + if err = OnCreateThing(ctx,db, int64(sku.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return nil, err } @@ -1004,7 +1004,7 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } return 0, err } - if err = OnUpdateThing(db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx,db, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1069,7 +1069,7 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e dao.Rollback(db) return 0, err } - if err = OnDeleteThing(db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx,db, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1149,7 +1149,7 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str dao.Rollback(db) return nil, err } - if err = OnUpdateThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -1179,7 +1179,7 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName } return 0, err } - if err = OnUpdateThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 9999de846..5ecadfab7 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -716,14 +716,58 @@ func GetTimeMixByInt(begin1, end1, begin2, end2 int16) (beginAt, endAt int16) { return beginAt, endAt } -func OnCreateThing(db *dao.DaoDB, thingID int64, thingType int8) (err error) { - return err +func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { + for _, v := range getMultiStoreVendorInfoList() { + thingMap := &model.ThingMap{ + ThingID: thingID, + ThingType: thingType, + VendorID: v.VendorID, + VendorOrgCode: v.OrgCode, + SyncStatus: model.SyncFlagNewMask, + } + dao.WrapAddIDCULDEntity(thingMap, ctx.GetUserName()) + err = dao.CreateEntity(db, thingMap) + } + return nil } -func OnUpdateThing(db *dao.DaoDB, thingID int64, thingType int8) (err error) { - return err +func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { + for _, v := range getMultiStoreVendorInfoList() { + thingMap := &model.ThingMap{ + ThingID: thingID, + ThingType: thingType, + VendorID: v.VendorID, + VendorOrgCode: v.OrgCode, + } + thingMap.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err == nil { + thingMap.SyncStatus |= model.SyncFlagModifiedMask + thingMap.LastOperator = ctx.GetUserName() + _, err = dao.UpdateEntity(db, thingMap) + } + } + return nil } -func OnDeleteThing(db *dao.DaoDB, thingID int64, thingType int8) (err error) { - return err +func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { + for _, v := range getMultiStoreVendorInfoList() { + thingMap := &model.ThingMap{ + ThingID: thingID, + ThingType: thingType, + VendorID: v.VendorID, + VendorOrgCode: v.OrgCode, + } + thingMap.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err == nil { + if model.IsSyncStatusNew(thingMap.SyncStatus) { + thingMap.SyncStatus = 0 + } else { + thingMap.SyncStatus |= model.SyncFlagDeletedMask + } + _, err = dao.DeleteEntityLogically(db, thingMap, map[string]interface{}{ + model.FieldSyncStatus: thingMap.SyncStatus, + }, ctx.GetUserName(), nil) + } + } + return nil } diff --git a/business/model/sync_map.go b/business/model/sync_map.go index 2577356df..05c10cfc5 100644 --- a/business/model/sync_map.go +++ b/business/model/sync_map.go @@ -14,13 +14,13 @@ type ThingMap struct { VendorID int `orm:"column(vendor_id)" json:"vendorID"` VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 - VendorThingID string `orm:"size(32);column(vendor_thing_id)" json:"vendorThingID"` + VendorThingID string `orm:"size(32);column(vendor_thing_id);index" json:"vendorThingID"` SyncStatus int8 `orm:"default(2)"` } func (*ThingMap) TableUnique() [][]string { return [][]string{ []string{"ThingID", "ThingType", "VendorID", "VendorOrgCode", "DeletedAt"}, - []string{"VendorThingID", "ThingType", "VendorID", "VendorOrgCode", "DeletedAt"}, + // []string{"VendorThingID", "ThingType", "VendorID", "VendorOrgCode", "DeletedAt"}, } } diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 28b108a3b..4a10b5e41 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -32,7 +32,7 @@ func Init() { orm.RegisterModel(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}, &model.StoreCourierMap{}) orm.RegisterModel(&model.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) orm.RegisterModel(&model.SkuCategory{}) - // orm.RegisterModel(&model.ThingMap{}) + orm.RegisterModel(&model.ThingMap{}) orm.RegisterModel(&model.AuthBind{}, &model.User{}) From db01d62722340944e563b3f15ad230a313b2a074 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 09:20:42 +0800 Subject: [PATCH 08/16] fk --- business/jxstore/cms/store_sku.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index f6bde557b..d412e5570 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -960,7 +960,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } scaleFactor := float64(1) if isScale { - scaleFactor = float64(jxutils.ConstrainPayPercentage(storeDetail.PayPercentage)) / 100 + scaleFactor = 100 / float64(jxutils.ConstrainPayPercentage(storeDetail.PayPercentage)) } for _, skuBindInfo := range skuBindInfos { // 关注且没有给价时,需要尝试从store_sku_bind中得到已有的单价 From ae92b11a764f427838a92f8cb222482240d7f06a Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 09:26:07 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81=E5=90=8C=E6=AD=A5=E7=9A=84BUG?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index d30e74910..fb817a1a3 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -293,11 +293,13 @@ func AddActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actSto } if act.Type != model.ActSkuFake { for _, act := range actMap { - if _, err = dao.UpdateEntityLogically(db, partner.Act2ActMap(act), - map[string]interface{}{ - model.FieldSyncStatus: act.SyncStatus | model.SyncFlagModifiedMask, - }, ctx.GetUserName(), nil); err != nil { - return err + if act.VendorID != model.VendorIDJX { + if _, err = dao.UpdateEntityLogically(db, partner.Act2ActMap(act), + map[string]interface{}{ + model.FieldSyncStatus: act.SyncStatus | model.SyncFlagModifiedMask, + }, ctx.GetUserName(), nil); err != nil { + return err + } } } } @@ -710,7 +712,7 @@ func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, act syncStatus = model.SyncFlagDeletedMask } syncStatus |= act.SyncStatus - if act.Type != model.ActSkuFake { + if act.Type != model.ActSkuFake && vendorID != model.VendorIDJX { if _, err = dao.UpdateEntityLogically(db, partner.Act2ActMap(act), map[string]interface{}{ model.FieldSyncStatus: syncStatus, From fa983688142b447a88e5d6384d5b50d8402108df Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 10:08:16 +0800 Subject: [PATCH 10/16] =?UTF-8?q?UpdateSku=E4=B8=AD=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index da7a1893a..4ed18abd6 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -147,7 +147,7 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i dao.Rollback(db) return 0, err } - if err = OnUpdateThing(ctx,db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx, db, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -241,7 +241,7 @@ func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, dao.Rollback(db) return err } - if err = OnUpdateThing(ctx,db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx, db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return err } @@ -293,7 +293,7 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu dao.Rollback(db) return 0, err } - if err = OnDeleteThing(ctx,db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnDeleteThing(ctx, db, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -663,7 +663,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx,db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { + if err = OnCreateThing(ctx, db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -779,7 +779,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf dao.Rollback(db) return 0, err } - if err = OnUpdateThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -816,7 +816,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf return 0, err } - if err = OnUpdateThing(ctx,db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx, db, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -887,14 +887,14 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int return 0, err } - if err = OnDeleteThing(ctx,db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx, db, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } } } - if err = OnDeleteThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnDeleteThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -943,7 +943,7 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx,db, int64(sku.ID), model.ThingTypeSku); err != nil { + if err = OnCreateThing(ctx, db, int64(sku.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return nil, err } @@ -991,20 +991,20 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } return 0, err } - if num, err = dao.ExecuteSQL(db, ` + if _, err = dao.ExecuteSQL(db, ` UPDATE sku_name t1 JOIN sku t2 ON t1.id = t2.name_id SET t1.spec_quality = t2.spec_quality, t1.spec_unit = t2.spec_unit WHERE t1.deleted_at = ? AND t2.id = ? AND t1.unit <> ? - `, utils.DefaultTimeValue, skuID, model.SpecialUnit); err != nil || num == 0 { + `, utils.DefaultTimeValue, skuID, model.SpecialUnit); err != nil { dao.Rollback(db) if err == nil { err = ErrEntityNotExist } return 0, err } - if err = OnUpdateThing(ctx,db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx, db, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1069,7 +1069,7 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e dao.Rollback(db) return 0, err } - if err = OnDeleteThing(ctx,db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx, db, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1149,7 +1149,7 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str dao.Rollback(db) return nil, err } - if err = OnUpdateThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -1179,7 +1179,7 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName } return 0, err } - if err = OnUpdateThing(ctx,db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } From 33f38552d4fbff1132fbe9003eb760ffa699649a Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 11:45:32 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=A1=A8=EF=BC=9AOrder?= =?UTF-8?q?PayRefund?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- globals/beegodb/beegodb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 4a10b5e41..d7a7a8f67 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -61,7 +61,7 @@ func Init() { orm.RegisterModel(&model.UserDeliveryAddress{}) orm.RegisterModel(&model.UserCartItem{}) - orm.RegisterModel(&model.OrderPay{}) + orm.RegisterModel(&model.OrderPay{}, &model.OrderPayRefund{}) // create table orm.RunSyncdb("default", false, true) } From 7c7457db40bbf37311217457770c37b6709dd5e4 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 12:14:31 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=80=80=E6=AC=BEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jx/localjx/order.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index d774d4cca..0b11abae3 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -514,9 +514,11 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) if orderPay.Status == model.PayStatusYes { refundID := utils.Int64ToStr(GenRefundID(order)) orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) - if err = err2; err == nil { + if err2 == nil { dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPay)) + } else { + errList.AddErr(err2) } } else { orderPay.Status = model.PayStatusCanceled @@ -524,7 +526,9 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) errList.AddErr(err2) } } - errList.AddErr(changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason)) + if errList.GetErrListAsOne() == nil { + errList.AddErr(changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason)) + } err = errList.GetErrListAsOne() } } else { From e09dc5a4dae4adb357777af52815375ecabc0aa2 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 12:21:04 +0800 Subject: [PATCH 13/16] fk --- business/partner/purchase/jx/localjx/order.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 0b11abae3..62f03ed36 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -256,8 +256,8 @@ func GenOrderNo(ctx *jxcontext.Context) (orderNo int64) { func GenRefundID(order *model.GoodsOrder) (refundID int64) { const suffix = 100000 - orderID := utils.Str2Int64(order.VendorOrderID) * suffix - orderID += int64(time.Now().Sub(order.OrderFinishedAt) / time.Minute) + refundID = utils.Str2Int64(order.VendorOrderID) * suffix + refundID += int64(time.Now().Sub(order.OrderFinishedAt) / time.Minute) return refundID } From 64ffeb12797ed924e7e20bc28babfc58c7587932 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 12:30:45 +0800 Subject: [PATCH 14/16] fk --- business/partner/purchase/jx/localjx/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 62f03ed36..266e9c0da 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -516,7 +516,7 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) if err2 == nil { dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) - errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPay)) + errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPayRefund)) } else { errList.AddErr(err2) } From efd358b0d4efc74be95ceba214f100580544da93 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 13:32:49 +0800 Subject: [PATCH 15/16] up --- business/model/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/order.go b/business/model/order.go index 36ed06e1d..c0802eeb8 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -321,7 +321,7 @@ type OrderPayRefund struct { RefundID string `orm:"column(refund_id);unique;size(48)" json:"refundID"` VendorRefundID string `orm:"column(vendor_refund_id);unique;size(48)" json:"vendorRefundID"` - AfsOrderID string `orm:"column(afs_order_id);index;size(48)" json:"afsOrderID"` + AfsOrderID string `orm:"column(afs_order_id);index;size(48)" json:"afsOrderID"` // AfsOrderID与RefundID的区别? VendorOrderID string `orm:"column(vendor_order_id);index;size(48)" json:"vendorOrderID"` VendorID int `orm:"column(vendor_id)" json:"vendorID"` TransactionID string `orm:"column(transaction_id);index;size(48)" json:"transactionID"` From 1c05e4c1da6841697e7e789c46de22b85940237c Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 5 Dec 2019 14:00:15 +0800 Subject: [PATCH 16/16] =?UTF-8?q?dao.GetUsers=20keyword=E6=94=AF=E6=8C=81i?= =?UTF-8?q?d=E6=9F=A5=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_user2.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/business/model/dao/dao_user2.go b/business/model/dao/dao_user2.go index 51572c40d..3a4ee6b66 100644 --- a/business/model/dao/dao_user2.go +++ b/business/model/dao/dao_user2.go @@ -67,8 +67,8 @@ func GetUsers(db *DaoDB, userType int, keyword string, userIDs []string, userID2 } if keyword != "" { keywordLike := "%" + keyword + "%" - sql += " AND (t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)" - sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike) + sql += " AND (t1.user_id LIKE ? OR t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)" + sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) } sql += " LIMIT ? OFFSET ?" sqlParams = append(sqlParams, pageSize, offset)