123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package backend
- import (
- "context"
- "fmt"
- "kpt-pasture/model"
- "kpt-pasture/util"
- "strings"
- "time"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- "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) NeckRingOriginalAsync(ctx context.Context, pastureId int64, pagination *pasturePb.PaginationModel) error {
- pastureData := &model.AppPastureList{}
- if err := s.DB.Model(new(model.AppPastureList)).
- Where("id = ?", pastureId).
- Where("is_show = ?", pasturePb.IsShow_Ok).
- First(pastureData).Error; err != nil {
- return xerr.WithStack(err)
- }
- hActiveOriginalList := make([]*model.HActiveOriginal, 0)
- if err := s.DB.Model(new(model.HActiveOriginal)).
- Where("intPastureId = ?", pastureId).
- Limit(int(pagination.PageSize)).
- Offset(int(pagination.PageOffset)).
- Find(&hActiveOriginalList).Error; err != nil {
- return xerr.WithStack(err)
- }
- neckRingOriginalList := make([]*model.NeckRingOriginal, 0)
- for _, v := range hActiveOriginalList {
- _, hours := util.GetNeckRingActiveTimer(v.FrameId)
- activeDate := ""
- if v.HeatDate != "" && len(v.HeatDate) > 10 {
- hd, _ := time.Parse(time.RFC3339, v.HeatDate)
- activeDate = hd.Format(model.LayoutDate2)
- }
- var count int64
- if err := s.DB.Model(new(model.NeckRingOriginal)).
- Where("pasture_id = ?", pastureId).
- Where("neck_ring_number = ?", v.EID1).
- Where("frameid = ?", v.FrameId).
- Where("active_date = ?", activeDate).
- Count(&count).Error; err != nil {
- return xerr.WithStack(err)
- }
- if count > 0 {
- continue
- }
- neckRingOriginalList = append(neckRingOriginalList,
- &model.NeckRingOriginal{
- PastureId: pastureId,
- Uuid: fmt.Sprintf("%d", v.UUID),
- NeckRingNumber: fmt.Sprintf("%d", v.EID1),
- ActiveDate: activeDate,
- Hours: int32(hours),
- Frameid: v.FrameId,
- Rumina: v.Rumina,
- Intake: v.Intake,
- Inactive: v.Inactive,
- Gasp: v.Gasp,
- High: v.High,
- Active: v.Active,
- Other: v.Other,
- FirmwareVersion: 10,
- HardwareVersion: 57,
- Remain: v.Remain,
- Voltage: v.Voltage,
- RestartReason: 0,
- Upper: 1,
- ActiveDateType: pasturePb.ActiveTimeType_Twenty_Minutes,
- IsShow: pasturePb.IsShow_No,
- Imei: fmt.Sprintf("%d", v.Imei),
- ReceiveNumber: fmt.Sprintf("%d", v.Imei),
- })
- }
- if len(neckRingOriginalList) > 0 {
- if err := s.DB.Model(new(model.NeckRingOriginal)).
- Create(neckRingOriginalList).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
- }
|