From d520cfe4bcb31877b0412e650c464798a665ff80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 14:00:55 +0800 Subject: [PATCH 01/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=B1=BB=E5=9E=8B=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E8=BF=94=E5=9B=9E=E5=88=A4=E6=96=AD=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index bbd964ee1..bc61c93fa 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -50,6 +50,10 @@ type SyncError struct { Message string `json:"message"` } +type SpecSyncError struct { + SpecErr error `json:"specErr"` +} + // 对于多门店平台接口的通用处理 type MultiStoreHandlerWrapper struct { partner.IMultipleStoresHandler @@ -633,8 +637,8 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN if len(task.GetFailedList()) > 10 { downloadURL, _, _ := WirteToExcelBySyncFailed(task) noticeMsg = fmt.Sprintf("[详情点我]path1=%s\n", downloadURL) - } else { - if err != nil { + } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { + if task.GetErr() != nil { noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) } } @@ -664,7 +668,7 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN func buildErrMsg(task tasksch.ITask) (err error) { err = fmt.Errorf(utils.Format4Output(buildErrMsgJson(task), true)) - return makeSyncError(err) + return makeSpecSyncError(err) } func buildErrMsgJson(task tasksch.ITask) (resultL []*SyncErrResult) { @@ -760,6 +764,21 @@ func makeSyncError(err error) (newErr error) { return err } +func makeSpecSyncError(err error) (newErr error) { + if err != nil { + if _, ok := err.(*SpecSyncError); !ok { + return &SpecSyncError{ + SpecErr: err, + } + } + } + return err +} + +func (e *SpecSyncError) Error() string { + return e.SpecErr.Error() +} + func (e *SyncError) Error() string { return fmt.Sprintf("本地数据修改成功,但同步失败,请根据错误提示处理!,同步错误信息:%s", e.Original.Error()) } From c6f3e49be810e5bb729dc0cbc482c0bc99a25410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 14:32:09 +0800 Subject: [PATCH 02/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E5=A2=9E=E5=8A=A0=E5=88=A4?= =?UTF-8?q?=E6=96=AD=EF=BC=88=E5=B0=9D=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index bc61c93fa..c45024ccd 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -457,7 +457,9 @@ func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vend return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID) }, isContinueWhenError) if task != nil { - err = makeSyncError(err) + if err != nil { + err = makeSyncError(err) + } } return hint, err } From 279e71a2eabbda8b32d5024f5202abbe6d696fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 14:38:25 +0800 Subject: [PATCH 03/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E4=BF=AE=E6=94=B9=EF=BC=9A=E4=BB=8Etask?= =?UTF-8?q?=E4=B8=AD=E8=8E=B7=E5=8F=96failedList=E6=89=8D=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=96=B0=E7=9A=84=E5=90=8C=E6=AD=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index c45024ccd..605af66c0 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -457,9 +457,7 @@ func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vend return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID) }, isContinueWhenError) if task != nil { - if err != nil { - err = makeSyncError(err) - } + err = makeSyncError(err) } return hint, err } @@ -652,7 +650,7 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN tasksch.HandleTask(task, nil, isManageIt).Run() if !isAsync { resultList, err2 := task.GetResult(0) - if err2 != nil { + if len(task.GetFailedList()) > 0 { err2 = buildErrMsg(task) } if err = err2; err == nil { From 0cd7a5de3e267aaf6afb1466912bcad760b1774d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 15:11:02 +0800 Subject: [PATCH 04/32] =?UTF-8?q?=E9=A5=BF=E7=99=BEapi=E8=BF=94=E5=9B=9Efa?= =?UTF-8?q?iledlist=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/ebai/store_sku2.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 8681bcd29..271d9ccdb 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -190,7 +190,9 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr opResult, err = api.EbaiAPI.SkuOnline(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs, nil, nil) } else if len(vendorSkuIDs) == 1 { err = api.EbaiAPI.SkuOnlineOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs[0], "", "") - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + } return failedList, err } } else { @@ -198,7 +200,9 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr opResult, err = api.EbaiAPI.SkuOffline(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs, nil, nil) } else if len(vendorSkuIDs) == 1 { err = api.EbaiAPI.SkuOfflineOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs[0], "", "") - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + } return failedList, err } } @@ -231,9 +235,9 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品价格") } } else if len(storeSkuList) == 1 { - opResult2, err := api.EbaiAPI.SkuPriceUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) - if err != nil && opResult2 != nil { - failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult2, storeID, model.VendorIDEBAI, "更新商品价格") + err := api.EbaiAPI.SkuPriceUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品价格") } } } @@ -250,7 +254,9 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg } } else if len(storeSkuList) == 1 { err = api.EbaiAPI.SkuStockUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") + } } } return failedList, err From 72be249c77782be61debc89aea112519f1d1fb52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 15:35:01 +0800 Subject: [PATCH 05/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=A1=A5=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync_store_sku.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 72abba655..ccc789aac 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -367,6 +367,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo reorderSkuMap = make(map[string][]*dao.StoreSkuSyncInfo) } now := jxutils.OperationTime2HourMinuteFormat(time.Now()) + var failedList []*partner.StoreSkuInfoWithErr for _, sku := range skus { if !useVendorPriceDirectly && !isSkuLockTimeValid(sku) { @@ -415,10 +416,12 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo } else { if dao.IsVendorThingIDEmpty(sku.VendorSkuID) { err = fmt.Errorf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID) + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, vendorID, "异常同步错误") if parentTask == nil { return err } parentTask.AddBatchErr(err) + parentTask.AddFailedList(failedList) } else { isAdded2Update := false // 修改商品信息时不改价(以免活动引起的失败),而用单独的改价来改 From 4e4afc00f5a6a10c51a8fea1f64d1c0389ef6cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 15:51:12 +0800 Subject: [PATCH 06/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync_store_sku.go | 3 ++- business/partner/putils/store_sku.go | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index ccc789aac..1e2d82765 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -415,7 +415,8 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo isNeedReorder = true } else { if dao.IsVendorThingIDEmpty(sku.VendorSkuID) { - err = fmt.Errorf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID) + // err = fmt.Errorf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID) + err = utils.NewErrorCode(fmt.Sprintf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID), "-1", 0) failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, vendorID, "异常同步错误") if parentTask == nil { return err diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go index 0b4743c8d..e3004f7a8 100644 --- a/business/partner/putils/store_sku.go +++ b/business/partner/putils/store_sku.go @@ -4,6 +4,8 @@ import ( "fmt" "sort" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/baseapi/utils" @@ -269,6 +271,8 @@ func GetErrMsg2FailedSingleList(storeSkuList interface{}, err error, storeID, ve } failedList = append(failedList, storeSkuInfoWithErr) } + } else { + globals.SugarLogger.Errorf("GetErrMsg2FailedSingleList:%v", err) } } return failedList From 319a4779b107bbada63963ae23906f87493532b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 16:02:40 +0800 Subject: [PATCH 07/32] =?UTF-8?q?=E9=A5=BF=E7=99=BE=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=9A=82=E6=97=B6=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E4=BF=9D=E6=8C=81=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/ebai/store_sku2.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 271d9ccdb..be69c6452 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -253,7 +253,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } } else if len(storeSkuList) == 1 { - err = api.EbaiAPI.SkuStockUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) + _, err = api.EbaiAPI.SkuStockUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) if err != nil { failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") } From c12f6288de6d462944ce460dab5a940c79c44bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 16:09:45 +0800 Subject: [PATCH 08/32] =?UTF-8?q?=E6=94=B9=E9=94=99=E5=9C=B0=E6=96=B9?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/ebai/store_sku2.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index be69c6452..a35d768ec 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -191,6 +191,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr } else if len(vendorSkuIDs) == 1 { err = api.EbaiAPI.SkuOnlineOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs[0], "", "") if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") } return failedList, err @@ -235,7 +236,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品价格") } } else if len(storeSkuList) == 1 { - err := api.EbaiAPI.SkuPriceUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) + _, err := api.EbaiAPI.SkuPriceUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) if err != nil { failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品价格") } @@ -253,7 +254,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } } else if len(storeSkuList) == 1 { - _, err = api.EbaiAPI.SkuStockUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) + err = api.EbaiAPI.SkuStockUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) if err != nil { failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") } From b0771601f6c432a9f98197cba68f8727eeb2e358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 17:02:17 +0800 Subject: [PATCH 09/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0parentTask?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 4 ++-- business/jxstore/cms/store_sku.go | 20 +++++++++++--------- business/jxstore/cms/sync.go | 18 +++++++++--------- business/jxstore/misc/misc.go | 4 ++-- controllers/cms_store_sku.go | 4 ++-- controllers/cms_sync.go | 2 +- 6 files changed, 27 insertions(+), 25 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 11f6656f5..26972db3d 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1381,7 +1381,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro if err == nil && len(skuList) > 0 { if skuList[0].ExPrefixBegin != nil { _, err = UpdateSkuName(ctx, nameID, payload) - CurVendorSync.SyncStoresSkus2(ctx, db, partner.GetSingleStoreVendorIDs(), nil, false, []int{skuList[0].ID}, nil, model.SyncFlagModifiedMask, true, true) + CurVendorSync.SyncStoresSkus2(ctx, nil, db, partner.GetSingleStoreVendorIDs(), nil, false, []int{skuList[0].ID}, nil, model.SyncFlagModifiedMask, true, true) } else { skuName := &model.SkuName{ ExPrefix: exPrefix, @@ -1416,7 +1416,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro for _, v := range skuList { skuIDs = append(skuIDs, v.ID) } - CurVendorSync.SyncStoresSkus2(ctx, db, partner.GetSingleStoreVendorIDs(), nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true) + CurVendorSync.SyncStoresSkus2(ctx, nil, db, partner.GetSingleStoreVendorIDs(), nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true) } } } diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index de976ca29..ca0c2e6eb 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -797,7 +797,7 @@ func UpdateStoresSkus(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*St isAsync = asyncStoreSkuOpFilter(ctx, isAsync) num = int64(len(skuIDs)) if num > 0 { - hint, err = CurVendorSync.SyncStoresSkus(ctx, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) + hint, err = CurVendorSync.SyncStoresSkus(ctx, nil, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) } if num == 0 || !isAsync || hint == "" { hint = utils.Int64ToStr(num) @@ -805,7 +805,7 @@ func UpdateStoresSkus(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*St return hint, err } -func UpdateStoresSkusByBind(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) { +func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) { if len(skuBindInfos) > maxStoreNameBind { return "", fmt.Errorf("门店商品信息大于%d", maxStoreNameBind) } @@ -848,7 +848,7 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBind isAsync = asyncStoreSkuOpFilter(ctx, isAsync) if num > 0 { skuIDs := jxutils.IntMap2List(skuIDMap) - hint, err = CurVendorSync.SyncStoresSkus(ctx, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) + hint, err = CurVendorSync.SyncStoresSkus(ctx, parentTask, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) } if num == 0 || !isAsync || hint == "" { hint = utils.Int64ToStr(num) @@ -1292,7 +1292,7 @@ func UpdateStoresSkusSale(ctx *jxcontext.Context, storeIDs []int, skuBindSkuInfo skuIDs = append(skuIDs, v.SkuID) } db := dao.GetDB() - hint, err = CurVendorSync.SyncStoresSkus(ctx, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) + hint, err = CurVendorSync.SyncStoresSkus(ctx, nil, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) } if num == 0 || !isAsync || hint == "" { hint = utils.Int64ToStr(num) @@ -2165,7 +2165,7 @@ func AutoSaleStoreSku(ctx *jxcontext.Context, storeIDs []int, isNeedSync bool) ( } } if isNeedSync && len(skuIDs) > 0 { - if _, err = CurVendorSync.SyncStoresSkus(ctx, db, nil, []int{storeID}, skuIDs, false, true, true); err != nil { + if _, err = CurVendorSync.SyncStoresSkus(ctx, nil, db, nil, []int{storeID}, skuIDs, false, true, true); err != nil { return err } } @@ -2895,6 +2895,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, } } } + var storeSkuBindInfo []*StoreSkuBindInfo for k, v := range skuNameMap { skuBindInfo := &StoreSkuBindInfo{ StoreID: store.ID, @@ -2904,8 +2905,9 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, IsSale: 1, Skus: skuInfoMap[k], } - retVal = []*StoreSkuBindInfo{skuBindInfo} + storeSkuBindInfo = append(storeSkuBindInfo, skuBindInfo) } + retVal = storeSkuBindInfo return retVal, err } taskParallel := tasksch.NewParallelTask("根据skuID关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList) @@ -2916,7 +2918,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - UpdateStoresSkusByBind(ctx, skuBindInfos, true, true) + UpdateStoresSkusByBind(ctx, task, skuBindInfos, true, true) } return result, err } @@ -3011,7 +3013,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - hint, err = UpdateStoresSkusByBind(ctx, skuBindInfos, isAsync, isContinueWhenError) + hint, err = UpdateStoresSkusByBind(ctx, task, skuBindInfos, isAsync, isContinueWhenError) } return result, err } @@ -3101,7 +3103,7 @@ func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, i for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - UpdateStoresSkusByBind(ctx, skuBindInfos, isAsync, isContinueWhenError) + UpdateStoresSkusByBind(ctx, nil, skuBindInfos, isAsync, isContinueWhenError) } return result, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 605af66c0..3a8c02b94 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -228,7 +228,7 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs globals.SugarLogger.Debugf("SyncStore2, storeIDs:%d", storeIDs) userName := ctx.GetUserName() isManageIt := len(storeIDs) == 0 || len(storeIDs) > 5 - _, hint, err = v.LoopStoresMap2(ctx, db, fmt.Sprintf("同步门店信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, mustDirty, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (resultList interface{}, err error) { + _, hint, err = v.LoopStoresMap2(ctx, nil, db, fmt.Sprintf("同步门店信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, mustDirty, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (resultList interface{}, err error) { loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) handler := v.GetStoreHandler(loopMapInfo.VendorID) if handler != nil { @@ -426,10 +426,10 @@ 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, parentTask tasksch.ITask, 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") isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8 - task, hint, err := v.LoopStoresMap2(ctx, db, fmt.Sprintf("同步门店商品信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, false, + task, hint, err := v.LoopStoresMap2(ctx, parentTask, db, fmt.Sprintf("同步门店商品信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil { @@ -462,12 +462,12 @@ func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vend return hint, err } -func (v *VendorSync) SyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, skuIDs []int, isForce, isAsync, isContinueWhenError bool) (hint string, err error) { +func (v *VendorSync) SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, vendorIDs []int, storeIDs []int, skuIDs []int, isForce, isAsync, isContinueWhenError bool) (hint string, err error) { setSyncStatus := 0 if isForce { setSyncStatus = model.SyncFlagStoreSkuModifiedMask } - return v.SyncStoresSkus2(ctx, db, vendorIDs, storeIDs, true, skuIDs, nil, setSyncStatus, isAsync, isContinueWhenError) + return v.SyncStoresSkus2(ctx, parentTask, db, vendorIDs, storeIDs, true, skuIDs, nil, setSyncStatus, isAsync, isContinueWhenError) } func (v *VendorSync) proxySyncStoreCategory(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { @@ -606,7 +606,7 @@ func (v *VendorSync) AmendAndPruneStoreStuff(ctx *jxcontext.Context, vendorIDs [ return hint, makeSyncError(err) } -func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskName string, isAsync, isManageIt bool, vendorIDs []int, storeIDs []int, mustDirty bool, handler tasksch.WorkFunc, isContinueWhenError bool) (task tasksch.ITask, hint string, err error) { +func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, taskName string, isAsync, isManageIt bool, vendorIDs []int, storeIDs []int, mustDirty bool, handler tasksch.WorkFunc, isContinueWhenError bool) (task tasksch.ITask, hint string, err error) { var storeMapList []*model.StoreMap if storeMapList, err = dao.GetStoresMapList2(db, vendorIDs, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "", mustDirty); err != nil { return nil, "", err @@ -647,7 +647,7 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN } }) } - tasksch.HandleTask(task, nil, isManageIt).Run() + tasksch.HandleTask(task, parentTask, isManageIt).Run() if !isAsync { resultList, err2 := task.GetResult(0) if len(task.GetFailedList()) > 0 { @@ -699,7 +699,7 @@ func buildErrMsgJson(task tasksch.ITask) (resultL []*SyncErrResult) { } func (v *VendorSync) LoopStoresMap(ctx *jxcontext.Context, db *dao.DaoDB, taskName string, isAsync, isManageIt bool, vendorIDs []int, storeIDs []int, handler tasksch.WorkFunc, isContinueWhenError bool) (hint string, err error) { - _, hint, err = v.LoopStoresMap2(ctx, db, taskName, isAsync, isManageIt, vendorIDs, storeIDs, false, handler, isContinueWhenError) + _, hint, err = v.LoopStoresMap2(ctx, nil, db, taskName, isAsync, isManageIt, vendorIDs, storeIDs, false, handler, isContinueWhenError) return hint, err } @@ -819,7 +819,7 @@ func (v *VendorSync) ChangeStoreSkuSaleStatus(ctx *jxcontext.Context, storeID in } vendorIDs := partner.GetPurchasePlatformVendorIDs() dao.UpdateStoreSkuBindSyncStatusForSaleStatus(db, vendorIDs, storeID) - v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError) + v.SyncStoresSkus(ctx, nil, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError) return err } diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index fa1b06226..6fa312cd7 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -183,7 +183,7 @@ func syncStoreSku() { }) errList.AddErr(err) - _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, nil, []int{27379}, syncFlag, true, true) + _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, db, partner.GetMultiStoreVendorIDs(), nil, false, nil, []int{27379}, syncFlag, true, true) // _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true) errList.AddErr(err) case 1: @@ -193,7 +193,7 @@ func syncStoreSku() { errList.AddErr(err) SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID) - taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) + taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) errList.AddErr(err2) SaveImportantTaskID(TaskNameSyncStoreSku, taskID) } diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index ba3b0e9e6..04638b07b 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -196,7 +196,7 @@ func (c *StoreSkuController) SyncStoresSkus() { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.VendorIDs, &vendorIDs); err != nil { return retVal, "", err } - retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, nil, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) } @@ -239,7 +239,7 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil { return retVal, "", err } - retVal, err = cms.UpdateStoresSkusByBind(params.Ctx, skuBindInfos, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.UpdateStoresSkusByBind(params.Ctx, nil, skuBindInfos, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) } diff --git a/controllers/cms_sync.go b/controllers/cms_sync.go index 926c3537f..96fd368df 100644 --- a/controllers/cms_sync.go +++ b/controllers/cms_sync.go @@ -33,7 +33,7 @@ func (c *SyncController) SyncStoresSkus() { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.VendorIDs, &vendorIDs); err != nil { return retVal, "", err } - retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, nil, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) } From 65a54b603b6b06e5c9f5802cdab5f2d887e1572c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 17:44:47 +0800 Subject: [PATCH 10/32] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=85=B3=E6=B3=A8?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index ca0c2e6eb..07c413db6 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3031,8 +3031,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() var ( - skuBindInfoList []*StoreSkuBindInfo - result1 []interface{} + result1 []interface{} ) storeList, err := dao.GetStoreList(db, nil, nil, "") taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { @@ -3077,6 +3076,7 @@ func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, i payPercentage = v.PayPercentage } if len(skuNameAndPlaceList) > 0 { + var skuBindInfoList []*StoreSkuBindInfo for _, vv := range skuNameAndPlaceList { if skuNameMap[vv.ID] != 0 { priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) @@ -3092,6 +3092,7 @@ func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, i } } } + retVal = skuBindInfoList } return retVal, err } From aff821e09d2ba91585a8818b2085167bd0837994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 10 Jan 2020 17:57:26 +0800 Subject: [PATCH 11/32] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=97=A8=E5=BA=97=E5=95=86=E5=93=81filedList=E8=BF=94=E5=9B=9E?= =?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/cms/sync_store_sku.go | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index d99ba7444..6a98c8088 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -516,21 +516,21 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(createList) > 0 { _, err = putils.FreeBatchStoreSkuSyncInfo("创建门店商品", func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr - failedList, err = singleStoreHandler.CreateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) - singleStoreHandler.IsErrSkuExist(err) - if skuNameList, err2 := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, []*partner.StoreSkuInfo{ - &partner.StoreSkuInfo{ - SkuID: batchedStoreSkuList[0].SkuID, - }, - }); err2 == nil && len(skuNameList) > 0 { - batchedStoreSkuList[0].VendorNameID = skuNameList[0].VendorNameID - batchedStoreSkuList[0].VendorSkuID = skuNameList[0].SkuList[0].VendorSkuID + if failedList, err = singleStoreHandler.CreateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList); singleStoreHandler.IsErrSkuExist(err) { + if skuNameList, err2 := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, []*partner.StoreSkuInfo{ + &partner.StoreSkuInfo{ + SkuID: batchedStoreSkuList[0].SkuID, + }, + }); err2 == nil && len(skuNameList) > 0 { + batchedStoreSkuList[0].VendorNameID = skuNameList[0].VendorNameID + batchedStoreSkuList[0].VendorSkuID = skuNameList[0].SkuList[0].VendorSkuID - // 如果创建商品时已经存在,需要更新 - updateList = append(updateList, calVendorPrice4StoreSku(batchedStoreSkuList[0], storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage))) - err = nil - } else { - failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) + // 如果创建商品时已经存在,需要更新 + updateList = append(updateList, calVendorPrice4StoreSku(batchedStoreSkuList[0], storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage))) + err = nil + } else if err2 != nil { + failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) + } } if len(failedList) > 0 { task.AddFailedList(failedList) From 78fcdeaf39a0f12b30099e2eaa5f5eda150a1a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 09:03:02 +0800 Subject: [PATCH 12/32] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A8=E8=8D=90?= =?UTF-8?q?=E5=93=81=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=B4=BB=E5=8A=A8=E7=B3=BB?= =?UTF-8?q?=E5=88=97=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 19 ++++++++++++++++++- business/model/dao/store_sku.go | 13 +++++++------ business/model/sku.go | 23 +++++++++++++++-------- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 07c413db6..7c91e6143 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2276,11 +2276,28 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam if skuNameMap[v.ID] != nil { priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{cityCode}, nil, []int{v.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) if len(priceReferList) > 0 { - v.Price = priceReferList[0].MidUnitPrice * payPercentage / 100 + v.UnitPrice = priceReferList[0].MidUnitPrice * payPercentage / 100 } v.Type = skuNameMap[v.ID].BrandID skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList + var storeSkuNameExt []*dao.StoreSkuNameExt + for _, vv := range skuList { + storeSkuName := &dao.StoreSkuNameExt{ + SkuID: vv.ID, + } + var skuNamesInfo = &dao.StoreSkuNamesInfo{ + SkuNames: storeSkuNameExt, + } + dao.UpdateActPrice4StoreSkuNameNew(db, []int{storeID}, []int{vv.ID}, skuNamesInfo, -1) + vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale + vv.ActPrice = skuNamesInfo.SkuNames[0].Skus[0].ActPrice + vv.ActID = skuNamesInfo.SkuNames[0].Skus[0].ActID + vv.ActType = skuNamesInfo.SkuNames[0].Skus[0].ActType + vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice + vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID + storeSkuNameExt = append(storeSkuNameExt, storeSkuName) + } skuNameAndPlaceList = append(skuNameAndPlaceList, v) } } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 3b94744b0..c166ec610 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -210,12 +210,13 @@ type StoreSkuExt struct { type SkuNameAndPlace struct { model.SkuName - CityCode int `json:"cityCode"` - CityName string `json:"cityName"` - Sequence int `json:"sequence"` - Count int `json:"count"` - Type int `json:"type"` - Skus []*model.SkuAndName `json:"skus"` + UnitPrice int `json:"unitPrice"` + CityCode int `json:"cityCode"` + CityName string `json:"cityName"` + Sequence int `json:"sequence"` + Count int `json:"count"` + Type int `json:"type"` + Skus []*model.SkuAndName `json:"skus"` } type StoreSkuPriceAndWeight struct { diff --git a/business/model/sku.go b/business/model/sku.go index f7f013323..3c6203e24 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -231,14 +231,21 @@ type Sku struct { type SkuAndName struct { Sku - Name string - Unit string - Prefix string - IsSpu int - ExPrefix string - ExPrefixBegin *time.Time - ExPrefixEnd *time.Time - Price int + Name string + Unit string + Prefix string + IsSpu int + ExPrefix string + ExPrefixBegin *time.Time + ExPrefixEnd *time.Time + Price int + StoreSkuStatus int + ActPrice int `json:"actPrice"` + ActID int `orm:"column(act_id)" json:"actID"` + ActType int `orm:"column(act_type)" json:"actType"` + + EarningPrice int `json:"earningPrice"` + EarningActID int `orm:"column(earning_act_id)" json:"earningActID"` } func (*Sku) TableUnique() [][]string { From 2f168f2c74443e61cb137a0130a53b0c7f0117f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 09:12:02 +0800 Subject: [PATCH 13/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E5=A2=9E=E5=8A=A0=E6=B4=BB=E5=8A=A8=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 7c91e6143..192c4a9f8 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2283,10 +2283,15 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam v.Skus = skuList var storeSkuNameExt []*dao.StoreSkuNameExt for _, vv := range skuList { - storeSkuName := &dao.StoreSkuNameExt{ + var skusList []*dao.StoreSkuExt + skus := &dao.StoreSkuExt{ SkuID: vv.ID, } - var skuNamesInfo = &dao.StoreSkuNamesInfo{ + skusList = append(skusList, skus) + storeSkuName := &dao.StoreSkuNameExt{ + Skus: skusList, + } + skuNamesInfo := &dao.StoreSkuNamesInfo{ SkuNames: storeSkuNameExt, } dao.UpdateActPrice4StoreSkuNameNew(db, []int{storeID}, []int{vv.ID}, skuNamesInfo, -1) From f6d171936a8e8328ee45313c4fe8cfd400086158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 09:13:53 +0800 Subject: [PATCH 14/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=A2=9E=E5=8A=A0=E6=B4=BB=E5=8A=A8=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 192c4a9f8..651293978 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2296,11 +2296,11 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam } dao.UpdateActPrice4StoreSkuNameNew(db, []int{storeID}, []int{vv.ID}, skuNamesInfo, -1) vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale - vv.ActPrice = skuNamesInfo.SkuNames[0].Skus[0].ActPrice - vv.ActID = skuNamesInfo.SkuNames[0].Skus[0].ActID - vv.ActType = skuNamesInfo.SkuNames[0].Skus[0].ActType - vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice - vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID + // vv.ActPrice = skuNamesInfo.SkuNames[0].Skus[0].ActPrice + // vv.ActID = skuNamesInfo.SkuNames[0].Skus[0].ActID + // vv.ActType = skuNamesInfo.SkuNames[0].Skus[0].ActType + // vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice + // vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID storeSkuNameExt = append(storeSkuNameExt, storeSkuName) } skuNameAndPlaceList = append(skuNameAndPlaceList, v) From 93d1c464080de1f94c06d3f067ac1b4d146d7a61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 09:56:42 +0800 Subject: [PATCH 15/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 18 ++++++++++-------- business/model/sku.go | 24 ++++++++++++------------ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 651293978..b0bc59a97 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2232,7 +2232,7 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam skuNameAndPlace, err := dao.GetTopSkusByCityCode(db, cityCode, orderCreate) if storeID > 0 { var skuNameList []*model.SkuName - //未关注,不可售的商品nameID列表 + //不可售的商品nameID列表 sql := ` SELECT DISTINCT b.name_id id,1 brand_id FROM store_sku_bind a @@ -2281,8 +2281,8 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam v.Type = skuNameMap[v.ID].BrandID skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList - var storeSkuNameExt []*dao.StoreSkuNameExt for _, vv := range skuList { + var storeSkuNameExt []*dao.StoreSkuNameExt var skusList []*dao.StoreSkuExt skus := &dao.StoreSkuExt{ SkuID: vv.ID, @@ -2294,14 +2294,16 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam skuNamesInfo := &dao.StoreSkuNamesInfo{ SkuNames: storeSkuNameExt, } + storeSkuNameExt = append(storeSkuNameExt, storeSkuName) dao.UpdateActPrice4StoreSkuNameNew(db, []int{storeID}, []int{vv.ID}, skuNamesInfo, -1) vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale - // vv.ActPrice = skuNamesInfo.SkuNames[0].Skus[0].ActPrice - // vv.ActID = skuNamesInfo.SkuNames[0].Skus[0].ActID - // vv.ActType = skuNamesInfo.SkuNames[0].Skus[0].ActType - // vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice - // vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID - storeSkuNameExt = append(storeSkuNameExt, storeSkuName) + if skuNamesInfo.SkuNames[0].Skus[0] != nil { + vv.ActPrice = skuNamesInfo.SkuNames[0].Skus[0].ActPrice + vv.ActID = skuNamesInfo.SkuNames[0].Skus[0].ActID + vv.ActType = skuNamesInfo.SkuNames[0].Skus[0].ActType + vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice + vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID + } } skuNameAndPlaceList = append(skuNameAndPlaceList, v) } diff --git a/business/model/sku.go b/business/model/sku.go index 3c6203e24..cd540411c 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -231,18 +231,18 @@ type Sku struct { type SkuAndName struct { Sku - Name string - Unit string - Prefix string - IsSpu int - ExPrefix string - ExPrefixBegin *time.Time - ExPrefixEnd *time.Time - Price int - StoreSkuStatus int - ActPrice int `json:"actPrice"` - ActID int `orm:"column(act_id)" json:"actID"` - ActType int `orm:"column(act_type)" json:"actType"` + Name string `json:"name"` + Unit string `json:"unit"` + Prefix string `json:"prefix"` + IsSpu int `json:"isSpu"` + ExPrefix string `json:"exPrefix"` + ExPrefixBegin *time.Time `json:"exPrefixBegin"` + ExPrefixEnd *time.Time `json:"eExPrefixEndxPrefixEnd"` + Price int `json:"price"` + StoreSkuStatus int `json:"storeSkuStatus"` + ActPrice int `json:"actPrice"` + ActID int `orm:"column(act_id)" json:"actID"` + ActType int `orm:"column(act_type)" json:"actType"` EarningPrice int `json:"earningPrice"` EarningActID int `orm:"column(earning_act_id)" json:"earningActID"` From 3106f2a5d86323c787c9f40fe738585f58465d77 Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 13 Jan 2020 09:58:05 +0800 Subject: [PATCH 16/32] =?UTF-8?q?getAddressInfoFromCoord=E4=B8=AD=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=89=BE=E4=B8=8D=E5=88=B0=E4=BD=8D=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/user2.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index e272e2a48..8421a6506 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -580,8 +580,10 @@ func getAddressInfoFromCoord(db *dao.DaoDB, lng, lat float64) (formattedAddress regeoInfo, err := api.AutonaviAPI.GeoCodeRegeoSingle(lng, lat, 0, false, nil, 0, 0) if err == nil { formattedAddress = regeoInfo.FormattedAddress - districtCode = int(utils.Str2Int64(regeoInfo.AddressComponent.Adcode)) - if districtInfo, err2 := dao.GetPlaceByCode(db, districtCode); err2 == nil { + districtCode = int(utils.Str2Int64WithDefault(regeoInfo.AddressComponent.Adcode, 0)) + if districtCode == 0 { + err = fmt.Errorf("坐标lng:%f,lat:%f找不到位置信息", lng, lat) + } else if districtInfo, err2 := dao.GetPlaceByCode(db, districtCode); err2 == nil { cityCode = districtInfo.ParentCode } } From 8d5f9cd9a669d900a56459c7a5523b0fdb55607b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 10:00:40 +0800 Subject: [PATCH 17/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 b0bc59a97..3bebf83cc 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2291,10 +2291,10 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam storeSkuName := &dao.StoreSkuNameExt{ Skus: skusList, } + storeSkuNameExt = append(storeSkuNameExt, storeSkuName) skuNamesInfo := &dao.StoreSkuNamesInfo{ SkuNames: storeSkuNameExt, } - storeSkuNameExt = append(storeSkuNameExt, storeSkuName) dao.UpdateActPrice4StoreSkuNameNew(db, []int{storeID}, []int{vv.ID}, skuNamesInfo, -1) vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale if skuNamesInfo.SkuNames[0].Skus[0] != nil { From de55fb9cb29ed446fb7b4bd6fc67f620f7870765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 10:12:14 +0800 Subject: [PATCH 18/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E6=9F=A5=E8=AF=A2=E6=B4=BB=E5=8A=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0storeid=EF=BC=88bug=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 3bebf83cc..18518ed24 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2289,7 +2289,8 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam } skusList = append(skusList, skus) storeSkuName := &dao.StoreSkuNameExt{ - Skus: skusList, + Skus: skusList, + StoreID: storeID, } storeSkuNameExt = append(storeSkuNameExt, storeSkuName) skuNamesInfo := &dao.StoreSkuNamesInfo{ From a17f8393cc488a0e624cece02b54d96590bf2b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 10:25:35 +0800 Subject: [PATCH 19/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E6=9F=A5=E8=AF=A2=E6=B4=BB=E5=8A=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0payPercentage=EF=BC=88bug=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 18518ed24..653d24926 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2282,22 +2282,26 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList for _, vv := range skuList { - var storeSkuNameExt []*dao.StoreSkuNameExt - var skusList []*dao.StoreSkuExt + var ( + storeSkuNameExt []*dao.StoreSkuNameExt + skusList []*dao.StoreSkuExt + price int + specQuality float64 + ) skus := &dao.StoreSkuExt{ SkuID: vv.ID, } skusList = append(skusList, skus) storeSkuName := &dao.StoreSkuNameExt{ - Skus: skusList, - StoreID: storeID, + Skus: skusList, + StoreID: storeID, + PayPercentage: payPercentage, } storeSkuNameExt = append(storeSkuNameExt, storeSkuName) skuNamesInfo := &dao.StoreSkuNamesInfo{ SkuNames: storeSkuNameExt, } dao.UpdateActPrice4StoreSkuNameNew(db, []int{storeID}, []int{vv.ID}, skuNamesInfo, -1) - vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale if skuNamesInfo.SkuNames[0].Skus[0] != nil { vv.ActPrice = skuNamesInfo.SkuNames[0].Skus[0].ActPrice vv.ActID = skuNamesInfo.SkuNames[0].Skus[0].ActID @@ -2305,6 +2309,18 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID } + vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale + if vv.Unit == model.SpecialUnit { + if vv.SpecUnit == model.SpecUnitNames[1] || vv.SpecUnit == model.SpecUnitNames[2] { + specQuality = float64(vv.SpecQuality) * 1000 + } else { + specQuality = float64(vv.SpecQuality) + } + price = int(utils.Float64TwoInt64(specQuality / utils.Int2Float64(model.SpecialSpecQuality) * utils.Int2Float64(v.UnitPrice))) + } else { + price = v.UnitPrice + } + vv.Price = price } skuNameAndPlaceList = append(skuNameAndPlaceList, v) } From b60d792194ef2dd74530cb885749bfded4a503fa Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 13 Jan 2020 10:42:26 +0800 Subject: [PATCH 20/32] =?UTF-8?q?UpdateActPrice4StoreSkuNameNew=E4=B8=ADbu?= =?UTF-8?q?g=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/store_sku.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 3b94744b0..8d121023a 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1433,7 +1433,7 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI v.EarningActID = actStoreSku.ActID } else { earningPrice := int(jxutils.CaculateSkuEarningPrice(int64(v.BindPrice), int64(v.BindPrice), skuName.PayPercentage)) - if earningPrice < v.EarningPrice { + if v.EarningPrice == 0 || earningPrice < v.EarningPrice { v.EarningPrice = earningPrice } } From 5595c56cb6895a8e3d85afaca60806ce8ba7405f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 10:51:35 +0800 Subject: [PATCH 21/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=20eariningPrice=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 653d24926..6239fd793 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2288,8 +2288,21 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam price int specQuality float64 ) + vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale + if vv.Unit == model.SpecialUnit { + if vv.SpecUnit == model.SpecUnitNames[1] || vv.SpecUnit == model.SpecUnitNames[2] { + specQuality = float64(vv.SpecQuality) * 1000 + } else { + specQuality = float64(vv.SpecQuality) + } + price = int(utils.Float64TwoInt64(specQuality / utils.Int2Float64(model.SpecialSpecQuality) * utils.Int2Float64(v.UnitPrice))) + } else { + price = v.UnitPrice + } + vv.Price = price skus := &dao.StoreSkuExt{ - SkuID: vv.ID, + SkuID: vv.ID, + BindPrice: price, } skusList = append(skusList, skus) storeSkuName := &dao.StoreSkuNameExt{ @@ -2309,18 +2322,6 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam vv.EarningPrice = skuNamesInfo.SkuNames[0].Skus[0].EarningPrice vv.EarningActID = skuNamesInfo.SkuNames[0].Skus[0].EarningActID } - vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale - if vv.Unit == model.SpecialUnit { - if vv.SpecUnit == model.SpecUnitNames[1] || vv.SpecUnit == model.SpecUnitNames[2] { - specQuality = float64(vv.SpecQuality) * 1000 - } else { - specQuality = float64(vv.SpecQuality) - } - price = int(utils.Float64TwoInt64(specQuality / utils.Int2Float64(model.SpecialSpecQuality) * utils.Int2Float64(v.UnitPrice))) - } else { - price = v.UnitPrice - } - vv.Price = price } skuNameAndPlaceList = append(skuNameAndPlaceList, v) } From fb36ee4c68572cfd946acddb28fe70bb7067e0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 11:47:08 +0800 Subject: [PATCH 22/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6239fd793..24d6b3b20 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2234,7 +2234,7 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam var skuNameList []*model.SkuName //不可售的商品nameID列表 sql := ` - SELECT DISTINCT b.name_id id,1 brand_id + SELECT DISTINCT b.name_id id FROM store_sku_bind a JOIN sku b ON a.sku_id = b.id AND b.deleted_at = ? WHERE a.deleted_at = ? @@ -2273,12 +2273,13 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam payPercentage = store.PayPercentage } for _, v := range skuNameAndPlace { + var skuMap = make(map[int]*dao.StoreSkuSyncInfo) if skuNameMap[v.ID] != nil { - priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{cityCode}, nil, []int{v.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) - if len(priceReferList) > 0 { - v.UnitPrice = priceReferList[0].MidUnitPrice * payPercentage / 100 + storeSkuSyncInfo, _ := dao.GetStoreSkusAndSkuName(db, []int{storeID}, nil, []int{v.ID}) + for _, storeSkuSync := range storeSkuSyncInfo { + skuMap[storeSkuSync.ID] = storeSkuSync } - v.Type = skuNameMap[v.ID].BrandID + v.UnitPrice = int(storeSkuSyncInfo[0].UnitPrice) skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList for _, vv := range skuList { @@ -2286,20 +2287,9 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam storeSkuNameExt []*dao.StoreSkuNameExt skusList []*dao.StoreSkuExt price int - specQuality float64 ) vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale - if vv.Unit == model.SpecialUnit { - if vv.SpecUnit == model.SpecUnitNames[1] || vv.SpecUnit == model.SpecUnitNames[2] { - specQuality = float64(vv.SpecQuality) * 1000 - } else { - specQuality = float64(vv.SpecQuality) - } - price = int(utils.Float64TwoInt64(specQuality / utils.Int2Float64(model.SpecialSpecQuality) * utils.Int2Float64(v.UnitPrice))) - } else { - price = v.UnitPrice - } - vv.Price = price + vv.Price = int(skuMap[vv.ID].Price) skus := &dao.StoreSkuExt{ SkuID: vv.ID, BindPrice: price, From 0fd1880daeb7cb45d44e9bd908f9fef41d9bbe6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 11:56:57 +0800 Subject: [PATCH 23/32] =?UTF-8?q?=E8=BE=93=E5=87=BA=E8=B0=83=E8=AF=95?= =?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/store_sku.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 24d6b3b20..f8f8c637c 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2279,17 +2279,20 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam for _, storeSkuSync := range storeSkuSyncInfo { skuMap[storeSkuSync.ID] = storeSkuSync } + globals.SugarLogger.Debugf("test", storeSkuSyncInfo) v.UnitPrice = int(storeSkuSyncInfo[0].UnitPrice) skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList for _, vv := range skuList { + globals.SugarLogger.Debugf("test1", vv) var ( storeSkuNameExt []*dao.StoreSkuNameExt skusList []*dao.StoreSkuExt price int ) vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale - vv.Price = int(skuMap[vv.ID].Price) + price = int(skuMap[vv.ID].Price) + vv.Price = price skus := &dao.StoreSkuExt{ SkuID: vv.ID, BindPrice: price, From 31cc85e21c04004a6be9a6ea81ee9c20dcb1f8cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 12:01:25 +0800 Subject: [PATCH 24/32] =?UTF-8?q?=E8=B0=83=E8=AF=95=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 f8f8c637c..2dee7d656 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2278,13 +2278,12 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam storeSkuSyncInfo, _ := dao.GetStoreSkusAndSkuName(db, []int{storeID}, nil, []int{v.ID}) for _, storeSkuSync := range storeSkuSyncInfo { skuMap[storeSkuSync.ID] = storeSkuSync + globals.SugarLogger.Debugf("test, %v ,%v", storeSkuSync.ID, storeSkuSync.Price) } - globals.SugarLogger.Debugf("test", storeSkuSyncInfo) v.UnitPrice = int(storeSkuSyncInfo[0].UnitPrice) skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList for _, vv := range skuList { - globals.SugarLogger.Debugf("test1", vv) var ( storeSkuNameExt []*dao.StoreSkuNameExt skusList []*dao.StoreSkuExt From ce74fb7128c19d775c03ed87ea1f75ab6e4dd4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 12:51:14 +0800 Subject: [PATCH 25/32] =?UTF-8?q?=E7=95=85=E9=94=80=E5=93=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=BB=88=E6=9E=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 13 +++++-------- business/model/dao/store_sku.go | 2 +- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 2dee7d656..5c871e5ce 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2273,28 +2273,25 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam payPercentage = store.PayPercentage } for _, v := range skuNameAndPlace { - var skuMap = make(map[int]*dao.StoreSkuSyncInfo) if skuNameMap[v.ID] != nil { + var skuList []*model.SkuAndName storeSkuSyncInfo, _ := dao.GetStoreSkusAndSkuName(db, []int{storeID}, nil, []int{v.ID}) for _, storeSkuSync := range storeSkuSyncInfo { - skuMap[storeSkuSync.ID] = storeSkuSync - globals.SugarLogger.Debugf("test, %v ,%v", storeSkuSync.ID, storeSkuSync.Price) + sku, _ := dao.GetSkus(db, []int{storeSkuSync.ID}, nil, nil, nil) + sku[0].Price = int(storeSkuSync.Price) + skuList = append(skuList, sku...) } v.UnitPrice = int(storeSkuSyncInfo[0].UnitPrice) - skuList, _ := dao.GetSkus(db, nil, []int{v.ID}, nil, nil) v.Skus = skuList for _, vv := range skuList { var ( storeSkuNameExt []*dao.StoreSkuNameExt skusList []*dao.StoreSkuExt - price int ) vv.StoreSkuStatus = model.StoreSkuBindStatusDontSale - price = int(skuMap[vv.ID].Price) - vv.Price = price skus := &dao.StoreSkuExt{ SkuID: vv.ID, - BindPrice: price, + BindPrice: vv.Price, } skusList = append(skusList, skus) storeSkuName := &dao.StoreSkuNameExt{ diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 7eff33e86..670f8a53c 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1535,7 +1535,7 @@ func GetPriceReferPrice(db *DaoDB, cityCode int, skuID int, snapDate time.Time) func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSkuSyncInfo []*StoreSkuSyncInfo, err error) { sql := ` - SELECT a.id bind_id, a.store_id, a.jd_sync_status, a.mtwm_sync_status, a.ebai_sync_status, a.unit_price, + SELECT a.id bind_id, a.store_id, a.jd_sync_status, a.mtwm_sync_status, a.ebai_sync_status, a.unit_price, a.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 = ? From d29b7b3686576efbf2b41c7144dc5967b5ff2a83 Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 13 Jan 2020 14:17:50 +0800 Subject: [PATCH 26/32] =?UTF-8?q?globals.IsStoreSkuAct=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=B7=BB=E5=8A=A0=E9=97=A8=E5=BA=97=E5=95=86?= =?UTF-8?q?=E5=93=81=E7=9A=84=E5=B9=B3=E5=8F=B0=E6=B4=BB=E5=8A=A8=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/act.go | 23 ++++ business/model/dao/act.go | 167 ++++++++++++++++++++++++++ business/model/dao/store_sku.go | 49 -------- business/model/store_sku.go | 29 ----- business/partner/partner_act.go | 28 ++++- business/partner/purchase/ebai/act.go | 2 +- business/partner/purchase/jd/act.go | 2 +- business/partner/purchase/mtwm/act.go | 2 +- globals/beegodb/beegodb.go | 4 +- globals/globals.go | 8 +- 10 files changed, 221 insertions(+), 93 deletions(-) diff --git a/business/model/act.go b/business/model/act.go index 5094dd643..85d04b23f 100644 --- a/business/model/act.go +++ b/business/model/act.go @@ -168,6 +168,7 @@ type ActStoreSkuMap struct { SyncStatus int8 `orm:"default(2)" json:"syncStatus"` VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格 ActualActPrice int64 `json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格 + EarningPrice int64 `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱 } func (*ActStoreSkuMap) TableUnique() [][]string { @@ -213,3 +214,25 @@ type ActStoreSku2 struct { SpecUnit string `json:"-"` Comment string `json:"-"` } + +type StoreSkuAct struct { + ModelIDCUL + StoreID int `orm:"column(store_id)"` + SkuID int `orm:"column(sku_id);index"` + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + + ActID int `orm:"column(act_id);index" json:"actID"` + VendorActID string `orm:"column(vendor_act_id);size(48);index" json:"vendorActID"` + SyncStatus int8 `orm:"default(2)" json:"syncStatus"` + VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格 + ActualActPrice int64 `json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格 + + EarningActID int `orm:"column(earning_act_id);index" json:"earningActID"` + EarningPrice int64 `json:"earningPrice"` +} + +func (*StoreSkuAct) TableUnique() [][]string { + return [][]string{ + []string{"StoreID", "SkuID", "VendorID"}, + } +} diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 7ae5c09ab..bbd991c91 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -9,6 +9,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals/refutil" ) type ActMapPureInfo struct { @@ -438,3 +439,169 @@ func UpdateActStatusByTime(db *DaoDB, refTime time.Time) (num int64, err error) num, err = ExecuteSQL(db, sql, sqlParams...) return num, err } + +func ActStoreSkuMap2StoreSkuAct(actStoreSkuMap *model.ActStoreSkuMap, isCanceled bool) (storeSkuAct *model.StoreSkuAct) { + storeSkuAct = &model.StoreSkuAct{ + StoreID: actStoreSkuMap.StoreID, + SkuID: actStoreSkuMap.SkuID, + VendorID: actStoreSkuMap.VendorID, + } + storeSkuAct.CreatedAt = actStoreSkuMap.CreatedAt + storeSkuAct.UpdatedAt = actStoreSkuMap.UpdatedAt + storeSkuAct.LastOperator = actStoreSkuMap.LastOperator + + if actStoreSkuMap.ActualActPrice > 0 { + if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) { + storeSkuAct.ActID = 0 + } else { + storeSkuAct.ActID = actStoreSkuMap.ActID + storeSkuAct.VendorActID = actStoreSkuMap.VendorActID + storeSkuAct.SyncStatus = actStoreSkuMap.SyncStatus + storeSkuAct.VendorPrice = actStoreSkuMap.VendorPrice + storeSkuAct.ActualActPrice = actStoreSkuMap.ActualActPrice + } + } + if actStoreSkuMap.EarningPrice > 0 { + if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) { + storeSkuAct.EarningActID = 0 + } else { + storeSkuAct.EarningActID = actStoreSkuMap.ActID + storeSkuAct.EarningPrice = actStoreSkuMap.EarningPrice + } + } + return storeSkuAct +} + +func BatchUpdateActEntity(db *DaoDB, isCanceled bool, items []*KVUpdateItem) (num int64, err error) { + if globals.IsStoreSkuAct { + Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + Rollback(db) + if r != nil { + panic(r) + } + } + }() + + for _, v := range items { + if actStoreSku, ok := v.Item.(*model.ActStoreSkuMap); ok { + for k1, v1 := range v.KVs { + refutil.SetObjFieldByName(actStoreSku, k1, v1) + } + if err = CreateOrUpdateActStoreSku(db, ActStoreSkuMap2StoreSkuAct(actStoreSku, isCanceled)); err != nil { + return 0, err + } + } + } + } + + if _, err = BatchUpdateEntityByKV(db, items); err != nil { + return 0, err + } + + if globals.IsStoreSkuAct { + Commit(db) + } + return num, err +} + +func CreateOrUpdateActStoreSku(db *DaoDB, storeSkuAct *model.StoreSkuAct) (err error) { + storeSkuActCopy := *storeSkuAct + if err2 := GetEntity(db, &storeSkuActCopy, model.FieldStoreID, model.FieldSkuID, model.FieldVendorID); err2 == nil { + storeSkuAct.ID = storeSkuActCopy.ID + _, err = UpdateEntity(db, storeSkuAct) + } else if IsNoRowsError(err2) { + err = CreateEntity(db, storeSkuAct) + } else { + err = err2 + } + return err +} + +func GetStoresSkusAct(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuActList []*model.StoreSkuAct, err error) { + sql := ` + SELECT * + FROM store_sku_act t1 + WHERE 1 = 1 + ` + sqlParams := []interface{}{} + if len(storeIDs) > 0 { + sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" + sqlParams = append(sqlParams, storeIDs) + } + if len(skuIDs) > 0 { + sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" + sqlParams = append(sqlParams, skuIDs) + } + if len(vendorIDs) > 0 { + sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" + sqlParams = append(sqlParams, vendorIDs) + } + err = GetRows(db, &storeSkuActList, sql, sqlParams...) + return storeSkuActList, err +} + +func GetStoresSkusAndActInfo(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuAndActList []*StoreSkuAndAct, err error) { + storeSkuList, err := GetStoresSkusInfo(db, storeIDs, skuIDs) + if err == nil && len(storeSkuList) > 0 { + storeSkuActList, err2 := GetStoresSkusAct(db, storeIDs, skuIDs, vendorIDs) + if err = err2; err == nil { + actMap := make(map[int64][]*model.StoreSkuAct) + for _, v := range storeSkuActList { + actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = append(actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)], v) + } + for _, v := range storeSkuList { + storeSkuAct := &StoreSkuAndAct{ + StoreSkuBind: v, + ActMap: make(map[int]*model.StoreSkuAct), + } + for _, vv := range actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] { + storeSkuAct.ActMap[vv.VendorID] = vv + } + storeSkuAndActList = append(storeSkuAndActList, storeSkuAct) + } + } + } + return storeSkuAndActList, err +} + +func GetConflictStoreSkuActInfo(db *DaoDB, vendorIDs []int, inStoreSkuActList []*model.StoreSkuAct) (outStoreSkuActList []*model.StoreSkuAct, err error) { + storeIDMap := make(map[int]int) + skuIDMap := make(map[int]int) + inStoreSkuActMap := make(map[int64]*model.StoreSkuAct) + for _, v := range inStoreSkuActList { + storeIDMap[v.StoreID] = 1 + skuIDMap[v.SkuID] = 1 + inStoreSkuActMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v + } + storeIDs := jxutils.IntMap2List(storeIDMap) + skuIDs := jxutils.IntMap2List(skuIDMap) + + sql := ` + SELECT * + FROM store_sku_act t1 + WHERE + t1.store_id IN (` + GenQuestionMarks(len(storeIDs)) + `) + AND t1.sku_id IN (` + GenQuestionMarks(len(skuIDs)) + `) + ` + sqlParams := []interface{}{ + storeIDs, + skuIDs, + } + if len(vendorIDs) > 0 { + sql += ` AND t1.vendor_Id IN (` + GenQuestionMarks(len(storeIDs)) + `)` + sqlParams = append(sqlParams, vendorIDs) + } + + var tmpStoreSkuActList []*model.StoreSkuAct + if err = GetRows(db, &tmpStoreSkuActList, sql, sqlParams...); err == nil { + for _, v := range tmpStoreSkuActList { + tmpStoreSkuAct := inStoreSkuActMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] + if tmpStoreSkuAct != nil && (tmpStoreSkuAct.ActualActPrice > 0 && v.ActID != 0 && v.SyncStatus == 0 || tmpStoreSkuAct.EarningPrice > 0 && v.EarningActID != 0) { + outStoreSkuActList = append(outStoreSkuActList, v) + } + } + } + return outStoreSkuActList, err +} diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 7eff33e86..0528624f1 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -819,55 +819,6 @@ func GetStoresSkusInfo(db *DaoDB, storeIDs, skuIDs []int) (storeSkuList []*model return storeSkuList, err } -func GetStoresSkusAndActInfo(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuAndActList []*StoreSkuAndAct, err error) { - storeSkuList, err := GetStoresSkusInfo(db, storeIDs, skuIDs) - if err == nil && len(storeSkuList) > 0 { - storeSkuActList, err2 := GetStoresSkusAct(db, storeIDs, skuIDs, vendorIDs) - if err = err2; err == nil { - actMap := make(map[int64][]*model.StoreSkuAct) - for _, v := range storeSkuActList { - actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = append(actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)], v) - } - for _, v := range storeSkuList { - storeSkuAct := &StoreSkuAndAct{ - StoreSkuBind: v, - ActMap: make(map[int]*model.StoreSkuAct), - } - for _, vv := range actMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] { - storeSkuAct.ActMap[vv.VendorID] = vv - } - storeSkuAndActList = append(storeSkuAndActList, storeSkuAct) - } - } - } - return storeSkuAndActList, err -} - -func GetStoresSkusAct(db *DaoDB, storeIDs, skuIDs, vendorIDs []int) (storeSkuActList []*model.StoreSkuAct, err error) { - sql := ` - SELECT * - FROM store_sku_act t1 - WHERE t1.deleted_at = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - } - if len(storeIDs) > 0 { - sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" - sqlParams = append(sqlParams, storeIDs) - } - if len(skuIDs) > 0 { - sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" - sqlParams = append(sqlParams, skuIDs) - } - if len(vendorIDs) > 0 { - sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" - sqlParams = append(sqlParams, vendorIDs) - } - err = GetRows(db, &storeSkuActList, sql, sqlParams...) - return storeSkuActList, err -} - // vendorID, vendorStoreIDs和vendorSkuIDs都是必须参数 func GetStoresSkusInfoByVendorInfo(db *DaoDB, vendorID int, vendorStoreIDs, vendorSkuIDs []string) (storeSkuList []*StoreSkuBindWithVendorInfo, err error) { if len(vendorStoreIDs) == 0 || len(vendorSkuIDs) == 0 { diff --git a/business/model/store_sku.go b/business/model/store_sku.go index 91fc4fa5a..49aebbbc6 100644 --- a/business/model/store_sku.go +++ b/business/model/store_sku.go @@ -161,32 +161,3 @@ func (*StoreOpRequest) TableIndex() [][]string { []string{"StoreID", "Status", "Type"}, } } - -type StoreSkuAct struct { - ModelIDCULD // DeletedAt用于表示请求操作结束,而并不一定是删除 - - StoreID int `orm:"column(store_id)"` - SkuID int `orm:"column(sku_id)"` - VendorID int - - ActID int `orm:"column(act_id);index" json:"actID"` - VendorActID string `orm:"column(vendor_act_id);size(48);index" json:"vendorActID"` - SyncStatus int8 `orm:"default(2)" json:"syncStatus"` - VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格 - ActualActPrice int64 `json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格 - - EarningActID int `orm:"column(earning_act_id);index" json:"earningActID"` - EarningPrice int `json:"earningPrice"` -} - -func (*StoreSkuAct) TableUnique() [][]string { - return [][]string{ - []string{"StoreID", "SkuID", "VendorID", "DeletedAt"}, - } -} - -func (*StoreSkuAct) TableIndex() [][]string { - return [][]string{ - []string{"SkuID", "DeletedAt"}, - } -} diff --git a/business/partner/partner_act.go b/business/partner/partner_act.go index d5ad87018..e4db7ec86 100644 --- a/business/partner/partner_act.go +++ b/business/partner/partner_act.go @@ -61,7 +61,21 @@ func Act2ActMap(act *model.Act2) (actMap *model.ActMap) { } func ActStoreSku2ActStoreSkuMap(actStoreSku *model.ActStoreSku2) (actStoreSkuMap *model.ActStoreSkuMap) { - actStoreSkuMap = &model.ActStoreSkuMap{} + actStoreSkuMap = &model.ActStoreSkuMap{ + ModelIDCULD: actStoreSku.ModelIDCULD, + BindID: actStoreSku.MapID, + + ActID: actStoreSku.ActID, + StoreID: actStoreSku.StoreID, + SkuID: actStoreSku.SkuID, + VendorID: actStoreSku.VendorID, + VendorActID: actStoreSku.VendorActID, + SyncStatus: actStoreSku.SyncStatus, + VendorPrice: actStoreSku.VendorPrice, + ActualActPrice: actStoreSku.ActualActPrice, + + EarningPrice: actStoreSku.EarningPrice, + } actStoreSkuMap.ID = actStoreSku.MapID return actStoreSkuMap } @@ -86,13 +100,17 @@ func Act2Update(ctx *jxcontext.Context, act *model.Act2, syncStatus int) (item * func ActStoreSku2Update(ctx *jxcontext.Context, actStoreSkuList []*model.ActStoreSku2, syncStatus int) (items []*dao.KVUpdateItem) { for _, v := range actStoreSkuList { + v.SyncStatus = 0 + v.UpdatedAt = time.Now() + v.LastOperator = ctx.GetUserName() kvs := map[string]interface{}{ - model.FieldSyncStatus: 0, - model.FieldUpdatedAt: time.Now(), - model.FieldLastOperator: ctx.GetUserName(), + model.FieldSyncStatus: v.SyncStatus, + model.FieldUpdatedAt: v.UpdatedAt, + model.FieldLastOperator: v.LastOperator, } if syncStatus == model.SyncFlagDeletedMask { - kvs[model.FieldDeletedAt] = time.Now() + v.DeletedAt = time.Now() + kvs[model.FieldDeletedAt] = v.DeletedAt } else if syncStatus == model.SyncFlagNewMask { kvs[model.FieldVendorActID] = v.VendorActID } diff --git a/business/partner/purchase/ebai/act.go b/business/partner/purchase/ebai/act.go index 3cd563bf1..316051e95 100644 --- a/business/partner/purchase/ebai/act.go +++ b/business/partner/purchase/ebai/act.go @@ -332,7 +332,7 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa return err }() db := dao.GetDB() - _, err2 := dao.BatchUpdateEntityByKV(db, updateItems) + _, err2 := dao.BatchUpdateActEntity(db, model.IsSyncStatusDelete(act.SyncStatus), updateItems) if err == nil { err = err2 } diff --git a/business/partner/purchase/jd/act.go b/business/partner/purchase/jd/act.go index ccda21745..03b82487e 100644 --- a/business/partner/purchase/jd/act.go +++ b/business/partner/purchase/jd/act.go @@ -341,7 +341,7 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa return err }() // globals.SugarLogger.Debug(utils.Format4Output(updateItems, false)) - _, err2 := dao.BatchUpdateEntityByKV(db, updateItems) + _, err2 := dao.BatchUpdateActEntity(db, model.IsSyncStatusDelete(act.SyncStatus), updateItems) if err == nil { err = err2 } diff --git a/business/partner/purchase/mtwm/act.go b/business/partner/purchase/mtwm/act.go index 4571a5b4b..e1547cd5c 100644 --- a/business/partner/purchase/mtwm/act.go +++ b/business/partner/purchase/mtwm/act.go @@ -207,7 +207,7 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa return err }() db := dao.GetDB() - _, err2 := dao.BatchUpdateEntityByKV(db, updateItems) + _, err2 := dao.BatchUpdateActEntity(db, model.IsSyncStatusDelete(act.SyncStatus), updateItems) if err == nil { err = err2 } diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 7cf4d35ef..4ba03b9c0 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -56,7 +56,9 @@ func Init() { orm.RegisterModel(&model.OrderFinancial{}, &model.AfsOrder{}, &model.OrderDiscountFinancial{}, &model.OrderSkuFinancial{}) orm.RegisterModel(&model.Act{}, &model.ActOrderRule{}, &model.ActStoreSku{}) orm.RegisterModel(&model.ActMap{}, &model.ActStoreSkuMap{}) - // orm.RegisterModel(&model.StoreSkuAct{}) + if globals.IsStoreSkuAct { + orm.RegisterModel(&model.StoreSkuAct{}) + } orm.RegisterModel(&model.NewConfig{}) diff --git a/globals/globals.go b/globals/globals.go index 90fbc0fed..39f1b31f7 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -8,12 +8,6 @@ import ( "go.uber.org/zap" ) -const ( - ErrStrAccessDB = "Error when access DB" - DebugStoreID = 100119 - DebugJdStoreID = "11738122" -) - var ( ReallyCallPlatformAPI bool ReallySendWeixinMsg bool @@ -54,6 +48,7 @@ var ( Jd2OrgCode string IsUseThingMap bool + IsStoreSkuAct bool OutputDebugMsgLevel int ) @@ -111,6 +106,7 @@ func Init() { Jd2OrgCode = beego.AppConfig.DefaultString("jd2OrgCode", "") IsUseThingMap = beego.AppConfig.DefaultBool("useThingMap", false) + IsStoreSkuAct = false } func IsCallbackAlwaysReturnSuccess() bool { From 8c9b4081c8d343f7206d0c7fec38ba75412ed992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 14:53:40 +0800 Subject: [PATCH 27/32] =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=95=86=E5=93=81?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=B3=E6=B3=A8=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=9A=82=E6=97=B6=E5=8F=AA=E6=95=B4?= =?UTF-8?q?4=E4=B8=AA=E5=B0=8F=E5=9F=8E=E5=B8=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 2 +- business/jxstore/cms/store.go | 4 +-- business/jxstore/cms/store_sku.go | 39 ++++++++++++++------------- business/jxstore/cms/user2.go | 2 +- business/jxstore/misc/misc.go | 3 +++ business/jxstore/report/report.go | 2 +- business/model/dao/store.go | 10 ++++++- controllers/cms_store_sku.go | 15 +++++++++++ routers/commentsRouter_controllers.go | 9 +++++++ 9 files changed, 62 insertions(+), 24 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 63a173773..a9e885025 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -365,7 +365,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { } } errList.AddErr(err) - storeList, err2 := dao.GetStoreList(db, nil, nil, key) + storeList, err2 := dao.GetStoreList(db, nil, nil, nil, nil, key) if err = err2; err == nil && len(storeList) > 0 { storeIDs := make([]int, len(storeList)) for k, v := range storeList { diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 07ee953e6..1071d9435 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1993,7 +1993,7 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p } if len(userList) > 0 { - allStores, err := dao.GetStoreList(db, nil, nil, "") + allStores, err := dao.GetStoreList(db, nil, nil, nil, nil, "") if err != nil { return err } @@ -2167,7 +2167,7 @@ func SaveAndSendAlarmVendorSnapshot(ctx *jxcontext.Context, vendorIDs, storeIDs func SyncStoresCourierInfo(ctx *jxcontext.Context, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() - storeList2, err := dao.GetStoreList(db, storeIDs, nil, "") + storeList2, err := dao.GetStoreList(db, storeIDs, nil, nil, nil, "") var storeList []*model.Store for _, v := range storeList2 { if v.Status != model.StoreStatusDisabled { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 5c871e5ce..e3a26d67e 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -830,10 +830,6 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, sk } }() for _, storeID := range storeIDs { - fmt.Println(storeID) - for _, v := range skuBindInfosMap[storeID] { - fmt.Println(*v) - } skuIDs, err2 := updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosMap[storeID], false) if err = err2; err != nil { dao.Rollback(db) @@ -2886,7 +2882,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, skuIDs = append(skuIDs, k) } skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil) - storeList, err := dao.GetStoreList(db, nil, nil, "") + storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "") if err != nil && len(skuList) == 0 { return result, err } @@ -3059,12 +3055,18 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf return hint, err } -func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { +func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() var ( - result1 []interface{} + result1 []interface{} + cityCodes = []int{ + 530100, //昆明 + 430300, //湘潭市 + 510700, //绵阳市 + 520100, //贵阳市 + } ) - storeList, err := dao.GetStoreList(db, nil, nil, "") + storeList, err := dao.GetStoreList(db, nil, cityCodes, nil, nil, "") taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: @@ -3096,7 +3098,7 @@ func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, i for _, v := range skuName { skuNameMap[v.ID] = v.ID } - skuNameAndPlaceList, err2 := GetTopSkusByCityCode(ctx, v.CityCode, v.ID) + skuNameAndPlaceList, err2 := GetTopSkusByCityCode(ctx, v.CityCode, 0) if err2 != nil { return retVal, err2 } @@ -3110,17 +3112,18 @@ func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, i var skuBindInfoList []*StoreSkuBindInfo for _, vv := range skuNameAndPlaceList { if skuNameMap[vv.ID] != 0 { + storeSkuBindInfo := &StoreSkuBindInfo{ + StoreID: v.ID, + NameID: vv.ID, + // UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100, + IsFocus: 1, + IsSale: 0, + } priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) if err == nil && len(priceReferList) > 0 { - storeSkuBindInfo := &StoreSkuBindInfo{ - StoreID: v.ID, - NameID: vv.ID, - UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100, - IsFocus: 1, - IsSale: 0, - } - skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo) + storeSkuBindInfo.UnitPrice = priceReferList[0].MidUnitPrice * payPercentage / 100 } + skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo) } } retVal = skuBindInfoList @@ -3155,7 +3158,7 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync nameMap = make(map[int]*StoreSkuBindInfo) ) db := dao.GetDB() - storeList, err := dao.GetStoreList(db, nil, nil, "") + storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "") for _, v := range storeList { storeSkuList, _ := dao.GetStoreSkusAndSkuName(db, []int{v.ID}, skuIDs, nil) for _, vv := range storeSkuList { diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 8421a6506..34bcfa798 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -219,7 +219,7 @@ func TryAddStoreBossRole4User(ctx *jxcontext.Context, user *model.User) (err err if user.Type&model.UserTypeStoreBoss != 0 { userMobile := user.GetMobile() if userMobile != "" { - if storeList, err := dao.GetStoreList(dao.GetDB(), nil, []string{userMobile}, ""); err == nil && len(storeList) > 0 { + if storeList, err := dao.GetStoreList(dao.GetDB(), nil, nil, nil, []string{userMobile}, ""); err == nil && len(storeList) > 0 { roleList := make([]*authz.RoleInfo, len(storeList)) for k, v := range storeList { roleList[k] = autils.NewStoreBossRole(v.ID) diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 6fa312cd7..daffca4fe 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -146,6 +146,9 @@ func Init() { ScheduleTimerFunc("CreateStorePriceScore", func() { cms.CreateStorePriceScore(jxcontext.AdminCtx) }, createStorePriceTimeList) + ScheduleTimerFunc("AutoFocusStoreSkusForTopSkus", func() { + cms.AutoFocusStoreSkusForTopSkus(jxcontext.AdminCtx, true, true) + }, createStorePriceTimeList) } ScheduleTimerFunc("AutoSaleStoreSku", func() { cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil, false) diff --git a/business/jxstore/report/report.go b/business/jxstore/report/report.go index ca0b29060..312a1df26 100644 --- a/business/jxstore/report/report.go +++ b/business/jxstore/report/report.go @@ -102,7 +102,7 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn resultMap = make(map[int]map[int]*model.PriceReferSnapshot) resultCountryMap = make(map[int]*model.PriceReferSnapshot) ) - storeList, err := dao.GetStoreList(db, nil, nil, "") + storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "") if err != nil { return result, err } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 56a713cb3..8a76af7c0 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -422,7 +422,7 @@ func GetOpenedStoreCouriersByStoreID(db *DaoDB, storeID, vendorID int) (storeMap return storeMaps, nil } -func GetStoreList(db *DaoDB, idList []int, mobileList []string, shortRoleName string) (storeList []*model.Store, err error) { +func GetStoreList(db *DaoDB, idList, cityCodes, statuss []int, mobileList []string, shortRoleName string) (storeList []*model.Store, err error) { sql := ` SELECT t1.* FROM store t1 @@ -434,6 +434,14 @@ func GetStoreList(db *DaoDB, idList []int, mobileList []string, shortRoleName st sql += " AND t1.id IN (" + GenQuestionMarks(len(idList)) + ")" sqlParams = append(sqlParams, idList) } + if len(cityCodes) > 0 { + sql += " AND t1.city_code IN (" + GenQuestionMarks(len(cityCodes)) + ")" + sqlParams = append(sqlParams, cityCodes) + } + if len(statuss) > 0 { + sql += " AND t1.status IN (" + GenQuestionMarks(len(statuss)) + ")" + sqlParams = append(sqlParams, statuss) + } if len(mobileList) > 0 { sql += " AND (t1.tel1 IN (" + GenQuestionMarks(len(mobileList)) + ") OR t1.tel2 IN (" + GenQuestionMarks(len(mobileList)) + "))" sqlParams = append(sqlParams, mobileList, mobileList) diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 04638b07b..81a9659b1 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -626,3 +626,18 @@ func (c *StoreSkuController) FocusStoreSkusBySku() { return retVal, "", err }) } + +// @Title 自动关注畅销品 +// @Description 自动关注畅销品 +// @Param token header string true "认证token" +// @Param isAsync formData bool true "是否异步,缺省是同步" +// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /AutoFocusStoreSkusForTopSkus [post] +func (c *StoreSkuController) AutoFocusStoreSkusForTopSkus() { + c.callAutoFocusStoreSkusForTopSkus(func(params *tStoreSkuAutoFocusStoreSkusForTopSkusParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.AutoFocusStoreSkusForTopSkus(params.Ctx, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 86bfd00cc..5fb650f4b 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1665,6 +1665,15 @@ func init() { 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.ControllerComments{ + Method: "AutoFocusStoreSkusForTopSkus", + Router: `/AutoFocusStoreSkusForTopSkus`, + 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.ControllerComments{ Method: "CopyStoreSkus", From 3525a3ea56931cdeb98ac058114ec8a53dc0fc50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 15:14:15 +0800 Subject: [PATCH 28/32] =?UTF-8?q?=E6=8E=92=E9=99=A4=E6=AF=8F=E5=A4=A9?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 605af66c0..21b9f4eca 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -634,16 +634,18 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN if isAsync { task.SetFinishHook(func(task tasksch.ITask) { var noticeMsg string - if len(task.GetFailedList()) > 10 { - downloadURL, _, _ := WirteToExcelBySyncFailed(task) - noticeMsg = fmt.Sprintf("[详情点我]path1=%s\n", downloadURL) - } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { - if task.GetErr() != nil { - noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) + if ctx.GetUserName() != "jxadmin" { + if len(task.GetFailedList()) > 10 { + downloadURL, _, _ := WirteToExcelBySyncFailed(task) + noticeMsg = fmt.Sprintf("[详情点我]path1=%s\n", downloadURL) + } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { + if task.GetErr() != nil { + noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) + } + } + if authInfo, err := ctx.GetV2AuthInfo(); err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) } - } - if authInfo, err := ctx.GetV2AuthInfo(); err == nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) } }) } From fa899540f92ec34a7a3804c2bb7a341a78e3271f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 16:43:06 +0800 Subject: [PATCH 29/32] =?UTF-8?q?=E4=B8=AD=E4=BD=8D=E4=BB=B7=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E7=AE=97=E6=B3=95=E4=BF=AE=E6=94=B9=EF=BC=8C=E4=B9=98?= =?UTF-8?q?=E9=99=A4=E6=8D=A2=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 8 ++++---- business/jxstore/report/report.go | 5 ++++- business/model/dao/store.go | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index e3a26d67e..8d736c421 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2392,10 +2392,10 @@ func RefershStoreSkusMidPrice(ctx *jxcontext.Context, storeIDs []int) (err error return err } if len(priceReferList) > 0 { - if storeSku.UnitPrice > priceReferList[0].MidUnitPrice*payPercentage/100 { + if storeSku.UnitPrice > priceReferList[0].MidUnitPrice/payPercentage*100 { skuBindInfo := &StoreSkuBindInfo{ NameID: priceReferList[0].NameID, - UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100, + UnitPrice: priceReferList[0].MidUnitPrice / payPercentage * 100, } skuBindInfos = append(skuBindInfos, skuBindInfo) } @@ -3013,7 +3013,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf } priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{skuList[0].NameID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) if len(priceReferList) > 0 { - price = priceReferList[0].MidUnitPrice * payPercentage / 100 + price = priceReferList[0].MidUnitPrice / payPercentage * 100 } } skuBindSkuInfo := &StoreSkuBindSkuInfo{ @@ -3121,7 +3121,7 @@ func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhe } priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) if err == nil && len(priceReferList) > 0 { - storeSkuBindInfo.UnitPrice = priceReferList[0].MidUnitPrice * payPercentage / 100 + storeSkuBindInfo.UnitPrice = priceReferList[0].MidUnitPrice / payPercentage * 100 } skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo) } diff --git a/business/jxstore/report/report.go b/business/jxstore/report/report.go index 312a1df26..649b536c5 100644 --- a/business/jxstore/report/report.go +++ b/business/jxstore/report/report.go @@ -107,9 +107,12 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn return result, err } for _, v := range storeList { + if v.PayPercentage < 50 { + continue + } var tList []*tStoreSkuBindAndSkuName sql := ` - SELECT DISTINCT b.city_code, a.store_id, Round(a.unit_price/IF(b.pay_percentage < 50 , 70, b.pay_percentage) * 100) AS unit_price, c.name_id + SELECT DISTINCT b.city_code, a.store_id, Round(a.unit_price * IF(b.pay_percentage < 50 , 70, b.pay_percentage) / 100) AS unit_price, c.name_id FROM store_sku_bind a JOIN store b ON b.id = a.store_id AND b.deleted_at = ? AND b.status != ? JOIN sku c ON c.id = a.sku_id diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 8a76af7c0..a22c5e767 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -574,7 +574,7 @@ func GetStorePriceScore(db *DaoDB, storeIDs, vendorIDs []int, fromScore, toScore func GetStorePriceScoreSnapshot(db *DaoDB, snapDate time.Time) (storePriceScoreSnapshot []*model.StorePriceScoreSnapshot, err error) { sql := ` - SELECT c.store_id,ROUND(count(c.unit_price/IF(d.pay_percentage < 50 , 70, d.pay_percentage)*100 <= a.mid_unit_price or NULL)/count(*)*100,2) score + SELECT c.store_id,ROUND(count(c.unit_price * IF(d.pay_percentage < 50 , 70, d.pay_percentage) / 100 <= a.mid_unit_price or NULL)/count(*)*100,2) score FROM price_refer_snapshot a JOIN store_sku_bind c ON c.sku_id = a.sku_id AND c.status = ? AND c.deleted_at = ? JOIN store d ON c.store_id = d.id AND d.city_code = a.city_code AND d.deleted_at = ? AND d.status != ? From 4751a14f0f904102e97fcf720cbea01b3fe5939f Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 13 Jan 2020 17:53:06 +0800 Subject: [PATCH 30/32] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E6=97=B6=E5=9C=A8act=5Fstore=5Fsku=5Fmap=E8=A1=A8=E4=B8=AD?= =?UTF-8?q?=E8=AE=B0=E5=BD=95EarningPrice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 1 + 1 file changed, 1 insertion(+) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 49e3cf5b7..f006081ad 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -257,6 +257,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac } } if err2 == nil { + actSkuMap.EarningPrice = v.EarningPrice dao.WrapAddIDCULDEntity(actSkuMap, ctx.GetUserName()) actStoreSkuMapList = append(actStoreSkuMapList, actSkuMap) } From 0178156c655df8456575c02474ad17730362cda1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 13 Jan 2020 18:18:58 +0800 Subject: [PATCH 31/32] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 15 +++++++++++++-- business/model/api.go | 10 +++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index a8cb01875..3bf0b2b45 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -136,11 +136,22 @@ func (c *OrderManager) GetOrderInfo(ctx *jxcontext.Context, vendorOrderID string // 这里用QueryRows而不用QueryRow的原因是用QueryRow在这种情况下不能将数据读出,很奇怪。大概的原因是QueryRow对于GoodsOrderExt这种有嵌入的struct处理有问题 num, err := db.Raw(` - SELECT t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile + SELECT t3.*,ROUND(t3.shop_price/t3.count) avg_price, t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile FROM goods_order t1 LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id + JOIN ( + SELECT count(*) count,SUM(b.shop_price) - + IFNULL(SUM(c.sku_user_money+c.freight_user_money+c.afs_freight_money+c.box_money+c.tongcheng_freight_money+c.sku_box_money),0) shop_price,a.vendor_user_id,count(d.score < 3 or NULL) bad_comment_count + FROM goods_order a + JOIN order_sku b ON a.vendor_order_id = b.vendor_order_id AND a.vendor_id = b.vendor_id + LEFT JOIN afs_order c ON a.vendor_order_id = c.vendor_order_id AND c.vendor_id = a.vendor_id + LEFT JOIN jx_bad_comments d ON d.order_id = a.vendor_order_id AND d.order_flag = a.vendor_id + WHERE a.order_created_at BETWEEN ? AND NOW() + AND a.vendor_user_id = (SELECT vendor_user_id FROM goods_order WHERE vendor_order_id = ?) + GROUP BY a.vendor_user_id + )t3 ON t3.vendor_user_id = t1.vendor_user_id WHERE t1.vendor_order_id = ? AND vendor_id = ? - `, vendorOrderID, vendorID).QueryRows(&orders) + `, time.Now().AddDate(0, -1, 0), vendorOrderID, vendorOrderID, vendorID).QueryRows(&orders) if err == nil && num > 0 { order = orders[0] if isRefresh && vendorID == model.VendorIDJD { diff --git a/business/model/api.go b/business/model/api.go index 3e9cc32bb..7335631ae 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -39,9 +39,13 @@ type GoodsOrderExt struct { CityName string `json:"cityName"` PayPercentage int `json:"payPercentage"` - SkuInfo string `json:"skuInfo,omitempty"` - ShortSkuInfo `json:"-"` - SkuList []*ShortSkuInfo `json:"skuList,omitempty"` + SkuInfo string `json:"skuInfo,omitempty"` + ShortSkuInfo `json:"-"` + SkuList []*ShortSkuInfo `json:"skuList,omitempty"` + Count int `json:"count"` + ShopPrice int64 `json:"shopPrice"` + AvgPrice int64 `json:"avgPrice"` + BadCommentCount int `json:"badCommentCount"` } type OrderSkuExt struct { From f9e02c05fa89af48af3706f80711a7275ed52adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 14 Jan 2020 14:47:46 +0800 Subject: [PATCH 32/32] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=EF=BC=88beta=EF=BC=89-=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 1 + business/jxstore/cms/store_sku.go | 46 +++++++++--- business/jxstore/event/event.go | 43 +++++++++++ business/jxstore/misc/misc.go | 4 + business/model/const.go | 20 +++-- business/model/dao/event.go | 101 ++++++++++++++++++++++++++ business/model/event.go | 4 +- controllers/event.go | 37 ++++++++++ routers/commentsRouter_controllers.go | 9 +++ routers/router.go | 6 ++ 10 files changed, 254 insertions(+), 17 deletions(-) create mode 100644 business/model/dao/event.go create mode 100644 controllers/event.go diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index a9e885025..55acc3114 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -143,6 +143,7 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) { "supplementType": model.SupplementTypeName, "operateType": model.OperateTypeName, "thingType": model.ThingTypeName, + "apiFunctionName": model.ApiFunctionName, }, } } diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 8d736c421..8aa2438ee 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -13,6 +13,8 @@ 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" @@ -1037,7 +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(), "", "") + 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)) @@ -1061,9 +1063,10 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } } } else { + beforeMsg := *v skuBind = &v.StoreSkuBind if skuBindInfo.IsFocus == -1 && isCanChangePrice { - // err = AddEventDetail(model.OperateDelete, skuBind.SkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "") + 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, @@ -1117,12 +1120,13 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs skuBind.StatusSaleEnd = skuBindInfo.StatusSaleEnd } } - // if updateFieldMap != nil { - // afterData := utils.MustMarshal(updateFieldMap) - // mapresult := refutil.FindMapAndStructMixed(updateFieldMap, skuBind) - // beforeData := utils.MustMarshal(mapresult) - // AddEventDetail(model.OperateUpdate, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), string(beforeData), string(afterData)) - // } + if len(updateFieldMap) > 0 { + mapAfter := refutil.FindMapAndStructMixed(updateFieldMap, skuBind) + afterData := utils.MustMarshal(mapAfter) + mapBefore := refutil.FindMapAndStructMixed(updateFieldMap, beforeMsg) + beforeData := utils.MustMarshal(mapBefore) + err = 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 @@ -1225,6 +1229,7 @@ func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBind for _, skuBind := range storeSkuList { if v := skuBindSkuInfosMap[skuBind.SkuID]; v != nil && v.IsSale != 0 { if !(!utils.IsTimeZero(autoSaleTime) && ignoreDontSale && skuBind.Status == model.StoreSkuBindStatusDontSale) { + statusResult := skuBind.Status if v.IsSale == -1 || !utils.IsTimeZero(autoSaleTime) { skuBind.Status = model.StoreSkuBindStatusDontSale } else if v.IsSale == 1 { @@ -1243,6 +1248,21 @@ func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBind } else { kvs["AutoSaleAt"] = autoSaleTime } + var status int + if v.IsSale == -1 { + status = model.StoreSkuBindStatusDontSale + } else { + status = model.StoreSkuBindStatusNormal + } + if status != statusResult { + mapAfter := make(map[string]interface{}) + mapAfter["Status"] = status + afterData := utils.MustMarshal(mapAfter) + mapBefore := make(map[string]interface{}) + mapBefore["Status"] = statusResult + beforeData := utils.MustMarshal(mapBefore) + err = AddEventDetail(model.OperateUpdate, v.SkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), string(beforeData), string(afterData)) + } if num, err = dao.UpdateEntityLogically(db, skuBind, kvs, userName, nil); err != nil { dao.Rollback(db) return nil, err @@ -1300,7 +1320,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co if copyMode != CopyStoreSkuModeFresh && copyMode != CopyStoreSkuModeUpdate && copyMode != CopyStoreSkuModeUpdatePrice { return 0, fmt.Errorf("不支持的拷贝模式:%s", copyMode) } - db := dao.GetDB() fromStore, err := checkStoreExisting(db, fromStoreID) if err != nil { @@ -1559,6 +1578,15 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co globals.SugarLogger.Debugf("CopyStoreSkus fromStoreID:%d, toStoreID:%d, trackInfo:%s num3:%d", fromStoreID, toStoreID, ctx.GetTrackInfo(), num2) dao.Commit(db) } + mapAfter := make(map[string]interface{}) + mapAfter["ToStoreIDs"] = toStoreIDs + mapAfter["CopyMode"] = copyMode + mapAfter["IsScale"] = isScale + afterData := utils.MustMarshal(mapAfter) + mapBefore := make(map[string]interface{}) + mapBefore["FromStoreID"] = fromStoreID + beforeData := utils.MustMarshal(mapBefore) + err = AddEventDetail(model.OperateCopyStoreSkus, 0, model.ThingTypeSku, fromStoreID, ctx.GetTrackInfo(), string(beforeData), string(afterData)) return num, errList.GetErrListAsOne() } diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index 7a356cfe4..ebd7b5ab2 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -4,6 +4,9 @@ import ( "strings" "time" + "git.rosy.net.cn/baseapi/utils" + + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/model" @@ -52,3 +55,43 @@ func AddOperateEventDetail(operateEventDetail *model.OperateEventDetail) (err er dao.Commit(db) return err } + +func DeleteOperateEventAndDetail(ctx *jxcontext.Context, deleteTime time.Time) (err error) { + db := dao.GetDB() + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + dao.DeleteOperateEventDetail(db, deleteTime) + dao.DeleteOperateEvent(db, deleteTime) + dao.Commit(db) + return err +} + +func GetOperateEvents(ctx *jxcontext.Context, apiFunction, name string, operateType int, skuIDs, storeIDs []int, fromTime, toTime string, offset, pageSize int) (pageInfo *model.PagedInfo, err error) { + var ( + fromTimeP time.Time + toTimeP time.Time + ) + db := dao.GetDB() + if fromTime != "" { + fromTimeP = utils.Str2Time(fromTime) + } + if toTime != "" { + toTimeP = utils.Str2Time(toTime) + } + pageSize = jxutils.FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + operateEventExt, totalCount, err := dao.GetOperateEvents(db, apiFunction, name, operateType, skuIDs, storeIDs, fromTimeP, toTimeP, offset, pageSize) + if err != nil { + return pageInfo, err + } + pageInfo = &model.PagedInfo{ + Data: operateEventExt, + TotalCount: totalCount, + } + return pageInfo, err +} diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index daffca4fe..eed3456e2 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -6,6 +6,8 @@ import ( "sync" "time" + "git.rosy.net.cn/jx-callback/business/jxstore/event" + "git.rosy.net.cn/jx-callback/business/jxstore/report" "git.rosy.net.cn/baseapi/utils" @@ -226,6 +228,8 @@ func doDailyWork() { orderman.RefreshOrdersWithoutJxStoreID(jxcontext.AdminCtx, "", "", true, true) //刷新京东门店的等级 cms.RefreshJdLevel(jxcontext.AdminCtx) + //删除操作日志 + event.DeleteOperateEventAndDetail(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -7)) } func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) { diff --git a/business/model/const.go b/business/model/const.go index 00b9bf488..f3292b7be 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -106,9 +106,10 @@ var ( } OperateTypeName = map[int]string{ - OperateAdd: "新增", - OperateUpdate: "修改", - OperateDelete: "删除", + OperateAdd: "新增", + OperateUpdate: "修改", + OperateDelete: "删除", + OperateCopyStoreSkus: "复制门店商品", } ThingTypeName = map[int]string{ @@ -118,6 +119,12 @@ var ( ThingTypeStore: "门店", } + ApiFunctionName = map[string]string{ + "UpdateStoresSkus": "门店商品管理", + "UpdateStoresSkusSale": "门店商品可售状态修改", + "CopyStoreSkus": "京西门店商品复制到京西", + } + MultiStoresVendorMap = map[int]int{ VendorIDJD: 1, VendorIDMTWM: 0, @@ -255,9 +262,10 @@ const ( ) const ( - OperateAdd = 1 //新增操作 - OperateUpdate = 2 //修改操作 - OperateDelete = 4 //删除操作 + OperateAdd = 2 //新增操作 + OperateUpdate = 1 //修改操作 + OperateDelete = 4 //删除操作 + OperateCopyStoreSkus = 3 //复制门店商品 ) const ( diff --git a/business/model/dao/event.go b/business/model/dao/event.go new file mode 100644 index 000000000..941be3e50 --- /dev/null +++ b/business/model/dao/event.go @@ -0,0 +1,101 @@ +package dao + +import ( + "time" + + "git.rosy.net.cn/baseapi/utils" + + "git.rosy.net.cn/jx-callback/business/model" +) + +type OperateEventExt struct { + model.OperateEvent + Detail []*model.OperateEventDetail + Name string `json:"name"` +} + +func DeleteOperateEventDetail(db *DaoDB, deleteTime time.Time) (err error) { + sql := ` + DELETE FROM a + USING operate_event_detail a,operate_event b + WHERE a.access_uuid = b.access_uuid + AND b.created_at < ? + ` + sqlParams := []interface{}{ + deleteTime, + } + _, err = ExecuteSQL(db, sql, sqlParams...) + return err +} + +func DeleteOperateEvent(db *DaoDB, deleteTime time.Time) (err error) { + sql := ` + DELETE FROM operate_event + WHERE created_at < ? + ` + sqlParams := []interface{}{ + deleteTime, + } + _, err = ExecuteSQL(db, sql, sqlParams...) + return err +} + +func GetOperateEvents(db *DaoDB, apiFunction, name string, operateType int, skuIDs, storeIDs []int, fromTime, toTime time.Time, offset, pageSize int) (operateEventExt []*OperateEventExt, totalCount int, err error) { + sql := ` + SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*, c.name + FROM operate_event a + LEFT JOIN operate_event_detail b ON a.access_uuid = b.access_uuid + LEFT JOIN user c ON c.user_id = a.user_id + WHERE 1=1 + ` + sqlParams := []interface{}{} + if name != "" { + sql += " AND c.name LIKE ?" + sqlParams = append(sqlParams, "%"+name+"%") + } + if !utils.IsTimeZero(fromTime) { + sql += " AND a.created_at >= ?" + sqlParams = append(sqlParams, fromTime) + } + if !utils.IsTimeZero(toTime) { + sql += " AND a.created_at <= ?" + sqlParams = append(sqlParams, toTime) + } + if apiFunction != "" { + sql += " AND a.api_function = ?" + sqlParams = append(sqlParams, apiFunction) + } + if operateType != 0 { + sql += " AND b.operate_type = ?" + sqlParams = append(sqlParams, operateType) + } + if len(skuIDs) > 0 { + sql += " AND b.thing_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" + sqlParams = append(sqlParams, skuIDs) + } + if len(storeIDs) > 0 { + sql += " AND b.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" + sqlParams = append(sqlParams, storeIDs) + } + sql += " LIMIT ? OFFSET ?" + sqlParams = append(sqlParams, pageSize, offset) + Begin(db) + defer Commit(db) + if err = GetRows(db, &operateEventExt, sql, sqlParams...); err == nil { + totalCount = GetLastTotalRowCount(db) + } + for _, v := range operateEventExt { + var details []*model.OperateEventDetail + sql := ` + SELECT * + FROM operate_event_detail + WHERE access_uuid = ? + ` + sqlParams := []interface{}{ + v.AccessUUID, + } + err = GetRows(db, &details, sql, sqlParams...) + v.Detail = details + } + return operateEventExt, totalCount, err +} diff --git a/business/model/event.go b/business/model/event.go index 697dc803a..abb79ba88 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(255)" json:"beforeData"` - AfterData string `orm:"size(255)" json:"afterData"` + BeforeData string `orm:"size(3200)" json:"beforeData"` + AfterData string `orm:"size(3200)" json:"afterData"` } func (v *OperateEventDetail) TableIndex() [][]string { diff --git a/controllers/event.go b/controllers/event.go new file mode 100644 index 000000000..09cb331a5 --- /dev/null +++ b/controllers/event.go @@ -0,0 +1,37 @@ +package controllers + +import ( + "git.rosy.net.cn/jx-callback/business/jxstore/event" + "git.rosy.net.cn/jx-callback/business/jxutils" + "github.com/astaxie/beego" +) + +// 操作事件明细相关API +type EventController struct { + beego.Controller +} + +// @Title 查询操作日志事件明细 +// @Description 查询操作日志事件明细 +// @Param token header string true "认证token" +// @Param apiFunction query string false "功能名" +// @Param name query string false "操作人姓名,支持模糊查询" +// @Param operateType query int false "操作类型,1为修改,2为新增,4为删除" +// @Param skuIDs query string false "商品ID列表" +// @Param storeIDs query string false "门店ID列表" +// @Param fromTime query string false "开始日期(包含),格式(2006-01-02 00:00:00)" +// @Param toTime query string false "结束日期(包含),格式(2006-01-02 00:00:00)" +// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)" +// @Param pageSize query int false "门店列表页大小(缺省为30)" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetOperateEvents [get] +func (c *EventController) GetOperateEvents() { + var storeIDList, skuIDList []int + c.callGetOperateEvents(func(params *tEventGetOperateEventsParams) (retVal interface{}, errCode string, err error) { + if jxutils.Strings2Objs(params.StoreIDs, &storeIDList, params.SkuIDs, &skuIDList); err == nil { + retVal, err = event.GetOperateEvents(params.Ctx, params.ApiFunction, params.Name, params.OperateType, skuIDList, storeIDList, params.FromTime, params.ToTime, params.Offset, params.PageSize) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 5fb650f4b..dd3386fdb 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -394,6 +394,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:EventController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:EventController"], + beego.ControllerComments{ + Method: "GetOperateEvents", + Router: `/GetOperateEvents`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FinancialController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FinancialController"], beego.ControllerComments{ Method: "GetOrdersFinancial", diff --git a/routers/router.go b/routers/router.go index b35e7e0bf..4c5f056aa 100644 --- a/routers/router.go +++ b/routers/router.go @@ -136,6 +136,11 @@ func init() { &controllers.YongHuiController{}, ), ), + beego.NSNamespace("/event", + beego.NSInclude( + &controllers.EventController{}, + ), + ), ) beego.AddNamespace(ns) @@ -149,6 +154,7 @@ func init() { beego.AutoRouter(&controllers.WeixinController{}) beego.AutoRouter(&controllers.DingDingController{}) beego.AutoRouter(&controllers.WXPayController{}) + beego.AutoRouter(&controllers.EventController{}) // 如下都是用于检测存活的空接口 beego.Any("/", func(ctx *beecontext.Context) {