123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package backend
- import (
- "context"
- "fmt"
- "kpt-pasture/model"
- "strings"
- "gitee.com/xuyiping_admin/pkg/xerr"
- )
- func (s *StoreEntry) TestDataWaring(ctx context.Context, userId int64) error {
- dataWarningList := make([]*model.DataWarning, 0)
- if err := s.DB.Model(new(model.DataWarning)).Where("user_id = ?", userId).Error; err != nil {
- return xerr.WithStack(err)
- }
- for _, v := range dataWarningList {
- a, params, err := s.BuildQuery(v.Id)
- if err != nil {
- return xerr.WithStack(err)
- }
- var count int64
- if err = s.DB.Model(new(model.Cow)).Where(a, params...).Count(&count).Error; err != nil {
- return xerr.WithStack(err)
- }
- }
- return nil
- }
- func (s *StoreEntry) BuildQuery(warningId int64) (string, []interface{}, error) {
- conditionsMap := make(map[int32][]string)
- params := make([]interface{}, 0)
- res := make([]*model.DataWarningItems, 0)
- if err := s.DB.Model(new(model.DataWarningItems)).
- Where("warning_id = ?", warningId).
- Order("group_id").
- Find(&res).Error; err != nil {
- return "", nil, xerr.WithStack(err)
- }
- for _, v := range res {
- conditionsMap[v.GroupId] = append(conditionsMap[v.GroupId], fmt.Sprintf(" %s %s ? ", v.FieldName, v.Operator))
- params = append(params, v.Value)
- }
- if len(conditionsMap) == 0 {
- return "", nil, xerr.Custom("条件组不能为空")
- }
- var sqlConditions []string
- for _, groupConditions := range conditionsMap {
- if len(groupConditions) == 0 {
- continue // 跳过空组
- }
- // 同一个组内的条件用 OR 拼接
- groupQuery := strings.Join(groupConditions, " OR ")
- // 如果组内有多个条件,用括号包裹
- if len(groupConditions) > 1 {
- groupQuery = fmt.Sprintf("(%s)", groupQuery)
- }
- sqlConditions = append(sqlConditions, groupQuery)
- }
- return strings.Join(sqlConditions, " AND "), params, nil
- }
|