diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index fe690f73a..4b6af93bd 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1238,32 +1238,39 @@ func SaveStoresVendorSnapshot(db *dao.DaoDB, snapshotAt time.Time, curSnapshotLi } func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, prevSnapshotList, curSnapshotList []*model.VendorStoreSnapshot) (err error) { - prevSnapshotMap := make(map[string]*model.VendorStoreSnapshot) - for _, v := range prevSnapshotList { - prevSnapshotMap[v.GenMapKey()] = v + if len(prevSnapshotList) == 0 { + return nil + } + + curSnapshotMap := make(map[string]*model.VendorStoreSnapshot) + for _, v := range curSnapshotList { + curSnapshotMap[v.GenMapKey()] = v } alarmMap := make(map[int]map[int]*model.VendorStoreSnapshot) storeDetailMap := make(map[int]*dao.StoreDetail) - userMap := make(map[string][]int) + userMap := make(map[string]map[int]int) db := dao.GetDB() - for _, v := range curSnapshotList { - prevSnapshot := prevSnapshotMap[v.GenMapKey()] - if prevSnapshot != nil { - if ((prevSnapshot == nil || prevSnapshot.Status == model.StoreStatusOpened) && v.Status != model.StoreStatusOpened) || - v.CompareOperationTime(prevSnapshot) < 0 { - if alarmMap[v.StoreID] == nil { - alarmMap[v.StoreID] = make(map[int]*model.VendorStoreSnapshot) - storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, v.VendorID) - if storeDetail != nil { - storeDetailMap[v.StoreID] = storeDetail - userMap[storeDetail.Tel1] = append(userMap[storeDetail.Tel1], v.StoreID) - userMap[storeDetail.MarketManPhone] = append(userMap[storeDetail.MarketManPhone], v.StoreID) - userMap[storeDetail.OperatorPhone] = append(userMap[storeDetail.OperatorPhone], v.StoreID) + for _, v := range prevSnapshotList { + curSnapshot := curSnapshotMap[v.GenMapKey()] + if (curSnapshot == nil) || ((v.Status == model.StoreStatusOpened && curSnapshot.Status != model.StoreStatusOpened) || + curSnapshot.CompareOperationTime(v) < 0) { + if alarmMap[v.StoreID] == nil { + alarmMap[v.StoreID] = make(map[int]*model.VendorStoreSnapshot) + storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, v.VendorID) + if storeDetail != nil { + storeDetailMap[v.StoreID] = storeDetail + for _, mobile := range []string{storeDetail.Tel1, storeDetail.MarketManPhone, storeDetail.OperatorPhone} { + if mobile != "" { + if userMap[mobile] == nil { + userMap[mobile] = make(map[int]int) + } + userMap[mobile][v.StoreID] = 1 + } } } - alarmMap[v.StoreID][v.VendorID] = v } + alarmMap[v.StoreID][v.VendorID] = v } } var mobileList []string @@ -1273,14 +1280,15 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p } } if len(mobileList) > 0 { + title := fmt.Sprintf("门店状态变化:%s-->%s", utils.Time2Str(prevSnapshotList[0].SnapshotAt), utils.Time2Str(curSnapshotList[0].SnapshotAt)) task := tasksch.NewParallelTask("SendAlarmVendorSnapshot", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { mobile := batchItemList[0].(string) var dataList []map[string]interface{} captionList := []string{"京西门店ID", "门店名"} isFirstRow := true - for _, storeID := range userMap[mobile] { - snapshotMap := alarmMap[storeID] + for storeID := range userMap[mobile] { + prevSnapshotMap := alarmMap[storeID] data := map[string]interface{}{ "京西门店ID": storeID, "门店名": storeDetailMap[storeID].Store.Name, @@ -1291,22 +1299,16 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p model.VendorChineseNames[vendorID]+"之前状态", model.VendorChineseNames[vendorID]+"当前状态", model.VendorChineseNames[vendorID]+"之前营业时间", model.VendorChineseNames[vendorID]+"当前营业时间") } - - data[model.VendorChineseNames[vendorID]+"ID"] = "" - data[model.VendorChineseNames[vendorID]+"之前状态"] = "" - data[model.VendorChineseNames[vendorID]+"当前状态"] = "" - data[model.VendorChineseNames[vendorID]+"之前营业时间"] = "" - data[model.VendorChineseNames[vendorID]+"当前营业时间"] = "" - - snapshot := snapshotMap[vendorID] - if snapshot != nil { - data[model.VendorChineseNames[vendorID]+"ID"] = snapshot.VendorStoreID + prevSnapshot := prevSnapshotMap[vendorID] + data[model.VendorChineseNames[vendorID]+"ID"] = prevSnapshot.VendorStoreID + data[model.VendorChineseNames[vendorID]+"之前状态"] = model.StoreStatusName[prevSnapshot.Status] + data[model.VendorChineseNames[vendorID]+"当前状态"] = jxutils.OperationTimeStr4VendorStore(prevSnapshot) + if snapshot := curSnapshotMap[prevSnapshot.GenMapKey()]; snapshot != nil { data[model.VendorChineseNames[vendorID]+"当前状态"] = model.StoreStatusName[snapshot.Status] data[model.VendorChineseNames[vendorID]+"当前营业时间"] = jxutils.OperationTimeStr4VendorStore(snapshot) - if p := prevSnapshotMap[snapshot.GenMapKey()]; p != nil { - data[model.VendorChineseNames[vendorID]+"之前状态"] = model.StoreStatusName[p.Status] - data[model.VendorChineseNames[vendorID]+"之前营业时间"] = jxutils.OperationTimeStr4VendorStore(p) - } + } else { + data[model.VendorChineseNames[vendorID]+"当前状态"] = "" + data[model.VendorChineseNames[vendorID]+"当前营业时间"] = "" } } dataList = append(dataList, data) @@ -1314,7 +1316,7 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p isFirstRow = false } excelConf := &excel.Obj2ExcelSheetConfig{ - Title: "平台门店重要信息", + Title: title, Data: dataList, CaptionList: captionList, } @@ -1324,7 +1326,7 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p if err2 != nil { globals.SugarLogger.Warnf("SendAlarmVendorSnapshot, send %s failed with error:%v", key, err2) } - sendStoreStatusInfo2Mobile(mobile, excelURL) + sendStoreStatusInfo2Mobile(mobile, title, excelURL) return nil, nil }, mobileList) tasksch.HandleTask(task, parentTask, true).Run() @@ -1333,10 +1335,10 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p return err } -func sendStoreStatusInfo2Mobile(mobile, excelURL string) { +func sendStoreStatusInfo2Mobile(mobile, title, excelURL string) { if user := userProvider.GetUser(mobile, auth2.AuthTypeMobile); user != nil { globals.SugarLogger.Debugf("sendStoreStatusInfo2Mobile %s:%s", mobile, excelURL) - msg.SendUserMessage(user.GetID(), "平台门店重要信息", fmt.Sprintf("详情见: %s", excelURL)) + msg.SendUserMessage(user.GetID(), title, fmt.Sprintf("详情见: %s", excelURL)) } } @@ -1349,6 +1351,9 @@ func SaveAndSendAlarmVendorSnapshot(ctx *jxcontext.Context, vendorIDs, storeIDs switch step { case 0: curSnapshotList, err = GetStoresVendorSnapshot(ctx, task, vendorIDs, storeIDs) + if len(curSnapshotList) == 0 { + task.Cancel() + } case 1: err = SaveStoresVendorSnapshot(db, curSnapshotAt, curSnapshotList) case 2: