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 }