- SendAlarmVendorSnapshot逻辑改为以前一时间点的门店状态为基线,当前状态不对的,或找不到的都报警
- 修复一个可能导致报警条目重复的问题
This commit is contained in:
@@ -1238,34 +1238,41 @@ func SaveStoresVendorSnapshot(db *dao.DaoDB, snapshotAt time.Time, curSnapshotLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, prevSnapshotList, curSnapshotList []*model.VendorStoreSnapshot) (err error) {
|
func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, prevSnapshotList, curSnapshotList []*model.VendorStoreSnapshot) (err error) {
|
||||||
prevSnapshotMap := make(map[string]*model.VendorStoreSnapshot)
|
if len(prevSnapshotList) == 0 {
|
||||||
for _, v := range prevSnapshotList {
|
return nil
|
||||||
prevSnapshotMap[v.GenMapKey()] = v
|
}
|
||||||
|
|
||||||
|
curSnapshotMap := make(map[string]*model.VendorStoreSnapshot)
|
||||||
|
for _, v := range curSnapshotList {
|
||||||
|
curSnapshotMap[v.GenMapKey()] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
alarmMap := make(map[int]map[int]*model.VendorStoreSnapshot)
|
alarmMap := make(map[int]map[int]*model.VendorStoreSnapshot)
|
||||||
storeDetailMap := make(map[int]*dao.StoreDetail)
|
storeDetailMap := make(map[int]*dao.StoreDetail)
|
||||||
userMap := make(map[string][]int)
|
userMap := make(map[string]map[int]int)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
for _, v := range curSnapshotList {
|
for _, v := range prevSnapshotList {
|
||||||
prevSnapshot := prevSnapshotMap[v.GenMapKey()]
|
curSnapshot := curSnapshotMap[v.GenMapKey()]
|
||||||
if prevSnapshot != nil {
|
if (curSnapshot == nil) || ((v.Status == model.StoreStatusOpened && curSnapshot.Status != model.StoreStatusOpened) ||
|
||||||
if ((prevSnapshot == nil || prevSnapshot.Status == model.StoreStatusOpened) && v.Status != model.StoreStatusOpened) ||
|
curSnapshot.CompareOperationTime(v) < 0) {
|
||||||
v.CompareOperationTime(prevSnapshot) < 0 {
|
|
||||||
if alarmMap[v.StoreID] == nil {
|
if alarmMap[v.StoreID] == nil {
|
||||||
alarmMap[v.StoreID] = make(map[int]*model.VendorStoreSnapshot)
|
alarmMap[v.StoreID] = make(map[int]*model.VendorStoreSnapshot)
|
||||||
storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, v.VendorID)
|
storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, v.VendorID)
|
||||||
if storeDetail != nil {
|
if storeDetail != nil {
|
||||||
storeDetailMap[v.StoreID] = storeDetail
|
storeDetailMap[v.StoreID] = storeDetail
|
||||||
userMap[storeDetail.Tel1] = append(userMap[storeDetail.Tel1], v.StoreID)
|
for _, mobile := range []string{storeDetail.Tel1, storeDetail.MarketManPhone, storeDetail.OperatorPhone} {
|
||||||
userMap[storeDetail.MarketManPhone] = append(userMap[storeDetail.MarketManPhone], v.StoreID)
|
if mobile != "" {
|
||||||
userMap[storeDetail.OperatorPhone] = append(userMap[storeDetail.OperatorPhone], v.StoreID)
|
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
|
var mobileList []string
|
||||||
for mobile := range userMap {
|
for mobile := range userMap {
|
||||||
if mobile != "" {
|
if mobile != "" {
|
||||||
@@ -1273,14 +1280,15 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(mobileList) > 0 {
|
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,
|
task := tasksch.NewParallelTask("SendAlarmVendorSnapshot", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
mobile := batchItemList[0].(string)
|
mobile := batchItemList[0].(string)
|
||||||
var dataList []map[string]interface{}
|
var dataList []map[string]interface{}
|
||||||
captionList := []string{"京西门店ID", "门店名"}
|
captionList := []string{"京西门店ID", "门店名"}
|
||||||
isFirstRow := true
|
isFirstRow := true
|
||||||
for _, storeID := range userMap[mobile] {
|
for storeID := range userMap[mobile] {
|
||||||
snapshotMap := alarmMap[storeID]
|
prevSnapshotMap := alarmMap[storeID]
|
||||||
data := map[string]interface{}{
|
data := map[string]interface{}{
|
||||||
"京西门店ID": storeID,
|
"京西门店ID": storeID,
|
||||||
"门店名": storeDetailMap[storeID].Store.Name,
|
"门店名": 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]+"当前状态",
|
||||||
model.VendorChineseNames[vendorID]+"之前营业时间", model.VendorChineseNames[vendorID]+"当前营业时间")
|
model.VendorChineseNames[vendorID]+"之前营业时间", model.VendorChineseNames[vendorID]+"当前营业时间")
|
||||||
}
|
}
|
||||||
|
prevSnapshot := prevSnapshotMap[vendorID]
|
||||||
data[model.VendorChineseNames[vendorID]+"ID"] = ""
|
data[model.VendorChineseNames[vendorID]+"ID"] = prevSnapshot.VendorStoreID
|
||||||
data[model.VendorChineseNames[vendorID]+"之前状态"] = ""
|
data[model.VendorChineseNames[vendorID]+"之前状态"] = model.StoreStatusName[prevSnapshot.Status]
|
||||||
data[model.VendorChineseNames[vendorID]+"当前状态"] = ""
|
data[model.VendorChineseNames[vendorID]+"当前状态"] = jxutils.OperationTimeStr4VendorStore(prevSnapshot)
|
||||||
data[model.VendorChineseNames[vendorID]+"之前营业时间"] = ""
|
if snapshot := curSnapshotMap[prevSnapshot.GenMapKey()]; snapshot != nil {
|
||||||
data[model.VendorChineseNames[vendorID]+"当前营业时间"] = ""
|
|
||||||
|
|
||||||
snapshot := snapshotMap[vendorID]
|
|
||||||
if snapshot != nil {
|
|
||||||
data[model.VendorChineseNames[vendorID]+"ID"] = snapshot.VendorStoreID
|
|
||||||
data[model.VendorChineseNames[vendorID]+"当前状态"] = model.StoreStatusName[snapshot.Status]
|
data[model.VendorChineseNames[vendorID]+"当前状态"] = model.StoreStatusName[snapshot.Status]
|
||||||
data[model.VendorChineseNames[vendorID]+"当前营业时间"] = jxutils.OperationTimeStr4VendorStore(snapshot)
|
data[model.VendorChineseNames[vendorID]+"当前营业时间"] = jxutils.OperationTimeStr4VendorStore(snapshot)
|
||||||
if p := prevSnapshotMap[snapshot.GenMapKey()]; p != nil {
|
} else {
|
||||||
data[model.VendorChineseNames[vendorID]+"之前状态"] = model.StoreStatusName[p.Status]
|
data[model.VendorChineseNames[vendorID]+"当前状态"] = ""
|
||||||
data[model.VendorChineseNames[vendorID]+"之前营业时间"] = jxutils.OperationTimeStr4VendorStore(p)
|
data[model.VendorChineseNames[vendorID]+"当前营业时间"] = ""
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dataList = append(dataList, data)
|
dataList = append(dataList, data)
|
||||||
@@ -1314,7 +1316,7 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p
|
|||||||
isFirstRow = false
|
isFirstRow = false
|
||||||
}
|
}
|
||||||
excelConf := &excel.Obj2ExcelSheetConfig{
|
excelConf := &excel.Obj2ExcelSheetConfig{
|
||||||
Title: "平台门店重要信息",
|
Title: title,
|
||||||
Data: dataList,
|
Data: dataList,
|
||||||
CaptionList: captionList,
|
CaptionList: captionList,
|
||||||
}
|
}
|
||||||
@@ -1324,7 +1326,7 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p
|
|||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
globals.SugarLogger.Warnf("SendAlarmVendorSnapshot, send %s failed with error:%v", key, err2)
|
globals.SugarLogger.Warnf("SendAlarmVendorSnapshot, send %s failed with error:%v", key, err2)
|
||||||
}
|
}
|
||||||
sendStoreStatusInfo2Mobile(mobile, excelURL)
|
sendStoreStatusInfo2Mobile(mobile, title, excelURL)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}, mobileList)
|
}, mobileList)
|
||||||
tasksch.HandleTask(task, parentTask, true).Run()
|
tasksch.HandleTask(task, parentTask, true).Run()
|
||||||
@@ -1333,10 +1335,10 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendStoreStatusInfo2Mobile(mobile, excelURL string) {
|
func sendStoreStatusInfo2Mobile(mobile, title, excelURL string) {
|
||||||
if user := userProvider.GetUser(mobile, auth2.AuthTypeMobile); user != nil {
|
if user := userProvider.GetUser(mobile, auth2.AuthTypeMobile); user != nil {
|
||||||
globals.SugarLogger.Debugf("sendStoreStatusInfo2Mobile %s:%s", mobile, excelURL)
|
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 {
|
switch step {
|
||||||
case 0:
|
case 0:
|
||||||
curSnapshotList, err = GetStoresVendorSnapshot(ctx, task, vendorIDs, storeIDs)
|
curSnapshotList, err = GetStoresVendorSnapshot(ctx, task, vendorIDs, storeIDs)
|
||||||
|
if len(curSnapshotList) == 0 {
|
||||||
|
task.Cancel()
|
||||||
|
}
|
||||||
case 1:
|
case 1:
|
||||||
err = SaveStoresVendorSnapshot(db, curSnapshotAt, curSnapshotList)
|
err = SaveStoresVendorSnapshot(db, curSnapshotAt, curSnapshotList)
|
||||||
case 2:
|
case 2:
|
||||||
|
|||||||
Reference in New Issue
Block a user