From 8f7e1fd1bb97316a631b36843b480c84f4d9421a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 9 Jan 2020 08:31:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 30 ++++++++++++++++++++++++++++-- business/model/event.go | 4 ++-- globals/refutil/refutil.go | 11 +++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 8bf330d35..67a813006 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -13,6 +13,10 @@ import ( "time" "unicode" + "git.rosy.net.cn/jx-callback/globals/refutil" + + "git.rosy.net.cn/jx-callback/business/jxstore/event" + "git.rosy.net.cn/baseapi" "git.rosy.net.cn/jx-callback/business/jxutils/excel" @@ -1035,6 +1039,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs if tmpStatus := getSkuSaleStatus(inSkuBind, skuBindInfo); tmpStatus != model.StoreSkuBindStatusNA { skuBind.Status = tmpStatus } + err = AddEventDetail(model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "") setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask) dao.WrapAddIDCULDEntity(skuBind, userName) globals.SugarLogger.Debug(utils.Format4Output(skuBind, false)) @@ -1059,8 +1064,8 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } } else { skuBind = &v.StoreSkuBind - if skuBindInfo.IsFocus == -1 && isCanChangePrice { + err = AddEventDetail(model.OperateDelete, skuBind.SkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "") if num, err = dao.DeleteEntityLogically(db, skuBind, map[string]interface{}{ model.FieldStatus: model.StoreSkuBindStatusDeleted, model.FieldJdSyncStatus: model.SyncFlagDeletedMask, @@ -1072,7 +1077,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } } else { // 用了SELECT FOR UPDATE后,只更新修改字段是没有必要的,暂时保留 - updateFieldMap := make(map[string]int) + updateFieldMap := make(map[string]interface{}) if skuBindInfo.IsFocus == 1 { // 关注之后再关注不操作 // skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售? // skuBind.DeletedAt = utils.DefaultTimeValue @@ -1117,6 +1122,13 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs // skuBind.ElmID = inSkuBind.ElmID // updateFieldMap["ElmID"] = 1 // } + if updateFieldMap != nil { + afterData := utils.MustMarshal(updateFieldMap) + mapresult := refutil.FindMapAndStructMixed(updateFieldMap, skuBind) + beforeData := utils.MustMarshal(mapresult) + fmt + AddEventDetail(model.OperateUpdate, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), string(beforeData), string(afterData)) + } if len(updateFieldMap) > 0 { updateFieldMap[model.FieldJdSyncStatus] = 1 updateFieldMap[model.FieldEbaiSyncStatus] = 1 @@ -1166,6 +1178,20 @@ func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuNameBindInfo *StoreSkuB return model.StoreSkuBindStatusNA } +func AddEventDetail(operateType, thingID, thingType, storeID int, accessUUID, beforeData, afterData string) (err error) { + operateEventDetail := &model.OperateEventDetail{ + OperateType: operateType, + ThingID: thingID, + ThingType: thingType, + StoreID: storeID, + AccessUUID: accessUUID, + BeforeData: beforeData, + AfterData: afterData, + } + err = event.AddOperateEventDetail(operateEventDetail) + return err +} + func formatAutoSaleTime(autoSaleTime time.Time) (outAutoSaleTime time.Time) { if utils.IsTimeZero(autoSaleTime) { outAutoSaleTime = utils.DefaultTimeValue diff --git a/business/model/event.go b/business/model/event.go index 9a5a8cb9f..697dc803a 100644 --- a/business/model/event.go +++ b/business/model/event.go @@ -24,8 +24,8 @@ type OperateEventDetail struct { ThingType int `json:"thingType"` //各字段类型 StoreID int `orm:"column(store_id)" json:"storeID"` AccessUUID string `orm:"column(access_uuid)" json:"accessUUID"` - BeforeData string `orm:"size(32)" json:"beforeData"` - AfterData string `orm:"size(32)" json:"afterData"` + BeforeData string `orm:"size(255)" json:"beforeData"` + AfterData string `orm:"size(255)" json:"afterData"` } func (v *OperateEventDetail) TableIndex() [][]string { diff --git a/globals/refutil/refutil.go b/globals/refutil/refutil.go index 412ca8b55..e6c81127d 100644 --- a/globals/refutil/refutil.go +++ b/globals/refutil/refutil.go @@ -91,6 +91,17 @@ func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (vali return valid, invalid } +func FindMapAndStructMixed(mapData map[string]interface{}, obj interface{}) (valid map[string]interface{}) { + valid = make(map[string]interface{}) + map2 := utils.Struct2FlatMap(obj) + for k, v := range map2 { + if mapData[k] != nil { + valid[k] = v + } + } + return valid +} + func IsValueEqual(value1, value2 interface{}) bool { if value1 == nil || value2 == nil { return value1 == value2 From da3c177e540c8003a03d1191408b628b3d848378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 9 Jan 2020 11:00:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?build=E5=A4=B1=E8=B4=A5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 1 - 1 file changed, 1 deletion(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 01efc70bc..8748e04fc 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1126,7 +1126,6 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs afterData := utils.MustMarshal(updateFieldMap) mapresult := refutil.FindMapAndStructMixed(updateFieldMap, skuBind) beforeData := utils.MustMarshal(mapresult) - fmt AddEventDetail(model.OperateUpdate, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), string(beforeData), string(afterData)) } if len(updateFieldMap) > 0 { From 20fc83000e6995769479f113605773efff0c1e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 9 Jan 2020 14:42:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=94=B9=E8=A7=84=E6=A0=BC->=E6=94=B9?= =?UTF-8?q?=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 30 ++++++++++++++++-------------- business/jxstore/cms/store_sku.go | 4 ++-- business/model/dao/store_sku.go | 12 ++++++++---- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 307832df8..11f6656f5 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1090,21 +1090,23 @@ func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err } } }() - for vendorID := range partner.PurchasePlatformHandlers { - storeSkuList, err := dao.GetStoreSkus2(db, vendorID, 0, []int{skuID}, false) - if err == nil { - for _, v := range storeSkuList { - v.Price = int64(jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)) - storeSku := &model.StoreSkuBind{} - storeSku.ID = v.BindID - if _, err = dao.UpdateEntityLogically(db, storeSku, map[string]interface{}{ - "Price": v.Price, - dao.GetSyncStatusStructField(model.VendorNames[vendorID]): v.SkuSyncStatus | model.SyncFlagPriceMask, - }, ctx.GetUserName(), nil); err != nil { - return err - } - } + list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil) + for _, v := range list { + storeID := v.StoreID + storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX) + if err != nil { + return err } + storeSku := &model.StoreSkuBind{} + storeSku.ID = v.BindID + storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask + storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask + storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask + storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit) + storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price)) + storeSku.LastOperator = ctx.GetUserName() + storeSku.UpdatedAt = time.Now() + dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice") } dao.Commit(db) return err diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 8748e04fc..b29731c77 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3100,8 +3100,8 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync }) } else { skuBindInfo := &StoreSkuBindInfo{ - UnitPrice: vv.UnitPrice, - NameID: vv.ID, + UnitPrice: int(vv.UnitPrice), + NameID: vv.NameID, StoreID: v.ID, Skus: []*StoreSkuBindSkuInfo{}, } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 6e2fb863e..d010b5b2d 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -99,6 +99,9 @@ type StoreSkuSyncInfo struct { SkuName string StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围 StatusSaleEnd int16 `json:"statusSaleEnd"` + JdSyncStatus int8 `orm:"default(2)"` + MtwmSyncStatus int8 `orm:"default(2)"` + EbaiSyncStatus int8 `orm:"default(2)"` } type MissingStoreSkuInfo struct { @@ -1517,9 +1520,10 @@ func GetPriceReferPrice(db *DaoDB, cityCode int, skuID int, snapDate time.Time) return priceRefer, err } -func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSkuNameExt []*StoreSkuNameExt, err error) { +func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSkuSyncInfo []*StoreSkuSyncInfo, err error) { sql := ` - SELECT a.*,c.id + SELECT a.id bind_id, a.store_id, a.jd_sync_status, a.mtwm_sync_status, a.ebai_sync_status, a.unit_price, + c.id name_id, c.unit, b.* FROM store_sku_bind a JOIN sku b ON b.id = a.sku_id AND b.deleted_at = ? JOIN sku_name c ON c.id = b.name_id AND c.deleted_at = ? @@ -1542,6 +1546,6 @@ func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSk sql += " AND b.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")" sqlParams = append(sqlParams, nameIDs) } - err = GetRows(db, &storeSkuNameExt, sql, sqlParams...) - return storeSkuNameExt, err + err = GetRows(db, &storeSkuSyncInfo, sql, sqlParams...) + return storeSkuSyncInfo, err }