|
@@ -3,6 +3,7 @@ package backend
|
|
|
import (
|
|
|
"context"
|
|
|
"errors"
|
|
|
+ "fmt"
|
|
|
"kpt-pasture/model"
|
|
|
"kpt-pasture/util"
|
|
|
"net/http"
|
|
@@ -10,12 +11,10 @@ import (
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
- "gorm.io/gorm"
|
|
|
-
|
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
|
- "go.uber.org/zap"
|
|
|
-
|
|
|
"gitee.com/xuyiping_admin/pkg/xerr"
|
|
|
+ "go.uber.org/zap"
|
|
|
+ "gorm.io/gorm"
|
|
|
|
|
|
pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
|
|
|
)
|
|
@@ -182,7 +181,9 @@ func (s *StoreEntry) FocusIndicatorsSet(ctx context.Context, req *pasturePb.Inde
|
|
|
}
|
|
|
|
|
|
userFocusIndicators := strings.Join(req.IndicatorsKind, ",")
|
|
|
- if err = s.DB.Model(new(model.SystemUser)).Where("id = ?", userModel.SystemUser.Id).Update("indicators_kinds", userFocusIndicators).Error; err != nil {
|
|
|
+ if err = s.DB.Model(new(model.SystemUser)).
|
|
|
+ Where("id = ?", userModel.SystemUser.Id).
|
|
|
+ Update("indicators_kinds", userFocusIndicators).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|
|
@@ -196,19 +197,20 @@ func (s *StoreEntry) DataWarningSet(ctx context.Context, req *pasturePb.IndexDat
|
|
|
if len(req.WarningDataSet) <= 0 {
|
|
|
return nil
|
|
|
}
|
|
|
- userDataWarningList := make([]*model.DataWarning, 0)
|
|
|
- if err = s.DB.Model(new(model.DataWarning)).
|
|
|
- Where("user_id = ?", userModel.SystemUser.Id).
|
|
|
- Find(&userDataWarningList).Error; err != nil {
|
|
|
- if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
-
|
|
|
- } else {
|
|
|
+ currentUserDataWarningList, err := s.FindDataWarning(ctx, userModel.SystemUser.Id)
|
|
|
+ fmt.Println(currentUserDataWarningList)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ // 如果不存在则新增
|
|
|
+ defaultDataWarningMap, err := s.defaultDataWarningMap(ctx)
|
|
|
+ if err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
+ dataWarningList := model.NewDataWarningList(userModel.SystemUser.Id, req.WarningDataSet, defaultDataWarningMap)
|
|
|
+ fmt.Println(dataWarningList)
|
|
|
+ } else {
|
|
|
+ return xerr.WithStack(err)
|
|
|
}
|
|
|
- /*for _, v := range userDataWarningList {
|
|
|
|
|
|
- }*/
|
|
|
return nil
|
|
|
}
|
|
|
|
|
@@ -218,28 +220,45 @@ func (s *StoreEntry) DataWarningList(ctx context.Context) (*pasturePb.IndexDataW
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- defaultUserDataWarningList, err := s.DefaultDataWarning(ctx)
|
|
|
+ defaultUserDataWarningList, err := s.FindDataWarning(ctx, model.DefaultUserId)
|
|
|
if err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
+ return nil, xerr.Custom("默认预警数据有误,请联系管理员!")
|
|
|
}
|
|
|
- currentUserDataWarningList := make([]*model.DataWarning, 0)
|
|
|
- if err = s.DB.Model(new(model.DataWarning)).
|
|
|
- Where("user_id = ?", userModel.SystemUser.Id).
|
|
|
- Find(¤tUserDataWarningList).Error; err != nil {
|
|
|
+
|
|
|
+ var isExist bool // 判断是否存在自己的设置的数据
|
|
|
+ currentUserDataWarningList, err := s.FindDataWarning(ctx, userModel.SystemUser.Id)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ // 如果用户没有配置自己的预警数据,则使用默认数据
|
|
|
+ isExist = true
|
|
|
+ currentUserDataWarningList = defaultUserDataWarningList
|
|
|
+ } else {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- // 如果用户没有配置自己的预警数据,则使用默认数据
|
|
|
- if len(currentUserDataWarningList) <= 0 {
|
|
|
- currentUserDataWarningList = defaultUserDataWarningList
|
|
|
+ newTime := time.Now().Unix()
|
|
|
+ needUpdateWarningIds := make([]int64, 0)
|
|
|
+ warningMap := make(map[int64]*model.DataWarning)
|
|
|
+ for _, warningData := range currentUserDataWarningList {
|
|
|
+
|
|
|
+ warningMap[warningData.Id] = warningData
|
|
|
+ // 如果预警数据更新时间大于预警条件更新时间,并且更新时间距离当前时间小于2小时,则跳过
|
|
|
+ if warningData.DataUpdateAt > warningData.ConditionUpdateAt && newTime-warningData.DataUpdateAt < int64(2*time.Hour) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ needUpdateWarningIds = append(needUpdateWarningIds, warningData.Id)
|
|
|
}
|
|
|
|
|
|
- if len(currentUserDataWarningList) <= 0 {
|
|
|
- return nil, xerr.Custom("当前用户未配置预警数据,请联系管理员!")
|
|
|
+ // 需要重新计算更新的warningId
|
|
|
+ if len(needUpdateWarningIds) > 0 {
|
|
|
+ s.UpdateWarningData(ctx, needUpdateWarningIds)
|
|
|
+ }
|
|
|
+ if isExist {
|
|
|
+ currentUserDataWarningList, _ = s.FindDataWarning(ctx, model.DefaultUserId)
|
|
|
+ } else {
|
|
|
+ currentUserDataWarningList, _ = s.FindDataWarning(ctx, userModel.SystemUser.Id)
|
|
|
}
|
|
|
|
|
|
- warningIds := make([]int64, 0)
|
|
|
- warningMap := make(map[int64]*model.DataWarning)
|
|
|
+ dataSet := make([]*pasturePb.WarningDataSet, 0)
|
|
|
dataShow := make([]*pasturePb.WarningDataShow, 0)
|
|
|
for _, warningData := range currentUserDataWarningList {
|
|
|
dataUpdateTimeFormat := ""
|
|
@@ -252,37 +271,10 @@ func (s *StoreEntry) DataWarningList(ctx context.Context) (*pasturePb.IndexDataW
|
|
|
Describe: warningData.Description,
|
|
|
DataUpdateTimeFormat: dataUpdateTimeFormat,
|
|
|
})
|
|
|
- warningMap[warningData.Id] = warningData
|
|
|
- // 如果预警数据更新时间大于预警条件更新时间,则跳过
|
|
|
- if warningData.DataUpdateAt > warningData.ConditionUpdateAt {
|
|
|
- continue
|
|
|
- }
|
|
|
- warningIds = append(warningIds, warningData.Id)
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- dataWaningItems := make([]*model.DataWarningItems, 0)
|
|
|
- if err = s.DB.Model(new(model.DataWarningItems)).
|
|
|
- Where("warning_id in (?)", warningIds).
|
|
|
- Find(&dataWaningItems).Error; err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- dataSet := make([]*pasturePb.WarningDataSet, 0)
|
|
|
- for _, v := range dataWaningItems {
|
|
|
- warningData := warningMap[v.WarningId]
|
|
|
- dataSet = append(dataSet, &pasturePb.WarningDataSet{
|
|
|
- WarningId: int32(v.WarningId),
|
|
|
- GroupId: v.GroupId,
|
|
|
- Name: warningData.Name,
|
|
|
- FieldDesc: v.FieldDesc,
|
|
|
- Operator: v.Operator,
|
|
|
- Value: v.Value,
|
|
|
- Kind: warningData.Kind,
|
|
|
- IsShow: pasturePb.IsShow_Ok,
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
+ defaultDataWarningItems, err := s.FindDataWarningItems(ctx, model.DefaultUserId)
|
|
|
+ fmt.Println(defaultDataWarningItems)
|
|
|
return &pasturePb.IndexDataWarningResponse{
|
|
|
Code: http.StatusOK,
|
|
|
Msg: "ok",
|
|
@@ -293,12 +285,63 @@ func (s *StoreEntry) DataWarningList(ctx context.Context) (*pasturePb.IndexDataW
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) DefaultDataWarning(ctx context.Context) ([]*model.DataWarning, error) {
|
|
|
+func (s *StoreEntry) FindDataWarning(ctx context.Context, userId int64) ([]*model.DataWarning, error) {
|
|
|
defaultUserDataWarningList := make([]*model.DataWarning, 0)
|
|
|
if err := s.DB.Model(new(model.DataWarning)).
|
|
|
- Where("user_id = ?", model.DefaultUserId).
|
|
|
+ Where("user_id = ?", userId).
|
|
|
Find(&defaultUserDataWarningList).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
return defaultUserDataWarningList, nil
|
|
|
}
|
|
|
+
|
|
|
+func (s *StoreEntry) FindDataWarningItems(ctx context.Context, userId int64) ([]*model.DataWarningItems, error) {
|
|
|
+ defaultUserDataWarningItemsList := make([]*model.DataWarningItems, 0)
|
|
|
+ if err := s.DB.Model(new(model.DataWarningItems)).
|
|
|
+ Where("user_id = ?", userId).
|
|
|
+ Find(&defaultUserDataWarningItemsList).Error; err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ return defaultUserDataWarningItemsList, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *StoreEntry) defaultDataWarningMap(ctx context.Context) (map[string]*model.DataWarning, error) {
|
|
|
+ defaultDataWarning, err := s.FindDataWarning(ctx, model.DefaultUserId)
|
|
|
+ if err != nil {
|
|
|
+ return nil, xerr.Custom("默认预警数据有误,请联系管理员!")
|
|
|
+ }
|
|
|
+ defaultDataWarningMap := make(map[string]*model.DataWarning)
|
|
|
+ for _, v := range defaultDataWarning {
|
|
|
+ defaultDataWarningMap[v.Kind] = v
|
|
|
+ }
|
|
|
+ return defaultDataWarningMap, nil
|
|
|
+}
|
|
|
+
|
|
|
+// UpdateWarningData 更新计算数据
|
|
|
+func (s *StoreEntry) UpdateWarningData(ctx context.Context, needUpdateWarningIds []int64) {
|
|
|
+ if len(needUpdateWarningIds) <= 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, warningId := range needUpdateWarningIds {
|
|
|
+ query, params, err := s.BuildQuery(warningId)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("UpdateWarningData", zap.Any("BuildQuery", err), zap.Any("warningId", warningId))
|
|
|
+ }
|
|
|
+ if len(query) == 0 || len(params) == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ var count int64
|
|
|
+ if err = s.DB.Model(new(model.Cow)).Where(query, params...).Count(&count).Error; err != nil {
|
|
|
+ zaplog.Error("UpdateWarningData", zap.Any("err", err), zap.Any("query", query), zap.Any("params", params))
|
|
|
+ }
|
|
|
+
|
|
|
+ if err = s.DB.Model(new(model.DataWarning)).
|
|
|
+ Where("id = ?", warningId).
|
|
|
+ Updates(map[string]interface{}{
|
|
|
+ "data_value": count,
|
|
|
+ "data_update_at": time.Now().Unix(),
|
|
|
+ }).Error; err != nil {
|
|
|
+ zaplog.Error("UpdateWarningData", zap.Any("update", err))
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|