From a660f1940568f62f12ad9566414e52dcc294335a 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, 21 Jan 2020 09:22:45 +0800 Subject: [PATCH 01/28] =?UTF-8?q?=E7=88=86=E5=93=81=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 8 +- business/jxstore/cms/store.go | 12 +- business/jxstore/cms/store_sku.go | 208 +++++++++++------- business/jxstore/cms/sync.go | 2 +- business/jxstore/cms/sync_store.go | 2 +- business/model/dao/store.go | 10 +- business/model/dao/store_sku.go | 2 +- .../partner/purchase/mtwm/order_comment.go | 2 +- 8 files changed, 146 insertions(+), 100 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index f61780c34..781aa09fb 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -328,7 +328,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { db := dao.GetDB() switch configType { case model.ConfigTypePricePack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -339,7 +339,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { } } case model.ConfigTypeFreightPack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -419,7 +419,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } switch configType { case model.ConfigTypePricePack: - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err != nil { dao.Rollback(db) return "", err @@ -438,7 +438,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } case model.ConfigTypeFreightPack: dao.Commit(db) - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index c83fa4184..88ad4126c 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -398,7 +398,7 @@ func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]inte } func setStoreMapInfo(ctx *jxcontext.Context, db *dao.DaoDB, storesInfo *StoresInfo, storeIDs []int, briefLevel int) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -1660,7 +1660,7 @@ func formalizeStore4Courier(storeDetail *dao.StoreDetail2) *dao.StoreDetail2 { func ExportShopsHealthInfo(ctx *jxcontext.Context, vendorIDs, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() vendorID := model.VendorIDEBAI - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } @@ -1748,7 +1748,7 @@ func GetCorporationInfo(ctx *jxcontext.Context, licenceCode string) (corporation func GetStoresVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs, storeIDs []int) (vendorStoreSnapshotList []*model.VendorStoreSnapshot, err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1795,7 +1795,7 @@ func getCurrentSnapshotAt(now time.Time) (snapshotAt time.Time) { } func updateVendorStoreStatusBySnapshot(db *dao.DaoDB, curSnapshotList []*model.VendorStoreSnapshot) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -2379,7 +2379,7 @@ func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, vendorOrgCode string, defer file1.Close() db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { @@ -2644,7 +2644,7 @@ func CreateStorePriceScore(ctx *jxcontext.Context) (err error) { func RefreshJdLevel(ctx *jxcontext.Context) (err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusOpened, -1, "") + storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusOpened, -1, "") if len(storeMapList) > 0 { dao.Begin(db) defer func() { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 92fa2f3f2..9abd4704f 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -169,10 +169,13 @@ type tUpdateStoresSkus struct { } type tStoreSkusSecKill struct { - StoreID int `orm:"column(store_id)"` - VendorID int `orm:"column(vendor_id)"` - SecKillCount int - SecKillCount2 int + StoreID int `orm:"column(store_id)"` + VendorID int `orm:"column(vendor_id)"` + SecKillCount int + SecKillCount2 int + OperatorPhone string + MarketManPhone string + NoticeMsg string } const ( @@ -656,7 +659,7 @@ func updateSaleInfo4StoreSkuName(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } func getValidStoreVendorMap(db *dao.DaoDB, storeIDs []int) (realVendorMap map[int]int, err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1982,7 +1985,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i return "", fmt.Errorf("此功能当前只支持京东到家平台") } db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return "", err } @@ -3352,43 +3355,46 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i // 1. 如果爆品低于8个,报警 type1 // 2. 爆品价格低于1元商品小于5个,报警 type2 var ( - type1Count = 8 - type2Count = 5 + type1Count = 8 + type2Count = 5 + ddMsgresult []interface{} ) db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, model.StoreStatusOpened, model.StoreIsSyncAll, "") - pTask := tasksch.NewParallelTask("SendSeckillSkusCountMsg", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*model.StoreMap) - var type1, type2 int - switch store.VendorID { - case model.VendorIDEBAI: - result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) - for _, v := range result { - type1++ - if v.SalePrice < 1 { - type2++ - } - } - case model.VendorIDMTWM: - handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) - remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) - if err != nil { - return retVal, err - } - for _, v := range remoteSkuList { - for _, vv := range v.SkuList { - if vv.IsSpecialty == 1 { - type1++ - } - if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusOpened, model.StoreIsSyncAll, "") + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + store := batchItemList[0].(*model.StoreMap) + var type1, type2 int + switch store.VendorID { + case model.VendorIDEBAI: + result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) + for _, v := range result { + type1++ + if v.SalePrice < 1 { type2++ } } - } - case model.VendorIDJD: - var storeSecKill []*tStoreSkusSecKill - sql := ` + case model.VendorIDMTWM: + handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) + remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) + if err != nil { + return retVal, err + } + for _, v := range remoteSkuList { + for _, vv := range v.SkuList { + if vv.IsSpecialty == 1 { + type1++ + } + if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + type2++ + } + } + } + case model.VendorIDJD: + var storeSecKill []*tStoreSkusSecKill + sql := ` SELECT t1.store_id,count(*) sec_kill_count, count(t1.price < 100 or NULL) sec_kill_count2 FROM( SELECT a.store_id, a.sku_id, d.type, MIN(b.act_price) price @@ -3406,60 +3412,96 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i GROUP BY 1,2,3)t1 GROUP BY 1 ` - sqlParams := []interface{}{ - store.StoreID, store.VendorID, - model.ActSkuSecKill, model.StoreSkuBindStatusNormal, - utils.DefaultTimeValue, + sqlParams := []interface{}{ + store.StoreID, store.VendorID, + model.ActSkuSecKill, model.StoreSkuBindStatusNormal, + utils.DefaultTimeValue, + } + err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) + if len(storeSecKill) > 0 { + type1 = storeSecKill[0].SecKillCount + type2 = storeSecKill[0].SecKillCount2 + } else { + type1 = 0 + type2 = 0 + } } - err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) - if len(storeSecKill) > 0 { - type1 = storeSecKill[0].SecKillCount - type2 = storeSecKill[0].SecKillCount2 + if type1 < type1Count || type2 < type2Count { + storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) + var ( + operatorName string + operatorPhone string + type1Str = "爆品数量低于8个!" + type2Str = "爆品价格小于1元的爆品数量低于5个!" + typeResult = "" + ) + if storeDetail.OperatorPhone != "" { + operatorName = storeDetail.OperatorName + operatorPhone = storeDetail.OperatorPhone + } else if storeDetail.OperatorPhone2 != "" { + operatorName = storeDetail.OperatorName2 + operatorPhone = storeDetail.OperatorPhone2 + } + if type1 < type1Count { + typeResult += type1Str + } + if type2 < type2Count { + typeResult += type2Str + } + var result = &tStoreSkusSecKill{} + noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]\n", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) + result.OperatorPhone = operatorPhone + result.MarketManPhone = storeDetail.MarketManPhone + result.NoticeMsg = noticeMsg + retVal = []*tStoreSkusSecKill{result} + } + return retVal, err + } + taskParallel := tasksch.NewParallelTask("获取各平台爆品数量", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, storeList) + tasksch.HandleTask(taskParallel, task, true).Run() + ddMsgresult, err = taskParallel.GetResult(0) + case 1: + var ( + operaterMap = make(map[string]string) + marketMap = make(map[string]string) + ) + for _, v := range ddMsgresult { + ddm := v.(*tStoreSkusSecKill) + if operaterMap[ddm.OperatorPhone] != "" { + operaterMap[ddm.OperatorPhone] += ddm.NoticeMsg } else { - type1 = 0 - type2 = 0 + operaterMap[ddm.OperatorPhone] = ddm.NoticeMsg + } + if marketMap[ddm.MarketManPhone] != "" { + marketMap[ddm.MarketManPhone] += ddm.NoticeMsg + } else { + marketMap[ddm.MarketManPhone] = ddm.NoticeMsg } } - if type1 < type1Count || type2 < type2Count { - storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) - var ( - operatorName string - operatorPhone string - type1Str = "爆品数量低于8个!" - type2Str = "爆品价格小于1元的爆品数量低于5个!" - typeResult = "" - ) - if storeDetail.OperatorPhone != "" { - operatorName = storeDetail.OperatorName - operatorPhone = storeDetail.OperatorPhone - } else if storeDetail.OperatorPhone2 != "" { - operatorName = storeDetail.OperatorName2 - operatorPhone = storeDetail.OperatorPhone2 - } - if type1 < type1Count { - typeResult += type1Str - } - if type2 < type2Count { - typeResult += type2Str - } - noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) - globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", noticeMsg) - user, err := dao.GetUserByID(db, "mobile", operatorPhone) + for k, v := range operaterMap { + user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", noticeMsg) - } - user2, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone) - if err == nil && user2 != nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user2.UserID, "警告!门店爆品数量异常!", noticeMsg) + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) } - return retVal, err - }, storeList) - tasksch.HandleTask(pTask, nil, true).Run() + for k, v := range marketMap { + user, err := dao.GetUserByID(db, "mobile", k) + if user != nil && err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) + } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) + } + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 3) + tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { - _, err = pTask.GetResult(0) + _, err = taskSeq.GetResult(0) + hint = "1" } else { - hint = pTask.GetID() + hint = taskSeq.GetID() } return hint, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 99d8c8b0c..0c8aa4aeb 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -598,7 +598,7 @@ func (v *VendorSync) AmendAndPruneStoreStuff(ctx *jxcontext.Context, vendorIDs [ 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 { + if storeMapList, err = dao.GetStoresMapList2(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "", mustDirty); err != nil { return nil, "", err } if len(storeMapList) == 0 { diff --git a/business/jxstore/cms/sync_store.go b/business/jxstore/cms/sync_store.go index 311b34ed3..dcb95dc1d 100644 --- a/business/jxstore/cms/sync_store.go +++ b/business/jxstore/cms/sync_store.go @@ -16,7 +16,7 @@ func OpenRemoteStoreByJxStatus(ctx *jxcontext.Context, vendorIDs, storeIDs []int if !isForce { status = model.StoreStatusClosed } - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, status, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, status, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 28cf4cd52..3d6e42a8b 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -211,7 +211,7 @@ func GetStoreCourierList(db *DaoDB, storeIDs []int, status, auditStatus int) (co return nil, err } -func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { +func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { sql := ` SELECT t1.* FROM store_map t1 @@ -230,6 +230,10 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" sqlParams = append(sqlParams, storeIDs) } + if len(storeStatuss) > 0 { + sql += " AND t2.status IN (" + GenQuestionMarks(len(storeStatuss)) + ")" + sqlParams = append(sqlParams, storeStatuss) + } if status != model.StoreStatusAll { sql += " AND t1.status = ?" sqlParams = append(sqlParams, status) @@ -252,8 +256,8 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, return nil, err } -func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { - return GetStoresMapList2(db, vendorIDs, storeIDs, status, isSync, pricePack, false) +func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { + return GetStoresMapList2(db, vendorIDs, storeIDs, storeStatuss, status, isSync, pricePack, false) } func StoreMapList2Map(storeMapList []*model.StoreMap) (storeMapMap map[int][]*model.StoreMap) { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 69d058486..0dda236c5 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1235,7 +1235,7 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI vendorIDs = []int{actVendorID} } } else { - storeMapList, err := GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } diff --git a/business/partner/purchase/mtwm/order_comment.go b/business/partner/purchase/mtwm/order_comment.go index 4d3056ea5..5fbc55e7e 100644 --- a/business/partner/purchase/mtwm/order_comment.go +++ b/business/partner/purchase/mtwm/order_comment.go @@ -44,7 +44,7 @@ func formalizeTagList(mtwmTagList string) (outTagList string) { } func (c *PurchaseHandler) RefreshComment(fromTime, toTime time.Time) (err error) { - storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err != nil { return err } From ccf58a9a7c97e2a497504de3971d09784a36af51 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, 21 Jan 2020 09:22:45 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E7=88=86=E5=93=81=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 8 +- business/jxstore/cms/store.go | 12 +- business/jxstore/cms/store_sku.go | 208 +++++++++++------- business/jxstore/cms/sync.go | 2 +- business/jxstore/cms/sync_store.go | 2 +- business/model/dao/store.go | 10 +- business/model/dao/store_sku.go | 2 +- .../partner/purchase/mtwm/order_comment.go | 2 +- 8 files changed, 146 insertions(+), 100 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index f61780c34..781aa09fb 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -328,7 +328,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { db := dao.GetDB() switch configType { case model.ConfigTypePricePack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -339,7 +339,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { } } case model.ConfigTypeFreightPack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -419,7 +419,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } switch configType { case model.ConfigTypePricePack: - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err != nil { dao.Rollback(db) return "", err @@ -438,7 +438,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } case model.ConfigTypeFreightPack: dao.Commit(db) - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 474284165..71b2f7e7c 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -398,7 +398,7 @@ func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]inte } func setStoreMapInfo(ctx *jxcontext.Context, db *dao.DaoDB, storesInfo *StoresInfo, storeIDs []int, briefLevel int) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -1661,7 +1661,7 @@ func formalizeStore4Courier(storeDetail *dao.StoreDetail2) *dao.StoreDetail2 { func ExportShopsHealthInfo(ctx *jxcontext.Context, vendorIDs, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() vendorID := model.VendorIDEBAI - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } @@ -1749,7 +1749,7 @@ func GetCorporationInfo(ctx *jxcontext.Context, licenceCode string) (corporation func GetStoresVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs, storeIDs []int) (vendorStoreSnapshotList []*model.VendorStoreSnapshot, err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1796,7 +1796,7 @@ func getCurrentSnapshotAt(now time.Time) (snapshotAt time.Time) { } func updateVendorStoreStatusBySnapshot(db *dao.DaoDB, curSnapshotList []*model.VendorStoreSnapshot) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -2380,7 +2380,7 @@ func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, vendorOrgCode string, defer file1.Close() db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { @@ -2645,7 +2645,7 @@ func CreateStorePriceScore(ctx *jxcontext.Context) (err error) { func RefreshJdLevel(ctx *jxcontext.Context) (err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusOpened, -1, "") + storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusOpened, -1, "") if len(storeMapList) > 0 { dao.Begin(db) defer func() { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 92fa2f3f2..9abd4704f 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -169,10 +169,13 @@ type tUpdateStoresSkus struct { } type tStoreSkusSecKill struct { - StoreID int `orm:"column(store_id)"` - VendorID int `orm:"column(vendor_id)"` - SecKillCount int - SecKillCount2 int + StoreID int `orm:"column(store_id)"` + VendorID int `orm:"column(vendor_id)"` + SecKillCount int + SecKillCount2 int + OperatorPhone string + MarketManPhone string + NoticeMsg string } const ( @@ -656,7 +659,7 @@ func updateSaleInfo4StoreSkuName(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } func getValidStoreVendorMap(db *dao.DaoDB, storeIDs []int) (realVendorMap map[int]int, err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1982,7 +1985,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i return "", fmt.Errorf("此功能当前只支持京东到家平台") } db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return "", err } @@ -3352,43 +3355,46 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i // 1. 如果爆品低于8个,报警 type1 // 2. 爆品价格低于1元商品小于5个,报警 type2 var ( - type1Count = 8 - type2Count = 5 + type1Count = 8 + type2Count = 5 + ddMsgresult []interface{} ) db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, model.StoreStatusOpened, model.StoreIsSyncAll, "") - pTask := tasksch.NewParallelTask("SendSeckillSkusCountMsg", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*model.StoreMap) - var type1, type2 int - switch store.VendorID { - case model.VendorIDEBAI: - result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) - for _, v := range result { - type1++ - if v.SalePrice < 1 { - type2++ - } - } - case model.VendorIDMTWM: - handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) - remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) - if err != nil { - return retVal, err - } - for _, v := range remoteSkuList { - for _, vv := range v.SkuList { - if vv.IsSpecialty == 1 { - type1++ - } - if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusOpened, model.StoreIsSyncAll, "") + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + store := batchItemList[0].(*model.StoreMap) + var type1, type2 int + switch store.VendorID { + case model.VendorIDEBAI: + result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) + for _, v := range result { + type1++ + if v.SalePrice < 1 { type2++ } } - } - case model.VendorIDJD: - var storeSecKill []*tStoreSkusSecKill - sql := ` + case model.VendorIDMTWM: + handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) + remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) + if err != nil { + return retVal, err + } + for _, v := range remoteSkuList { + for _, vv := range v.SkuList { + if vv.IsSpecialty == 1 { + type1++ + } + if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + type2++ + } + } + } + case model.VendorIDJD: + var storeSecKill []*tStoreSkusSecKill + sql := ` SELECT t1.store_id,count(*) sec_kill_count, count(t1.price < 100 or NULL) sec_kill_count2 FROM( SELECT a.store_id, a.sku_id, d.type, MIN(b.act_price) price @@ -3406,60 +3412,96 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i GROUP BY 1,2,3)t1 GROUP BY 1 ` - sqlParams := []interface{}{ - store.StoreID, store.VendorID, - model.ActSkuSecKill, model.StoreSkuBindStatusNormal, - utils.DefaultTimeValue, + sqlParams := []interface{}{ + store.StoreID, store.VendorID, + model.ActSkuSecKill, model.StoreSkuBindStatusNormal, + utils.DefaultTimeValue, + } + err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) + if len(storeSecKill) > 0 { + type1 = storeSecKill[0].SecKillCount + type2 = storeSecKill[0].SecKillCount2 + } else { + type1 = 0 + type2 = 0 + } } - err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) - if len(storeSecKill) > 0 { - type1 = storeSecKill[0].SecKillCount - type2 = storeSecKill[0].SecKillCount2 + if type1 < type1Count || type2 < type2Count { + storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) + var ( + operatorName string + operatorPhone string + type1Str = "爆品数量低于8个!" + type2Str = "爆品价格小于1元的爆品数量低于5个!" + typeResult = "" + ) + if storeDetail.OperatorPhone != "" { + operatorName = storeDetail.OperatorName + operatorPhone = storeDetail.OperatorPhone + } else if storeDetail.OperatorPhone2 != "" { + operatorName = storeDetail.OperatorName2 + operatorPhone = storeDetail.OperatorPhone2 + } + if type1 < type1Count { + typeResult += type1Str + } + if type2 < type2Count { + typeResult += type2Str + } + var result = &tStoreSkusSecKill{} + noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]\n", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) + result.OperatorPhone = operatorPhone + result.MarketManPhone = storeDetail.MarketManPhone + result.NoticeMsg = noticeMsg + retVal = []*tStoreSkusSecKill{result} + } + return retVal, err + } + taskParallel := tasksch.NewParallelTask("获取各平台爆品数量", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, storeList) + tasksch.HandleTask(taskParallel, task, true).Run() + ddMsgresult, err = taskParallel.GetResult(0) + case 1: + var ( + operaterMap = make(map[string]string) + marketMap = make(map[string]string) + ) + for _, v := range ddMsgresult { + ddm := v.(*tStoreSkusSecKill) + if operaterMap[ddm.OperatorPhone] != "" { + operaterMap[ddm.OperatorPhone] += ddm.NoticeMsg } else { - type1 = 0 - type2 = 0 + operaterMap[ddm.OperatorPhone] = ddm.NoticeMsg + } + if marketMap[ddm.MarketManPhone] != "" { + marketMap[ddm.MarketManPhone] += ddm.NoticeMsg + } else { + marketMap[ddm.MarketManPhone] = ddm.NoticeMsg } } - if type1 < type1Count || type2 < type2Count { - storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) - var ( - operatorName string - operatorPhone string - type1Str = "爆品数量低于8个!" - type2Str = "爆品价格小于1元的爆品数量低于5个!" - typeResult = "" - ) - if storeDetail.OperatorPhone != "" { - operatorName = storeDetail.OperatorName - operatorPhone = storeDetail.OperatorPhone - } else if storeDetail.OperatorPhone2 != "" { - operatorName = storeDetail.OperatorName2 - operatorPhone = storeDetail.OperatorPhone2 - } - if type1 < type1Count { - typeResult += type1Str - } - if type2 < type2Count { - typeResult += type2Str - } - noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) - globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", noticeMsg) - user, err := dao.GetUserByID(db, "mobile", operatorPhone) + for k, v := range operaterMap { + user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", noticeMsg) - } - user2, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone) - if err == nil && user2 != nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user2.UserID, "警告!门店爆品数量异常!", noticeMsg) + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) } - return retVal, err - }, storeList) - tasksch.HandleTask(pTask, nil, true).Run() + for k, v := range marketMap { + user, err := dao.GetUserByID(db, "mobile", k) + if user != nil && err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) + } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) + } + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 3) + tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { - _, err = pTask.GetResult(0) + _, err = taskSeq.GetResult(0) + hint = "1" } else { - hint = pTask.GetID() + hint = taskSeq.GetID() } return hint, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 99d8c8b0c..0c8aa4aeb 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -598,7 +598,7 @@ func (v *VendorSync) AmendAndPruneStoreStuff(ctx *jxcontext.Context, vendorIDs [ 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 { + if storeMapList, err = dao.GetStoresMapList2(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "", mustDirty); err != nil { return nil, "", err } if len(storeMapList) == 0 { diff --git a/business/jxstore/cms/sync_store.go b/business/jxstore/cms/sync_store.go index 311b34ed3..dcb95dc1d 100644 --- a/business/jxstore/cms/sync_store.go +++ b/business/jxstore/cms/sync_store.go @@ -16,7 +16,7 @@ func OpenRemoteStoreByJxStatus(ctx *jxcontext.Context, vendorIDs, storeIDs []int if !isForce { status = model.StoreStatusClosed } - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, status, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, status, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 28cf4cd52..3d6e42a8b 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -211,7 +211,7 @@ func GetStoreCourierList(db *DaoDB, storeIDs []int, status, auditStatus int) (co return nil, err } -func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { +func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { sql := ` SELECT t1.* FROM store_map t1 @@ -230,6 +230,10 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" sqlParams = append(sqlParams, storeIDs) } + if len(storeStatuss) > 0 { + sql += " AND t2.status IN (" + GenQuestionMarks(len(storeStatuss)) + ")" + sqlParams = append(sqlParams, storeStatuss) + } if status != model.StoreStatusAll { sql += " AND t1.status = ?" sqlParams = append(sqlParams, status) @@ -252,8 +256,8 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, return nil, err } -func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { - return GetStoresMapList2(db, vendorIDs, storeIDs, status, isSync, pricePack, false) +func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { + return GetStoresMapList2(db, vendorIDs, storeIDs, storeStatuss, status, isSync, pricePack, false) } func StoreMapList2Map(storeMapList []*model.StoreMap) (storeMapMap map[int][]*model.StoreMap) { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index c5ce30cef..0a1e0f078 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1254,7 +1254,7 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI vendorIDs = []int{actVendorID} } } else { - storeMapList, err := GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } diff --git a/business/partner/purchase/mtwm/order_comment.go b/business/partner/purchase/mtwm/order_comment.go index 4d3056ea5..5fbc55e7e 100644 --- a/business/partner/purchase/mtwm/order_comment.go +++ b/business/partner/purchase/mtwm/order_comment.go @@ -44,7 +44,7 @@ func formalizeTagList(mtwmTagList string) (outTagList string) { } func (c *PurchaseHandler) RefreshComment(fromTime, toTime time.Time) (err error) { - storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err != nil { return err } From f3e3a6985055af1e0e26c4d4c50fc2eb195bed47 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, 21 Jan 2020 09:24:46 +0800 Subject: [PATCH 03/28] mm --- business/jxstore/tempop/tempop.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index afd9ca273..1b6d6078a 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1234,7 +1234,7 @@ func FixMtwmCategory(ctx *jxcontext.Context, mtwmStoreIDs []int, isAsync, isCont func JdStoreInfo1125() (hint string, err error) { fileName := "/Users/xujianhua/Downloads/老格恢复拓店进度.xlsx" db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { From e67ae3588ffbb52d304b6105865ff4822063c664 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, 21 Jan 2020 09:33:03 +0800 Subject: [PATCH 04/28] =?UTF-8?q?=E7=88=86=E5=93=81=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=EF=BC=8C=E8=8B=A5=E5=B8=82=E5=9C=BA=E8=B4=9F=E8=B4=A3=E4=BA=BA?= =?UTF-8?q?=E5=92=8C=E8=BF=90=E8=90=A5=E8=B4=9F=E8=B4=A3=E4=BA=BA=E4=B8=BA?= =?UTF-8?q?=E5=90=8C=E4=B8=80=E4=BA=BA=E5=88=99=E5=8F=AA=E5=8F=91=E4=B8=80?= =?UTF-8?q?=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 9abd4704f..d82754247 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3479,6 +3479,9 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i } } for k, v := range operaterMap { + if marketMap[k] != "" { + continue + } user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) @@ -3486,6 +3489,9 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) } for k, v := range marketMap { + if operaterMap[k] != "" { + continue + } user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) From 5f9fa47d5b6a36885b9a06f332cf519c07e2f16c 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, 21 Jan 2020 17:38:46 +0800 Subject: [PATCH 05/28] =?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=8Cerr=E9=83=BD?= =?UTF-8?q?=E6=98=AFnil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 6 ++- business/jxstore/cms/sync_store_sku.go | 53 ++++++++++++++++++++ business/partner/purchase/ebai/store_sku2.go | 7 ++- business/partner/purchase/jd/store_sku2.go | 3 ++ business/partner/purchase/mtwm/store_sku2.go | 25 +++++++++ 5 files changed, 91 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index d82754247..9a245b064 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3397,11 +3397,12 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i sql := ` SELECT t1.store_id,count(*) sec_kill_count, count(t1.price < 100 or NULL) sec_kill_count2 FROM( - SELECT a.store_id, a.sku_id, d.type, MIN(b.act_price) price + SELECT a.store_id, a.sku_id, d.type, MIN(e.actual_act_price) price FROM store_sku_bind a LEFT JOIN act_store_sku b ON a.store_id = b.store_id AND b.sku_id = a.sku_id LEFT JOIN act_map c ON c.act_id = b.act_id LEFT JOIN act d ON d.id = c.act_id + LEFT JOIN act_store_sku_map e ON e.store_id = a.store_id AND e.sku_id = a.sku_id AND e.vendor_id = c.vendor_id AND e.act_id = d.id WHERE 1=1 AND a.store_id = ? AND c.vendor_id = ? @@ -3409,6 +3410,7 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i AND d.type = ? AND a.status = ? AND a.deleted_at = ? + AND e.actual_act_price <> 0 GROUP BY 1,2,3)t1 GROUP BY 1 ` @@ -3501,7 +3503,7 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i } return result, err } - taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 3) + taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 2) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 735140ea1..7f33c1937 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -1,6 +1,7 @@ package cms import ( + "errors" "fmt" "regexp" "sort" @@ -497,6 +498,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo("删除门店商品", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = singleStoreHandler.DeleteStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "删除门店商品") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -533,6 +535,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) } } + failedList, err = buildFailedListAndErr(failedList, err, nil, batchedStoreSkuList, storeID, vendorID, "创建门店商品") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -554,6 +557,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuSyncInfo("更新门店商品基础信息", func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = singleStoreHandler.UpdateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, nil, batchedStoreSkuList, storeID, vendorID, "更新门店商品基础信息") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -570,6 +574,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo("更新门店商品库存", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusStock(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品库存") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -594,6 +599,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo(name, func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusStatus(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList, status) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品状态") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -612,6 +618,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag } var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusPrice(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品价格") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -656,6 +663,52 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag return err } +func buildFailedListAndErr(failedList []*partner.StoreSkuInfoWithErr, err error, list1 []*partner.StoreSkuInfo, list2 []*dao.StoreSkuSyncInfo, storeID, vendorID int, syncType string) (result []*partner.StoreSkuInfoWithErr, err2 error) { + if err != nil && len(failedList) == 0 { + if list1 != nil { + for _, v := range list1 { + failed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: v, + VendoreID: vendorID, + StoreID: storeID, + SyncType: syncType, + ErrMsg: err.Error(), + } + failedList = append(failedList, failed) + } + } + if list2 != nil { + for _, v := range list2 { + storeSkuInfo := &partner.StoreSkuInfo{ + SkuID: v.SkuID, + VendorSkuID: v.VendorSkuID, + NameID: v.NameID, + VendorNameID: v.VendorNameID, + VendorPrice: v.VendorPrice, + Status: v.Status, + } + failed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: storeSkuInfo, + VendoreID: vendorID, + StoreID: storeID, + SyncType: syncType, + ErrMsg: err.Error(), + } + failedList = append(failedList, failed) + } + } + return failedList, err + } else if err == nil && len(failedList) > 0 { + var errMsg = "" + for _, v := range failedList { + errMsg += v.ErrMsg + } + err2 := errors.New(errMsg) + return failedList, err2 + } + return failedList, err +} + func isNeedHandleAct(causeFlag int) bool { return globals.IsStoreSkuAct && (causeFlag&model.SyncFlagPriceMask != 0) } diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index b52033147..958326071 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -129,6 +129,7 @@ func (p *PurchaseHandler) updateStoreSkus(ctx *jxcontext.Context, storeID int, v api.EbaiAPI.SkuShopCategoryMap(strStoreID, utils.Str2Int64(storeSku.VendorSkuID), "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku)) }) } + err = nil } return failedList, err } @@ -157,6 +158,7 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v } else { vendorSkuID = jxutils.GenFakeID() } + err = nil storeSku.VendorSkuID = utils.Int64ToStr(vendorSkuID) return failedList, err } @@ -179,6 +181,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) // } } + err = nil } return failedList, err } @@ -193,7 +196,6 @@ 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 @@ -213,6 +215,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品状态") // failedList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } + err = nil } return failedList, err } @@ -243,6 +246,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品价格") } } + err = nil } return failedList, err } @@ -261,6 +265,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") } } + err = nil } return failedList, err } diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index d438c51dc..80a846240 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -135,6 +135,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } } + err = nil return failedList, err } @@ -165,6 +166,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg } } } + err = nil return failedList, err } @@ -196,6 +198,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg } } } + err = nil return failedList, err } diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 320260e29..0ec935cf4 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -314,6 +314,12 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) // successList = putils.UnselectStoreSkuSyncListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) + } + err = nil } } } @@ -348,6 +354,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v failedList = SelectStoreSkuListByFoodList(storeSkuList, myMap["retail_error_list"], storeID, model.VendorIDMTWM, "批量删除商品") } } + err = nil } } return failedList, err @@ -389,6 +396,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") + } + err = nil } } return failedList, err @@ -402,6 +415,12 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg if len(failedFoodList) > 0 { failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") + } + err = nil } } return failedList, err @@ -418,6 +437,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg //if err = putils.GenPartialFailedErr(failedFoodList, len(failedFoodList)); err != nil { // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) // } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品库存") + } + err = nil } } return failedList, err From f579b1e50e82ee97f8c51fd5b562e2aa426031a8 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, 21 Jan 2020 09:22:45 +0800 Subject: [PATCH 06/28] =?UTF-8?q?=E7=88=86=E5=93=81=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 8 +- business/jxstore/cms/store.go | 12 +- business/jxstore/cms/store_sku.go | 208 +++++++++++------- business/jxstore/cms/sync.go | 2 +- business/jxstore/cms/sync_store.go | 2 +- business/model/dao/store.go | 10 +- business/model/dao/store_sku.go | 2 +- .../partner/purchase/mtwm/order_comment.go | 2 +- 8 files changed, 146 insertions(+), 100 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index f61780c34..781aa09fb 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -328,7 +328,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { db := dao.GetDB() switch configType { case model.ConfigTypePricePack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -339,7 +339,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { } } case model.ConfigTypeFreightPack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -419,7 +419,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } switch configType { case model.ConfigTypePricePack: - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err != nil { dao.Rollback(db) return "", err @@ -438,7 +438,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } case model.ConfigTypeFreightPack: dao.Commit(db) - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 474284165..71b2f7e7c 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -398,7 +398,7 @@ func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]inte } func setStoreMapInfo(ctx *jxcontext.Context, db *dao.DaoDB, storesInfo *StoresInfo, storeIDs []int, briefLevel int) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -1661,7 +1661,7 @@ func formalizeStore4Courier(storeDetail *dao.StoreDetail2) *dao.StoreDetail2 { func ExportShopsHealthInfo(ctx *jxcontext.Context, vendorIDs, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() vendorID := model.VendorIDEBAI - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } @@ -1749,7 +1749,7 @@ func GetCorporationInfo(ctx *jxcontext.Context, licenceCode string) (corporation func GetStoresVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs, storeIDs []int) (vendorStoreSnapshotList []*model.VendorStoreSnapshot, err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1796,7 +1796,7 @@ func getCurrentSnapshotAt(now time.Time) (snapshotAt time.Time) { } func updateVendorStoreStatusBySnapshot(db *dao.DaoDB, curSnapshotList []*model.VendorStoreSnapshot) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -2380,7 +2380,7 @@ func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, vendorOrgCode string, defer file1.Close() db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { @@ -2645,7 +2645,7 @@ func CreateStorePriceScore(ctx *jxcontext.Context) (err error) { func RefreshJdLevel(ctx *jxcontext.Context) (err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusOpened, -1, "") + storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusOpened, -1, "") if len(storeMapList) > 0 { dao.Begin(db) defer func() { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 92fa2f3f2..9abd4704f 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -169,10 +169,13 @@ type tUpdateStoresSkus struct { } type tStoreSkusSecKill struct { - StoreID int `orm:"column(store_id)"` - VendorID int `orm:"column(vendor_id)"` - SecKillCount int - SecKillCount2 int + StoreID int `orm:"column(store_id)"` + VendorID int `orm:"column(vendor_id)"` + SecKillCount int + SecKillCount2 int + OperatorPhone string + MarketManPhone string + NoticeMsg string } const ( @@ -656,7 +659,7 @@ func updateSaleInfo4StoreSkuName(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } func getValidStoreVendorMap(db *dao.DaoDB, storeIDs []int) (realVendorMap map[int]int, err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1982,7 +1985,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i return "", fmt.Errorf("此功能当前只支持京东到家平台") } db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return "", err } @@ -3352,43 +3355,46 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i // 1. 如果爆品低于8个,报警 type1 // 2. 爆品价格低于1元商品小于5个,报警 type2 var ( - type1Count = 8 - type2Count = 5 + type1Count = 8 + type2Count = 5 + ddMsgresult []interface{} ) db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, model.StoreStatusOpened, model.StoreIsSyncAll, "") - pTask := tasksch.NewParallelTask("SendSeckillSkusCountMsg", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*model.StoreMap) - var type1, type2 int - switch store.VendorID { - case model.VendorIDEBAI: - result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) - for _, v := range result { - type1++ - if v.SalePrice < 1 { - type2++ - } - } - case model.VendorIDMTWM: - handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) - remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) - if err != nil { - return retVal, err - } - for _, v := range remoteSkuList { - for _, vv := range v.SkuList { - if vv.IsSpecialty == 1 { - type1++ - } - if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusOpened, model.StoreIsSyncAll, "") + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + store := batchItemList[0].(*model.StoreMap) + var type1, type2 int + switch store.VendorID { + case model.VendorIDEBAI: + result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) + for _, v := range result { + type1++ + if v.SalePrice < 1 { type2++ } } - } - case model.VendorIDJD: - var storeSecKill []*tStoreSkusSecKill - sql := ` + case model.VendorIDMTWM: + handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) + remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) + if err != nil { + return retVal, err + } + for _, v := range remoteSkuList { + for _, vv := range v.SkuList { + if vv.IsSpecialty == 1 { + type1++ + } + if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + type2++ + } + } + } + case model.VendorIDJD: + var storeSecKill []*tStoreSkusSecKill + sql := ` SELECT t1.store_id,count(*) sec_kill_count, count(t1.price < 100 or NULL) sec_kill_count2 FROM( SELECT a.store_id, a.sku_id, d.type, MIN(b.act_price) price @@ -3406,60 +3412,96 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i GROUP BY 1,2,3)t1 GROUP BY 1 ` - sqlParams := []interface{}{ - store.StoreID, store.VendorID, - model.ActSkuSecKill, model.StoreSkuBindStatusNormal, - utils.DefaultTimeValue, + sqlParams := []interface{}{ + store.StoreID, store.VendorID, + model.ActSkuSecKill, model.StoreSkuBindStatusNormal, + utils.DefaultTimeValue, + } + err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) + if len(storeSecKill) > 0 { + type1 = storeSecKill[0].SecKillCount + type2 = storeSecKill[0].SecKillCount2 + } else { + type1 = 0 + type2 = 0 + } } - err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) - if len(storeSecKill) > 0 { - type1 = storeSecKill[0].SecKillCount - type2 = storeSecKill[0].SecKillCount2 + if type1 < type1Count || type2 < type2Count { + storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) + var ( + operatorName string + operatorPhone string + type1Str = "爆品数量低于8个!" + type2Str = "爆品价格小于1元的爆品数量低于5个!" + typeResult = "" + ) + if storeDetail.OperatorPhone != "" { + operatorName = storeDetail.OperatorName + operatorPhone = storeDetail.OperatorPhone + } else if storeDetail.OperatorPhone2 != "" { + operatorName = storeDetail.OperatorName2 + operatorPhone = storeDetail.OperatorPhone2 + } + if type1 < type1Count { + typeResult += type1Str + } + if type2 < type2Count { + typeResult += type2Str + } + var result = &tStoreSkusSecKill{} + noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]\n", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) + result.OperatorPhone = operatorPhone + result.MarketManPhone = storeDetail.MarketManPhone + result.NoticeMsg = noticeMsg + retVal = []*tStoreSkusSecKill{result} + } + return retVal, err + } + taskParallel := tasksch.NewParallelTask("获取各平台爆品数量", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, storeList) + tasksch.HandleTask(taskParallel, task, true).Run() + ddMsgresult, err = taskParallel.GetResult(0) + case 1: + var ( + operaterMap = make(map[string]string) + marketMap = make(map[string]string) + ) + for _, v := range ddMsgresult { + ddm := v.(*tStoreSkusSecKill) + if operaterMap[ddm.OperatorPhone] != "" { + operaterMap[ddm.OperatorPhone] += ddm.NoticeMsg } else { - type1 = 0 - type2 = 0 + operaterMap[ddm.OperatorPhone] = ddm.NoticeMsg + } + if marketMap[ddm.MarketManPhone] != "" { + marketMap[ddm.MarketManPhone] += ddm.NoticeMsg + } else { + marketMap[ddm.MarketManPhone] = ddm.NoticeMsg } } - if type1 < type1Count || type2 < type2Count { - storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) - var ( - operatorName string - operatorPhone string - type1Str = "爆品数量低于8个!" - type2Str = "爆品价格小于1元的爆品数量低于5个!" - typeResult = "" - ) - if storeDetail.OperatorPhone != "" { - operatorName = storeDetail.OperatorName - operatorPhone = storeDetail.OperatorPhone - } else if storeDetail.OperatorPhone2 != "" { - operatorName = storeDetail.OperatorName2 - operatorPhone = storeDetail.OperatorPhone2 - } - if type1 < type1Count { - typeResult += type1Str - } - if type2 < type2Count { - typeResult += type2Str - } - noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) - globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", noticeMsg) - user, err := dao.GetUserByID(db, "mobile", operatorPhone) + for k, v := range operaterMap { + user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", noticeMsg) - } - user2, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone) - if err == nil && user2 != nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user2.UserID, "警告!门店爆品数量异常!", noticeMsg) + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) } - return retVal, err - }, storeList) - tasksch.HandleTask(pTask, nil, true).Run() + for k, v := range marketMap { + user, err := dao.GetUserByID(db, "mobile", k) + if user != nil && err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) + } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) + } + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 3) + tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { - _, err = pTask.GetResult(0) + _, err = taskSeq.GetResult(0) + hint = "1" } else { - hint = pTask.GetID() + hint = taskSeq.GetID() } return hint, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 99d8c8b0c..0c8aa4aeb 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -598,7 +598,7 @@ func (v *VendorSync) AmendAndPruneStoreStuff(ctx *jxcontext.Context, vendorIDs [ 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 { + if storeMapList, err = dao.GetStoresMapList2(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "", mustDirty); err != nil { return nil, "", err } if len(storeMapList) == 0 { diff --git a/business/jxstore/cms/sync_store.go b/business/jxstore/cms/sync_store.go index 311b34ed3..dcb95dc1d 100644 --- a/business/jxstore/cms/sync_store.go +++ b/business/jxstore/cms/sync_store.go @@ -16,7 +16,7 @@ func OpenRemoteStoreByJxStatus(ctx *jxcontext.Context, vendorIDs, storeIDs []int if !isForce { status = model.StoreStatusClosed } - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, status, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, status, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 28cf4cd52..3d6e42a8b 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -211,7 +211,7 @@ func GetStoreCourierList(db *DaoDB, storeIDs []int, status, auditStatus int) (co return nil, err } -func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { +func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { sql := ` SELECT t1.* FROM store_map t1 @@ -230,6 +230,10 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" sqlParams = append(sqlParams, storeIDs) } + if len(storeStatuss) > 0 { + sql += " AND t2.status IN (" + GenQuestionMarks(len(storeStatuss)) + ")" + sqlParams = append(sqlParams, storeStatuss) + } if status != model.StoreStatusAll { sql += " AND t1.status = ?" sqlParams = append(sqlParams, status) @@ -252,8 +256,8 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, return nil, err } -func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { - return GetStoresMapList2(db, vendorIDs, storeIDs, status, isSync, pricePack, false) +func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { + return GetStoresMapList2(db, vendorIDs, storeIDs, storeStatuss, status, isSync, pricePack, false) } func StoreMapList2Map(storeMapList []*model.StoreMap) (storeMapMap map[int][]*model.StoreMap) { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 9c41860d6..d6bbafb11 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1253,7 +1253,7 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI vendorIDs = []int{actVendorID} } } else { - storeMapList, err := GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } diff --git a/business/partner/purchase/mtwm/order_comment.go b/business/partner/purchase/mtwm/order_comment.go index 4d3056ea5..5fbc55e7e 100644 --- a/business/partner/purchase/mtwm/order_comment.go +++ b/business/partner/purchase/mtwm/order_comment.go @@ -44,7 +44,7 @@ func formalizeTagList(mtwmTagList string) (outTagList string) { } func (c *PurchaseHandler) RefreshComment(fromTime, toTime time.Time) (err error) { - storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err != nil { return err } From b4c2aa37a4f683a6ed5144118d01e7c3442565be 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, 21 Jan 2020 09:24:46 +0800 Subject: [PATCH 07/28] mm --- business/jxstore/tempop/tempop.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index afd9ca273..1b6d6078a 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1234,7 +1234,7 @@ func FixMtwmCategory(ctx *jxcontext.Context, mtwmStoreIDs []int, isAsync, isCont func JdStoreInfo1125() (hint string, err error) { fileName := "/Users/xujianhua/Downloads/老格恢复拓店进度.xlsx" db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { From d63950d91ddba7605488bf751d751297e8c1a0e3 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, 21 Jan 2020 09:33:03 +0800 Subject: [PATCH 08/28] =?UTF-8?q?=E7=88=86=E5=93=81=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=EF=BC=8C=E8=8B=A5=E5=B8=82=E5=9C=BA=E8=B4=9F=E8=B4=A3=E4=BA=BA?= =?UTF-8?q?=E5=92=8C=E8=BF=90=E8=90=A5=E8=B4=9F=E8=B4=A3=E4=BA=BA=E4=B8=BA?= =?UTF-8?q?=E5=90=8C=E4=B8=80=E4=BA=BA=E5=88=99=E5=8F=AA=E5=8F=91=E4=B8=80?= =?UTF-8?q?=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 9abd4704f..d82754247 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3479,6 +3479,9 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i } } for k, v := range operaterMap { + if marketMap[k] != "" { + continue + } user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) @@ -3486,6 +3489,9 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) } for k, v := range marketMap { + if operaterMap[k] != "" { + continue + } user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) From c7d8d2033c25ab196608a8bf406831999c0e4be2 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, 21 Jan 2020 17:38:46 +0800 Subject: [PATCH 09/28] =?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=8Cerr=E9=83=BD?= =?UTF-8?q?=E6=98=AFnil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 6 ++- business/jxstore/cms/sync_store_sku.go | 53 ++++++++++++++++++++ business/partner/purchase/ebai/store_sku2.go | 7 ++- business/partner/purchase/jd/store_sku2.go | 3 ++ business/partner/purchase/mtwm/store_sku2.go | 25 +++++++++ 5 files changed, 91 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index d82754247..9a245b064 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3397,11 +3397,12 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i sql := ` SELECT t1.store_id,count(*) sec_kill_count, count(t1.price < 100 or NULL) sec_kill_count2 FROM( - SELECT a.store_id, a.sku_id, d.type, MIN(b.act_price) price + SELECT a.store_id, a.sku_id, d.type, MIN(e.actual_act_price) price FROM store_sku_bind a LEFT JOIN act_store_sku b ON a.store_id = b.store_id AND b.sku_id = a.sku_id LEFT JOIN act_map c ON c.act_id = b.act_id LEFT JOIN act d ON d.id = c.act_id + LEFT JOIN act_store_sku_map e ON e.store_id = a.store_id AND e.sku_id = a.sku_id AND e.vendor_id = c.vendor_id AND e.act_id = d.id WHERE 1=1 AND a.store_id = ? AND c.vendor_id = ? @@ -3409,6 +3410,7 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i AND d.type = ? AND a.status = ? AND a.deleted_at = ? + AND e.actual_act_price <> 0 GROUP BY 1,2,3)t1 GROUP BY 1 ` @@ -3501,7 +3503,7 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i } return result, err } - taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 3) + taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 2) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index ebe768676..334d46920 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -1,6 +1,7 @@ package cms import ( + "errors" "fmt" "regexp" "sort" @@ -500,6 +501,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag err = nil failedList = nil // 因为batchSize为1,可以这样处理 } + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "删除门店商品") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -534,6 +536,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) } } + failedList, err = buildFailedListAndErr(failedList, err, nil, batchedStoreSkuList, storeID, vendorID, "创建门店商品") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -555,6 +558,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuSyncInfo("更新门店商品基础信息", func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = singleStoreHandler.UpdateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, nil, batchedStoreSkuList, storeID, vendorID, "更新门店商品基础信息") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -571,6 +575,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo("更新门店商品库存", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusStock(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品库存") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -595,6 +600,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo(name, func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusStatus(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList, status) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品状态") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -613,6 +619,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag } var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusPrice(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品价格") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -657,6 +664,52 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag return err } +func buildFailedListAndErr(failedList []*partner.StoreSkuInfoWithErr, err error, list1 []*partner.StoreSkuInfo, list2 []*dao.StoreSkuSyncInfo, storeID, vendorID int, syncType string) (result []*partner.StoreSkuInfoWithErr, err2 error) { + if err != nil && len(failedList) == 0 { + if list1 != nil { + for _, v := range list1 { + failed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: v, + VendoreID: vendorID, + StoreID: storeID, + SyncType: syncType, + ErrMsg: err.Error(), + } + failedList = append(failedList, failed) + } + } + if list2 != nil { + for _, v := range list2 { + storeSkuInfo := &partner.StoreSkuInfo{ + SkuID: v.SkuID, + VendorSkuID: v.VendorSkuID, + NameID: v.NameID, + VendorNameID: v.VendorNameID, + VendorPrice: v.VendorPrice, + Status: v.Status, + } + failed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: storeSkuInfo, + VendoreID: vendorID, + StoreID: storeID, + SyncType: syncType, + ErrMsg: err.Error(), + } + failedList = append(failedList, failed) + } + } + return failedList, err + } else if err == nil && len(failedList) > 0 { + var errMsg = "" + for _, v := range failedList { + errMsg += v.ErrMsg + } + err2 := errors.New(errMsg) + return failedList, err2 + } + return failedList, err +} + func isNeedHandleAct(causeFlag int) bool { return globals.IsStoreSkuAct && (causeFlag&model.SyncFlagPriceMask != 0) } diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index b52033147..958326071 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -129,6 +129,7 @@ func (p *PurchaseHandler) updateStoreSkus(ctx *jxcontext.Context, storeID int, v api.EbaiAPI.SkuShopCategoryMap(strStoreID, utils.Str2Int64(storeSku.VendorSkuID), "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku)) }) } + err = nil } return failedList, err } @@ -157,6 +158,7 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v } else { vendorSkuID = jxutils.GenFakeID() } + err = nil storeSku.VendorSkuID = utils.Int64ToStr(vendorSkuID) return failedList, err } @@ -179,6 +181,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) // } } + err = nil } return failedList, err } @@ -193,7 +196,6 @@ 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 @@ -213,6 +215,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品状态") // failedList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } + err = nil } return failedList, err } @@ -243,6 +246,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品价格") } } + err = nil } return failedList, err } @@ -261,6 +265,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") } } + err = nil } return failedList, err } diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index d438c51dc..80a846240 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -135,6 +135,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } } + err = nil return failedList, err } @@ -165,6 +166,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg } } } + err = nil return failedList, err } @@ -196,6 +198,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg } } } + err = nil return failedList, err } diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 320260e29..0ec935cf4 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -314,6 +314,12 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) // successList = putils.UnselectStoreSkuSyncListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) + } + err = nil } } } @@ -348,6 +354,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v failedList = SelectStoreSkuListByFoodList(storeSkuList, myMap["retail_error_list"], storeID, model.VendorIDMTWM, "批量删除商品") } } + err = nil } } return failedList, err @@ -389,6 +396,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") + } + err = nil } } return failedList, err @@ -402,6 +415,12 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg if len(failedFoodList) > 0 { failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") + } + err = nil } } return failedList, err @@ -418,6 +437,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg //if err = putils.GenPartialFailedErr(failedFoodList, len(failedFoodList)); err != nil { // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) // } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品库存") + } + err = nil } } return failedList, err From 85a2e42ea65165c3c3328790befda10b9851c31d 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, 21 Jan 2020 18:18:49 +0800 Subject: [PATCH 10/28] =?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=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.go | 3 ++- business/jxstore/cms/sync_store_sku.go | 8 +++++--- business/jxstore/misc/misc.go | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 0c8aa4aeb..c3e44b3fb 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -654,7 +654,8 @@ func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) { noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL) } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { if task.GetErr() != nil { - noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) + noticeMsg = "您此次的同步任务错误详情返回如下: " + noticeMsg += utils.Format4Output(buildErrMsgJson(task), true) } } if authInfo, err := ctx.GetV2AuthInfo(); err == nil { diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 334d46920..5bab8cf3e 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -700,11 +700,13 @@ func buildFailedListAndErr(failedList []*partner.StoreSkuInfoWithErr, err error, } return failedList, err } else if err == nil && len(failedList) > 0 { - var errMsg = "" + var errMsgList []string for _, v := range failedList { - errMsg += v.ErrMsg + errMsgList = append(errMsgList, utils.Int2Str(v.StoreSkuInfo.SkuID)) + errMsgList = append(errMsgList, utils.Int2Str(storeID)) + errMsgList = append(errMsgList, v.ErrMsg) } - err2 := errors.New(errMsg) + err2 := errors.New(strings.Join(errMsgList, ",")) return failedList, err2 } return failedList, err diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index a35780744..9236e3463 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -89,7 +89,7 @@ var ( "00:01:00", } sendSecKillWarnList = []string{ - "8:30:00", + "9:00:00", } autoSaleStoreSkuTimeList = []string{ From 313e0616fee0bf261e05d4fc122255567993aa8a 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, 21 Jan 2020 18:30:17 +0800 Subject: [PATCH 11/28] =?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=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 4 ++-- business/jxstore/cms/sync_store_sku.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index c3e44b3fb..c54e8884c 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -650,11 +650,11 @@ func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) { if ctx.GetUserName() != "jxadmin" { if len(task.GetFailedList()) > 10 { downloadURL, _, _ := WirteToExcelBySyncFailed(task) - noticeMsg = "您此次的同步任务错误详情返回如下: " + noticeMsg = "您此次的同步任务错误详情返回如下: \n" noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL) } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { if task.GetErr() != nil { - noticeMsg = "您此次的同步任务错误详情返回如下: " + noticeMsg = "您此次的同步任务错误详情返回如下: \n" noticeMsg += utils.Format4Output(buildErrMsgJson(task), true) } } diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 5bab8cf3e..9848d7155 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -702,8 +702,8 @@ func buildFailedListAndErr(failedList []*partner.StoreSkuInfoWithErr, err error, } else if err == nil && len(failedList) > 0 { var errMsgList []string for _, v := range failedList { + errMsgList = append(errMsgList, utils.Int2Str(v.StoreID)) errMsgList = append(errMsgList, utils.Int2Str(v.StoreSkuInfo.SkuID)) - errMsgList = append(errMsgList, utils.Int2Str(storeID)) errMsgList = append(errMsgList, v.ErrMsg) } err2 := errors.New(strings.Join(errMsgList, ",")) From 04d9cd0d334066cee1eb916abe0588ee84daa108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 22 Jan 2020 09:47:19 +0800 Subject: [PATCH 12/28] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=94=99=E8=AF=AF=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/partner/purchase/jd/store_sku2.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index 80a846240..ec0e514bc 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -130,7 +130,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr } else { responseList, err2 = getAPI(vendorOrgCode).FakeBatchUpdateVendibility(ctx.GetTrackInfo(), "", vendorStoreID, skuVendibilityList, ctx.GetUserName()) } - if err = err2; isErrPartialFailed(err) { + if err = err2; err != nil { failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品状态") // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } @@ -161,7 +161,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg } else { responseList, err2 = getAPI(vendorOrgCode).FakeUpdateVendorStationPrice(ctx.GetTrackInfo(), "", vendorStoreID, skuPriceInfoList) } - if err = err2; isErrPartialFailed(err) { + if err = err2; err != nil { failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品价格") } } @@ -192,7 +192,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg } else { responseList, err2 = getAPI(vendorOrgCode).FakeBatchUpdateCurrentQtys(ctx.GetTrackInfo(), "", vendorStoreID, skuStockList, ctx.GetUserName()) } - if err = err2; isErrPartialFailed(err) { + if err = err2; err != nil { failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品库存") // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } From ded473c57b9f5ec1f565ae0f8bc6c19f51f30e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 22 Jan 2020 10:26:48 +0800 Subject: [PATCH 13/28] =?UTF-8?q?=E6=AF=8F=E5=A4=A9=E7=9A=84=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=94=99=E8=AF=AF=E5=8F=91=E7=BB=99=E6=88=91=E8=87=AA?= =?UTF-8?q?=E5=B7=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index c54e8884c..31ac7696d 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -646,21 +646,26 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, parentTask tasksch.I func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) { task.SetFinishHook(func(task tasksch.ITask) { - var noticeMsg string + var noticeMsg = "您此次的同步任务错误详情返回如下: \n" if ctx.GetUserName() != "jxadmin" { if len(task.GetFailedList()) > 10 { downloadURL, _, _ := WirteToExcelBySyncFailed(task) - noticeMsg = "您此次的同步任务错误详情返回如下: \n" noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL) } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { if task.GetErr() != nil { - noticeMsg = "您此次的同步任务错误详情返回如下: \n" noticeMsg += utils.Format4Output(buildErrMsgJson(task), true) } } if authInfo, err := ctx.GetV2AuthInfo(); err == nil { ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) } + } else { + downloadURL, _, _ := WirteToExcelBySyncFailed(task) + user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913") + noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL) + if user != nil && err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "同步错误返回", noticeMsg) + } } }) } From 7d77374f6c6729cce5f9cbc75e432f14ed2fa2d6 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 28 Jan 2020 12:13:10 +0800 Subject: [PATCH 14/28] =?UTF-8?q?=E9=97=A8=E5=BA=97=E8=AF=84=E5=88=86?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=BB=8E22:00=E6=94=B9=E5=88=B023:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_score.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/misc/store_score.go b/business/jxstore/misc/store_score.go index cf3752bf4..269467ba8 100644 --- a/business/jxstore/misc/store_score.go +++ b/business/jxstore/misc/store_score.go @@ -51,7 +51,7 @@ const ( var ( scoreStoreTimeList = []string{ - "22:00:00", + "23:00:00", } scoreStoreCheckTimeEnd = "23:30:00" fullVendorList = map[int]bool{ From 4bf6896a3a6d816e07ffedd8a2bc9114f07db4a5 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 29 Jan 2020 10:39:08 +0800 Subject: [PATCH 15/28] =?UTF-8?q?=E5=94=AE=E5=90=8E=E6=88=96=E5=B7=AE?= =?UTF-8?q?=E8=AF=84=E6=97=B6=EF=BC=8C=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E9=9A=90=E7=A7=81=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order_afs.go | 13 +++++++++++++ business/jxcallback/orderman/order_comment.go | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go index 166057e0c..dbb58cae3 100644 --- a/business/jxcallback/orderman/order_afs.go +++ b/business/jxcallback/orderman/order_afs.go @@ -8,6 +8,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/orm" ) @@ -49,6 +50,18 @@ func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode afsOrder.Status = orderStatus.Status } globals.SugarLogger.Debugf("onAfsOrderNew2 orderID:%s", afsOrder.VendorOrderID) + // + if order, _ := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID); order != nil { + if order.ConsigneeMobile2 == "" { + if handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID); handler != nil { + if order2, _ := handler.GetOrder(order.VendorOrgCode, order.VendorOrderID); order2 != nil && order.ConsigneeMobile != order2.ConsigneeMobile { + order.ConsigneeMobile = order2.ConsigneeMobile + c.UpdateOrderFields(order, []string{"ConsigneeMobile"}) + } + } + } + } + // dao.Begin(db) defer func() { if r := recover(); r != nil || err != nil { diff --git a/business/jxcallback/orderman/order_comment.go b/business/jxcallback/orderman/order_comment.go index 079ed953d..a5b4ffa87 100644 --- a/business/jxcallback/orderman/order_comment.go +++ b/business/jxcallback/orderman/order_comment.go @@ -110,6 +110,12 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) ( if order.ConsigneeMobile2 != "" { orderComment.ConsigneeMobile = order.ConsigneeMobile2 } else { + if handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID); handler != nil { + if order2, _ := handler.GetOrder(order.VendorOrgCode, order.VendorOrderID); order2 != nil && order.ConsigneeMobile != order2.ConsigneeMobile { + order.ConsigneeMobile = order2.ConsigneeMobile + partner.CurOrderManager.UpdateOrderFields(order, []string{"ConsigneeMobile"}) + } + } orderComment.ConsigneeMobile = order.ConsigneeMobile } } else { From 1282ce1b4dbbac6eadbd31c8c9e2f5eb885e0e83 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 29 Jan 2020 11:07:10 +0800 Subject: [PATCH 16/28] =?UTF-8?q?=E9=99=90=E5=88=B6status.Remark=E9=95=BF?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman.go | 1 + 1 file changed, 1 insertion(+) diff --git a/business/jxcallback/orderman/orderman.go b/business/jxcallback/orderman/orderman.go index f66f1528a..e6c385406 100644 --- a/business/jxcallback/orderman/orderman.go +++ b/business/jxcallback/orderman/orderman.go @@ -81,6 +81,7 @@ func addOrderOrWaybillStatus(status *model.OrderStatus, db *dao.DaoDB) (isDuplic } }() status.ID = 0 + status.Remark = utils.LimitUTF8StringLen(status.Remark, 255) created, _, err := db.Db.ReadOrCreate(status, "VendorOrderID", "VendorID", "OrderType", "Status", "VendorStatus", "StatusTime") if err == nil { if !created { From 98825dada029507db91af076bcebb7a1372b3ade Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 31 Jan 2020 19:38:57 +0800 Subject: [PATCH 17/28] =?UTF-8?q?=E7=BE=8E=E5=9B=A2=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=8A=95=E8=AF=89=E4=B9=9F=E5=BD=93=E6=88=90=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=8F=96=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/mtwm/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 5c74f41a3..82d9e8e5d 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -393,7 +393,7 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta } else if msg.Cmd == mtwmapi.MsgTypeOrderRefund { if notifyType == mtwmapi.NotifyTypeApply { vendorStatus = fakeUserApplyCancel - } else if notifyType == mtwmapi.NotifyTypeCancelRefund { + } else if notifyType == mtwmapi.NotifyTypeCancelRefund || notifyType == mtwmapi.NotifyTypeCancelRefundComplaint { vendorStatus = fakeUserUndoApplyCancel } else if notifyType == mtwmapi.NotifyTypeReject { vendorStatus = fakeRefuseUserApplyCancel From 06c97665ed9bb37927156c8a52ce05fb1587af86 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 31 Jan 2020 23:05:44 +0800 Subject: [PATCH 18/28] =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E5=95=86=E5=9F=8E10027?= =?UTF-8?q?4=E5=85=8D=E9=85=8D=E9=80=81=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jx/localjx/order.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 334a5a492..8bef6bedd 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -24,6 +24,8 @@ const ( PayWaitingTime = 10 * time.Minute // 等待支付的最长时间 DingShiDaMinTime = 1 * time.Hour + + specialStoreID = 100274 ) type JxSkuInfo struct { @@ -210,6 +212,10 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL now := time.Now() beginDate := utils.Time2Date(now) minDingShiDaTime := now.Add(DingShiDaMinTime) + viewShippingFee := "约6.6元配送费" + if storeID == specialStoreID { + viewShippingFee = "免费配送" + } for i := 0; i < 2; i++ { openTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime1, beginDate) closeTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, beginDate) @@ -222,7 +228,7 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{ ViewTime: "立即送出", UnixTime: 0, - ViewShippingFee: "约6.6元配送费", + ViewShippingFee: viewShippingFee, }) } deliverTimerList = append(deliverTimerList, timeInfo) @@ -234,7 +240,7 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{ ViewTime: time2ShortTimeStr(deliveryTime), UnixTime: deliveryTime.Unix(), - ViewShippingFee: "约6.6元配送费", + ViewShippingFee: viewShippingFee, }) } } @@ -438,6 +444,9 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), model.CoordinateTypeMars, outJxOrder.Weight, checkTime) + if jxOrder.StoreID == specialStoreID { + outJxOrder.FreightPrice = 0 + } } else { outJxOrder.FreightPrice = 0 } From 51af8622dde9dbd386a89139aadc7a1783714f85 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 10:52:01 +0800 Subject: [PATCH 19/28] ?AddMyDeliveryAddress --- controllers/cms_user2.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index cfbb04f7d..a73a39453 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -273,10 +273,22 @@ func (c *User2Controller) TransferLegacyWeixins() { // @router /AddMyDeliveryAddress [post] func (c *User2Controller) AddMyDeliveryAddress() { c.callAddMyDeliveryAddress(func(params *tUser2AddMyDeliveryAddressParams) (retVal interface{}, errCode string, err error) { - var address *model.UserDeliveryAddress - if err = utils.Map2StructByJson(params.MapData, &address, true); err == nil { - retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) + // var address *model.UserDeliveryAddress + // if err = utils.Map2StructByJson(params.MapData, &address, true); err == nil { + // retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) + // } + address := &model.UserDeliveryAddress{ + ConsigneeName: params.ConsigneeName, + ConsigneeMobile: params.ConsigneeMobile, + Address: params.Address, + DetailAddress: params.DetailAddress, + Lng: params.Lng, + Lat: params.Lat, + Tag: params.Tag, + Remark: params.Remark, + IsDefault: int8(params.IsDefault), } + retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) return retVal, "", err }) } From 320c23ae8adef9868e3a4497e97ffdb21bdb85f0 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 11:03:12 +0800 Subject: [PATCH 20/28] up --- business/jxstore/cms/user2.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 7b2b681ef..93ff0078a 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -591,6 +591,7 @@ func getAddressInfoFromCoord(db *dao.DaoDB, lng, lat float64) (formattedAddress } func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryAddress) (outAddress *model.UserDeliveryAddress, err error) { + globals.SugarLogger.Debugf("AddUserDeliveryAddress address:%s", utils.Format4Output(address, true)) if address.UserID == "" { return nil, fmt.Errorf("操作用户配送地址时必须指定UserID") } @@ -624,6 +625,7 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA } func AddMyDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryAddress) (outAddress *model.UserDeliveryAddress, err error) { + globals.SugarLogger.Debugf("AddMyDeliveryAddress address:%s", utils.Format4Output(address, true)) _, address.UserID = ctx.GetMobileAndUserID() return AddUserDeliveryAddress(ctx, address) } From c0792ddfb354e143b71cdd8726ce26bff1c29d0f Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 11:08:46 +0800 Subject: [PATCH 21/28] up --- business/jxstore/cms/user2.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 93ff0078a..8b7ec64b2 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -591,7 +591,7 @@ func getAddressInfoFromCoord(db *dao.DaoDB, lng, lat float64) (formattedAddress } func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryAddress) (outAddress *model.UserDeliveryAddress, err error) { - globals.SugarLogger.Debugf("AddUserDeliveryAddress address:%s", utils.Format4Output(address, true)) + globals.SugarLogger.Debugf("AddUserDeliveryAddress1 address:%s", utils.Format4Output(address, true)) if address.UserID == "" { return nil, fmt.Errorf("操作用户配送地址时必须指定UserID") } @@ -600,6 +600,7 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA lat := address.Lat address.AutoAddress, address.DistrictCode, address.CityCode, err = getAddressInfoFromCoord(db, lng, lat) if err == nil { + globals.SugarLogger.Debugf("AddUserDeliveryAddress2 address:%s", utils.Format4Output(address, true)) dao.Begin(db) defer func() { if r := recover(); r != nil { @@ -621,13 +622,16 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA dao.Rollback(db) } } + globals.SugarLogger.Debugf("AddUserDeliveryAddress3 address:%s", utils.Format4Output(address, true)) return outAddress, err } func AddMyDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryAddress) (outAddress *model.UserDeliveryAddress, err error) { globals.SugarLogger.Debugf("AddMyDeliveryAddress address:%s", utils.Format4Output(address, true)) _, address.UserID = ctx.GetMobileAndUserID() - return AddUserDeliveryAddress(ctx, address) + outAddress, err = AddUserDeliveryAddress(ctx, address) + globals.SugarLogger.Debugf("AddMyDeliveryAddress2 address:%s, err:%v", utils.Format4Output(address, true), err) + return outAddress, err } func DeleteUserDeliveryAddress(ctx *jxcontext.Context, userID string, addressID int) (err error) { From c2519be865f51c756fe8091f3ae387ac909f71fe Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 12:09:54 +0800 Subject: [PATCH 22/28] =?UTF-8?q?=E8=87=AA=E9=85=8D=E9=80=81=E9=97=A8?= =?UTF-8?q?=E5=BA=97=E4=B9=9F=E8=A6=81=E6=A3=80=E6=9F=A5isDeliveryCompetit?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/scheduler/defsch/defsch.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 407a23f7c..5af23c02d 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -292,7 +292,7 @@ func init() { return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil) }, ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { - return model.IsOrderDeliveryByStore(savedOrderInfo.order) // 自配送商家使用 + return savedOrderInfo.isDeliveryCompetition && model.IsOrderDeliveryByStore(savedOrderInfo.order) // 自配送商家使用 }, }, }, @@ -697,6 +697,9 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf if maxDeliveryFee == 0 { maxDeliveryFee = getMaxDeliveryFee(order) } + if !savedOrderInfo.isDeliveryCompetition { + globals.SugarLogger.Debugf("createWaybillOn3rdProviders orderID:%s门店没有设置配送竞争", order.VendorOrderID) + } globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, status:%d, maxDeliveryFee:%d, excludeBill:%v", order.VendorOrderID, order.Status, maxDeliveryFee, excludeBill) if err = s.canOrderCreateWaybillNormally(order); err == nil { if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 { From 0c5d62e55ff7dd170e673e2aeeb12d5c2fc6dafb Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 12:23:15 +0800 Subject: [PATCH 23/28] =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E5=95=86=E5=9F=8E?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=BA=8F=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 25 +++++++++++++++++++ business/model/dao/dao_order_test.go | 8 ++++++ business/model/dao/store_test.go | 2 +- business/partner/purchase/jx/localjx/order.go | 4 +++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 38895b91d..6944301f9 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1162,3 +1162,28 @@ func GetOrdersSupplementNoPage(db *DaoDB, ID int, storIDs, vendorIDs, statuss [] err = GetRows(db, &orderSupplementFee, sql, sqlParams...) return orderSupplementFee, err } + +func GetJxOrderCount(db *DaoDB, storeID int, orderID string, date time.Time) (count int, err error) { + if utils.IsTimeZero(date) { + date = time.Now() + } + sql := ` + SELECT COUNT(*) ct + FROM goods_order t1 + WHERE t1.vendor_id = ? AND t1.jx_store_id = ? AND (t1.status >= ? OR t1.order_seq > 0) AND t1.order_created_at >= ? AND t1.order_created_at < ? + ` + sqlParams := []interface{}{ + model.VendorIDJX, + storeID, + model.OrderStatusNew, + utils.Time2Date(date), + utils.Time2Date(date).Add(24 * time.Hour), + } + + if orderID != "" { + sql += " AND t1.vendor_order_id = ?" + sqlParams = append(sqlParams, orderID) + } + err = GetRow(db, &count, sql, sqlParams...) + return count, err +} diff --git a/business/model/dao/dao_order_test.go b/business/model/dao/dao_order_test.go index f1a1ee5ff..a30eed64a 100644 --- a/business/model/dao/dao_order_test.go +++ b/business/model/dao/dao_order_test.go @@ -47,3 +47,11 @@ func TestGetPendingFakeOrders(t *testing.T) { } t.Log(len(orderList)) } + +func TestGetJxOrderSeq(t *testing.T) { + count, err := GetJxOrderCount(GetDB(), 100118, "23423", time.Now()) + if err != nil { + t.Fatal(err) + } + t.Log(count) +} diff --git a/business/model/dao/store_test.go b/business/model/dao/store_test.go index 7ed727a21..b77ffffba 100644 --- a/business/model/dao/store_test.go +++ b/business/model/dao/store_test.go @@ -40,7 +40,7 @@ func TestGetStoreList4Role(t *testing.T) { } func TestGetStoresMapList(t *testing.T) { - storeList, err := GetStoresMapList(GetDB(), nil, nil, model.StoreStatusClosed, model.StoreIsSyncYes, "") + storeList, err := GetStoresMapList(GetDB(), nil, nil, nil, model.StoreStatusClosed, model.StoreIsSyncYes, "") t.Log(utils.Format4Output(storeList, false)) if err != nil { t.Fatal(err) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 8bef6bedd..555dd753b 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -255,6 +255,10 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) { if err == nil { db := dao.GetDB() dao.UpdateEntity(db, orderPay) + if count, err2 := dao.GetJxOrderCount(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorOrderID, order.OrderCreatedAt); err2 == nil { + order.OrderSeq = count + 1 + partner.CurOrderManager.UpdateOrderFields(order, []string{"OrderSeq"}) + } order.Status = model.OrderStatusNew order.VendorStatus = utils.Int2Str(model.OrderStatusNew) order.StatusTime = *orderPay.PayFinishedAt From 08ebdfe26d72422cbfe539112f0bf06311888fd4 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 15:51:17 +0800 Subject: [PATCH 24/28] =?UTF-8?q?GetStoreListByLocation=E5=B0=86=E8=90=A5?= =?UTF-8?q?=E4=B8=9A=E9=97=A8=E5=BA=97=E6=8E=92=E5=9C=A8=E5=89=8D=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E7=BC=BA=E7=9C=81=E8=87=B3=E5=B0=91=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E9=97=A8=E5=BA=97=EF=BC=88=E4=B8=BA=E4=BA=86?= =?UTF-8?q?=E8=85=BE=E8=AE=AF=E5=AE=A1=E6=A0=B8=E7=94=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 71b2f7e7c..8be4eedba 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -110,6 +110,9 @@ func (x Store4UserList) Len() int { } func (x Store4UserList) Less(i, j int) bool { + if x[i].Status != x[j].Status { + return x[i].Status > x[j].Status + } if x[i].WalkDistance != x[j].WalkDistance { return x[i].WalkDistance < x[j].WalkDistance } @@ -2324,6 +2327,7 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi FROM store t1 JOIN place city ON city.code = t1.city_code WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? + ORDER BY t1.id ` sqlParams := []interface{}{ utils.DefaultTimeValue, @@ -2344,6 +2348,22 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi } } + // 为了审核用 + if len(storeList2) == 0 { + sqlParams = []interface{}{ + utils.DefaultTimeValue, + model.StoreStatusDisabled, + jxutils.StandardCoordinate2Int(0), + jxutils.StandardCoordinate2Int(10000), + jxutils.StandardCoordinate2Int(0), + jxutils.StandardCoordinate2Int(10000), + } + dao.GetRows(dao.GetDB(), &storeList2, sql, sqlParams...) + if len(storeList2) > 1 { + storeList2 = storeList2[:1] + } + } + // 如果要求以步行距离来算 if needWalkDistance { var coordList []*autonavi.Coordinate From a7bc749ff07204b15fa0199ec46b55dcfd38be22 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 18:54:10 +0800 Subject: [PATCH 25/28] =?UTF-8?q?Login=E5=85=BC=E5=AE=B9=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=8F=96=E5=88=B0authid2=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/auth2.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/controllers/auth2.go b/controllers/auth2.go index 7bd189d9d..c9ce8311a 100644 --- a/controllers/auth2.go +++ b/controllers/auth2.go @@ -97,7 +97,14 @@ func (c *Auth2Controller) Login() { params.AuthSecret = GetComposedCode(&c.Controller, params.AuthSecret) } ctx := auth2.NewContext(c.Ctx.ResponseWriter, c.Ctx.Request) - retVal, err = auth2.Login(ctx, params.AuthType, params.AuthID, params.AuthIDType, params.AuthSecret) + authInfo, err := auth2.Login(ctx, params.AuthType, params.AuthID, params.AuthIDType, params.AuthSecret) + // TODO 兼容没有取到authid2的错误 + if err == nil && authInfo.AuthBindInfo != nil { + if authInfo.AuthBindInfo.AuthID2 == "" { + authInfo.AuthBindInfo.AuthID2 = authInfo.AuthBindInfo.AuthID + } + retVal = authInfo + } return retVal, "", err }) } From 0d650cf82b091e76df6f13ba6ade6dd342191d26 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 1 Feb 2020 20:38:24 +0800 Subject: [PATCH 26/28] =?UTF-8?q?UpdateUserByMiniInfo=E4=B8=ADUpdateEntity?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/cms_user2.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index a73a39453..0a95d4536 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -418,7 +418,7 @@ func (c *Auth2Controller) UpdateUserByMiniInfo() { if userInfo.PurePhoneNumber != "" { user.Mobile = utils.String2Pointer(userInfo.PurePhoneNumber) } - dao.UpdateEntity(dao.GetDB(), user) + _, err = dao.UpdateEntity(dao.GetDB(), user) } } } From 919e866cb31929a119214c4669f7f3f1e743bab6 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 2 Feb 2020 10:17:14 +0800 Subject: [PATCH 27/28] =?UTF-8?q?UpdateUserByMiniInfo=E4=BB=A5=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E4=BF=A1=E6=81=AF=E6=9B=B4=E6=96=B0=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E9=87=8D=E5=A4=8D=EF=BC=8C=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/cms_user2.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 0a95d4536..62b064f54 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -9,6 +9,7 @@ import ( "git.rosy.net.cn/jx-callback/business/authz/autils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/jxutils/jsonerr" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "github.com/astaxie/beego" @@ -419,6 +420,11 @@ func (c *Auth2Controller) UpdateUserByMiniInfo() { user.Mobile = utils.String2Pointer(userInfo.PurePhoneNumber) } _, err = dao.UpdateEntity(dao.GetDB(), user) + if err != nil && dao.IsDuplicateError(err) { + if mobileAuth, err2 := auth2.LoginInternal(params.Ctx.Context, auth2.AuthTypeMobile, userInfo.PurePhoneNumber, auth2.UserIDMobile, auth2.InternalAuthSecret); err2 == nil { + err = jsonerr.New(mobileAuth, model.ErrCodeJsonUserAlreadyExist) + } + } } } } From daabd0ed3fa1db14ff48d128ebdc33cfe143fc24 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, 3 Feb 2020 09:06:24 +0800 Subject: [PATCH 28/28] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=A0=E8=AE=B0=E5=BD=95=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2detail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/event.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/business/model/dao/event.go b/business/model/dao/event.go index 3ac394be5..a66d75978 100644 --- a/business/model/dao/event.go +++ b/business/model/dao/event.go @@ -95,6 +95,9 @@ func GetOperateEvents(db *DaoDB, name string, apiFunctions []string, operateType for _, v := range operateEventExt { accessUUidList = append(accessUUidList, v.AccessUUID) } + if len(accessUUidList) == 0 { + return operateEventExt, totalCount, err + } sql2 := ` SELECT * FROM operate_event_detail