Переглянути джерело

双胞胎图表接口平替

songxiaohang 1 рік тому
батько
коміт
812eaa4d25

+ 14 - 10
app/cmd/dtgateway/desc/dtgateway.api

@@ -13,43 +13,47 @@ service dtgateway {
 	@doc "查询working uf信息"
 	@handler WorkingUf
 	get /working-uf/info (DcWorkingReq) returns (CommonResponse)
-	
+
+	@doc "查询working uf信息"
+	@handler WorkingUfByCycle
+	get /working-uf/cycle (WorkingUfByCycleReq) returns (CommonResponse)
+
 	@doc "查询working ro信息"
 	@handler WorkingRo
 	get /working-ro/info (DcWorkingReq) returns (CommonResponse)
-	
+
 	@doc "查询working chest信息"
 	@handler WorkingChest
 	get /working-chest/info (DcWorkingReq) returns (CommonResponse)
-	
+
 	@doc "查询working pump信息"
 	@handler WorkingPump
 	get /working-pump/info (DcWorkingReq) returns (CommonResponse)
-	
+
 	@doc "查询working valve信息"
 	@handler WorkingValve
 	get /working-valve/info (DcWorkingReq) returns (CommonResponse)
-	
+
 	@doc "秒级单点数据批量入库"
 	@handler ItemHistoryDataMultiAdd
 	post /item-history/multi-add (MultiAddItemHistoryDataReq) returns (CommonResponse)
-	
+
 	@doc "点位历史数据查询"
 	@handler ItemHistoryDataList
 	get /item-history/list (ItemHistoryDataListReq) returns (CommonResponse)
-	
+
 	@doc "按时间点位历史数据查询"
 	@handler ItemHistoryDataInfo
 	get /item-history/info (ItemHistoryDataByTimeReq) returns (CommonResponse)
-	
+
 	@doc "按时间点位历史数据最大值最小值查询"
 	@handler ItemHistoryDataMaxMin
 	get /item-history/max-min (ItemHistoryDataMaxMinByTimeReq) returns (CommonResponse)
-	
+
 	@doc "点位查询时间内第一个和最后一个值"
 	@handler ItemHistoryDataFirstLast
 	get /item-history/first-last (ItemHistoryDataByTimeReq) returns (CommonResponse)
-	
+
 	@doc "最新变化值点位数据"
 	@handler ChangeTypeItemData
 	get /item-change/info (ItemHistoryDataByTimeReq) returns (CommonResponse)

+ 10 - 0
app/cmd/dtgateway/desc/dtgateway/dtgateway.api

@@ -60,5 +60,15 @@ type (
         STime string `form:"stime"`
         ETime string `form:"etime"`
     }
+
+    WorkingUfByCycleReq {
+        CommonParams
+        DeviceCode string `form:"device_code"`
+        FilterCycle int64 `form:"filter_cycle"`
+        Step int64 `form:"step"`
+        FilterTimeStart float64 `form:"filter_time_start"`
+        FilterTimeEnd float64 `form:"filter_time_end"`
+        Limit int64 `form:"limit"`
+    }
 )
 

+ 28 - 0
app/cmd/dtgateway/internal/handler/dtgateway/workingUfByCycleHandler.go

@@ -0,0 +1,28 @@
+package dtgateway
+
+import (
+	"net/http"
+
+	"GtDataStore/app/cmd/dtgateway/internal/logic/dtgateway"
+	"GtDataStore/app/cmd/dtgateway/internal/svc"
+	"GtDataStore/app/cmd/dtgateway/internal/types"
+	"github.com/zeromicro/go-zero/rest/httpx"
+)
+
+func WorkingUfByCycleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.WorkingUfByCycleReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := dtgateway.NewWorkingUfByCycleLogic(r.Context(), svcCtx)
+		resp, err := l.WorkingUfByCycle(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 5 - 0
app/cmd/dtgateway/internal/handler/routes.go

@@ -20,6 +20,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 					Path:    "/working-uf/info",
 					Handler: dtgateway.WorkingUfHandler(serverCtx),
 				},
+				{
+					Method:  http.MethodGet,
+					Path:    "/working-uf/cycle",
+					Handler: dtgateway.WorkingUfByCycleHandler(serverCtx),
+				},
 				{
 					Method:  http.MethodGet,
 					Path:    "/working-ro/info",

+ 47 - 0
app/cmd/dtgateway/internal/logic/dtgateway/workingUfByCycleLogic.go

@@ -0,0 +1,47 @@
+package dtgateway
+
+import (
+	"GtDataStore/app/cmd/organization/pb"
+	"GtDataStore/common/xerr"
+	"context"
+
+	"GtDataStore/app/cmd/dtgateway/internal/svc"
+	"GtDataStore/app/cmd/dtgateway/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type WorkingUfByCycleLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewWorkingUfByCycleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *WorkingUfByCycleLogic {
+	return &WorkingUfByCycleLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *WorkingUfByCycleLogic) WorkingUfByCycle(req *types.WorkingUfByCycleReq) (resp *types.CommonResponse, err error) {
+	list, err := l.svcCtx.OrganizationRpc.FindWorkingUfByCycle(l.ctx, &pb.FindWorkingUfByCycleReq{
+		ProjectId:       req.ProjectId,
+		DeviceCode:      req.DeviceCode,
+		FilterCycle:     req.FilterCycle,
+		Step:            req.Step,
+		FilterTimeStart: req.FilterTimeStart,
+		FilterTimeEnd:   req.FilterTimeEnd,
+		Limit:           req.Limit,
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	return &types.CommonResponse{
+		Code: xerr.OK,
+		Msg:  xerr.MapErrMsg(xerr.OK),
+		Data: list,
+	}, nil
+}

+ 2 - 3
app/cmd/dtgateway/internal/middleware/datasignMiddleware.go

@@ -4,7 +4,6 @@ import (
 	"GtDataStore/app/cmd/dtgateway/internal/config"
 	"GtDataStore/app/model"
 	"GtDataStore/common/crypto/md5"
-	"GtDataStore/common/utils"
 	"GtDataStore/common/xerr"
 	"bytes"
 	"context"
@@ -156,9 +155,9 @@ func (m *DataSignMiddleware) sortS2(s2 string) (string, error) {
 		return "", err
 	}
 
-	smi := utils.SortMapByKey(mi)
+	//smi := utils.SortMapByKey(mi)
 
-	if bs, err := json.Marshal(smi); err != nil {
+	if bs, err := json.Marshal(mi); err != nil {
 		return "", err
 	} else {
 		return string(bs), nil

+ 10 - 0
app/cmd/dtgateway/internal/types/types.go

@@ -60,3 +60,13 @@ type ItemHistoryDataMaxMinByTimeReq struct {
 	STime    string `form:"stime"`
 	ETime    string `form:"etime"`
 }
+
+type WorkingUfByCycleReq struct {
+	CommonParams
+	DeviceCode      string  `form:"device_code"`
+	FilterCycle     int64   `form:"filter_cycle"`
+	Step            int64   `form:"step"`
+	FilterTimeStart float64 `form:"filter_time_start"`
+	FilterTimeEnd   float64 `form:"filter_time_end"`
+	Limit           int64   `form:"limit"`
+}

+ 2 - 2
app/cmd/organization/etc/organization.test.yaml

@@ -13,8 +13,8 @@ Log:
 GtServerIp: 47.96.12.136:8788
 
 DtDataStoreDB:
-  DataSource: ws_data:c712f89fc4f8edaf30e41b828f4e3d26@tcp(192.168.60.201:4000)/ws_data?charset=utf8mb4&parseTime=True&loc=&loc=Asia%2FShanghai
-#  DataSource: ws_data:c712f89fc4f8edaf30e41b828f4e3d26@tcp(172.16.0.195:4000)/ws_data?charset=utf8mb4&parseTime=True&loc=&loc=Asia%2FShanghai
+#  DataSource: ws_data:c712f89fc4f8edaf30e41b828f4e3d26@tcp(192.168.60.201:4000)/ws_data?charset=utf8mb4&parseTime=True&loc=&loc=Asia%2FShanghai
+  DataSource: ws_data:c712f89fc4f8edaf30e41b828f4e3d26@tcp(172.16.0.195:4000)/ws_data?charset=utf8mb4&parseTime=True&loc=&loc=Asia%2FShanghai
 
 Redis:
   Host: 47.96.12.136:6379

+ 71 - 0
app/cmd/organization/internal/logic/findWorkingUfByCycleLogic.go

@@ -0,0 +1,71 @@
+package logic
+
+import (
+	"context"
+
+	"GtDataStore/app/cmd/organization/internal/svc"
+	"GtDataStore/app/cmd/organization/pb"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type FindWorkingUfByCycleLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewFindWorkingUfByCycleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *FindWorkingUfByCycleLogic {
+	return &FindWorkingUfByCycleLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+func (l *FindWorkingUfByCycleLogic) FindWorkingUfByCycle(in *pb.FindWorkingUfByCycleReq) (*pb.FindWorkingUfByCycleResp, error) {
+	res, err := l.svcCtx.WorkingUf.FindForCycleAndStep(l.ctx, in.ProjectId, in.DeviceCode, in.FilterCycle, in.Step, in.FilterTimeStart, in.FilterTimeEnd, in.Limit)
+	if err != nil {
+		return nil, err
+	}
+
+	list := make([]*pb.WorkingUf, len(res))
+
+	for i, one := range res {
+		list[i] = &pb.WorkingUf{
+			Id:               one.Id,
+			ProjectId:        one.ProjectId,
+			DeviceCode:       one.DeviceCode,
+			WaterTemperature: one.WaterTemperature,
+			FeedFlow:         one.FeedFlow,
+			ConFlow:          one.ConFlow,
+			ProductFlow:      one.ProductFlow,
+			FeedPressure:     one.FeedPressure,
+			ConPressure:      one.ConPressure,
+			ProductPressure:  one.ProductPressure,
+			Tmp:              one.Tmp,
+			Flux:             one.Flux,
+			FeedWqTurbidity:  one.FeedWqTurbidity,
+			FeedWqPh:         one.FeedWqPh,
+			ProductWqPh:      one.ProductWqPh,
+			FeedWqAl:         one.FeedWqAl,
+			ProductWqAl:      one.ProductWqAl,
+			FeedWqFe:         one.FeedWqFe,
+			ProductWqFe:      one.ProductWqFe,
+			FeedWqMn:         one.FeedWqMn,
+			ProductWqMn:      one.ProductWqMn,
+			FeedWqSio2:       one.FeedWqSio2,
+			ProductWqSio2:    one.ProductWqSio2,
+			FeedWqCod:        one.FeedWqCod,
+			ProductWqCod:     one.ProductWqCod,
+			FeedWqP:          one.FeedWqP,
+			ProductWqP:       one.ProductWqP,
+			Step:             one.Step,
+			FilterCycle:      one.FilterCycle,
+			FilterTime:       one.FilterTime,
+			CTime:            one.CTime.Format("2006-01-02 15:04:05"),
+		}
+	}
+
+	return &pb.FindWorkingUfByCycleResp{List: list}, nil
+}

+ 5 - 0
app/cmd/organization/internal/server/organizationServer.go

@@ -27,6 +27,11 @@ func (s *OrganizationServer) GetWorkingUfByCode(ctx context.Context, in *pb.DcWo
 	return l.GetWorkingUfByCode(in)
 }
 
+func (s *OrganizationServer) FindWorkingUfByCycle(ctx context.Context, in *pb.FindWorkingUfByCycleReq) (*pb.FindWorkingUfByCycleResp, error) {
+	l := logic.NewFindWorkingUfByCycleLogic(ctx, s.svcCtx)
+	return l.FindWorkingUfByCycle(in)
+}
+
 func (s *OrganizationServer) GetWorkingRoByCode(ctx context.Context, in *pb.DcWorkingReq) (*pb.GetWorkingRoByCodeResp, error) {
 	l := logic.NewGetWorkingRoByCodeLogic(ctx, s.svcCtx)
 	return l.GetWorkingRoByCode(in)

+ 21 - 1
app/cmd/organization/organization.proto

@@ -131,8 +131,12 @@ message WorkingUf{
   double        product_wq_p = 27;      // 产水水质:磷
   // @gotags: json:"step"
   int64         step = 28;              // 设备当前步序值
+  // @gotags: json:"filter_time"
+  double filter_time = 29;
+  // @gotags: json:"filter_cycle"
+  int64 filter_cycle = 30;
   // @gotags: json:"c_time"
-  string        c_time = 29;
+  string        c_time = 31;
 }
 
 message WorkingNf{
@@ -521,6 +525,21 @@ message GetWorkingUfByCodeResp{
   repeated WorkingUf list = 1;
 }
 
+message FindWorkingUfByCycleReq{
+  int64 project_id = 1;
+  string device_code = 2;
+  int64 filter_cycle = 3;
+  int64 step = 4;
+  double filter_time_start = 5;
+  double filter_time_end = 6;
+  int64 limit = 7;
+}
+
+message FindWorkingUfByCycleResp{
+  // @gotags: json:"list"
+  repeated WorkingUf list = 1;
+}
+
 message GetWorkingRoByCodeResp{
   // @gotags: json:"list"
   repeated WorkingRo list = 1;
@@ -553,6 +572,7 @@ message GetWorkingChestByCodeResp{
 
 service Organization {
   rpc GetWorkingUfByCode(DcWorkingReq) returns(GetWorkingUfByCodeResp);
+  rpc FindWorkingUfByCycle(FindWorkingUfByCycleReq) returns(FindWorkingUfByCycleResp);
   rpc GetWorkingRoByCode(DcWorkingReq) returns(GetWorkingRoByCodeResp);
   rpc GetWorkingChestByCode(DcWorkingReq) returns(GetWorkingChestByCodeResp);
   rpc GetWorkingPumpByCode(DcWorkingReq) returns(GetWorkingPumpByCodeResp);

+ 8 - 0
app/cmd/organization/organization/organization.go

@@ -15,6 +15,8 @@ import (
 type (
 	ChangeTypeItemHistoryDataResp = pb.ChangeTypeItemHistoryDataResp
 	DcWorkingReq                  = pb.DcWorkingReq
+	FindWorkingUfByCycleReq       = pb.FindWorkingUfByCycleReq
+	FindWorkingUfByCycleResp      = pb.FindWorkingUfByCycleResp
 	GetWorkingChestByCodeResp     = pb.GetWorkingChestByCodeResp
 	GetWorkingMfByCodeResp        = pb.GetWorkingMfByCodeResp
 	GetWorkingNfByCodeResp        = pb.GetWorkingNfByCodeResp
@@ -44,6 +46,7 @@ type (
 
 	Organization interface {
 		GetWorkingUfByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingUfByCodeResp, error)
+		FindWorkingUfByCycle(ctx context.Context, in *FindWorkingUfByCycleReq, opts ...grpc.CallOption) (*FindWorkingUfByCycleResp, error)
 		GetWorkingRoByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingRoByCodeResp, error)
 		GetWorkingChestByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingChestByCodeResp, error)
 		GetWorkingPumpByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingPumpByCodeResp, error)
@@ -73,6 +76,11 @@ func (m *defaultOrganization) GetWorkingUfByCode(ctx context.Context, in *DcWork
 	return client.GetWorkingUfByCode(ctx, in, opts...)
 }
 
+func (m *defaultOrganization) FindWorkingUfByCycle(ctx context.Context, in *FindWorkingUfByCycleReq, opts ...grpc.CallOption) (*FindWorkingUfByCycleResp, error) {
+	client := pb.NewOrganizationClient(m.cli.Conn())
+	return client.FindWorkingUfByCycle(ctx, in, opts...)
+}
+
 func (m *defaultOrganization) GetWorkingRoByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingRoByCodeResp, error) {
 	client := pb.NewOrganizationClient(m.cli.Conn())
 	return client.GetWorkingRoByCode(ctx, in, opts...)

Різницю між файлами не показано, бо вона завелика
+ 563 - 378
app/cmd/organization/pb/organization.pb.go


+ 37 - 0
app/cmd/organization/pb/organization_grpc.pb.go

@@ -20,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion7
 
 const (
 	Organization_GetWorkingUfByCode_FullMethodName             = "/pb.Organization/GetWorkingUfByCode"
+	Organization_FindWorkingUfByCycle_FullMethodName           = "/pb.Organization/FindWorkingUfByCycle"
 	Organization_GetWorkingRoByCode_FullMethodName             = "/pb.Organization/GetWorkingRoByCode"
 	Organization_GetWorkingChestByCode_FullMethodName          = "/pb.Organization/GetWorkingChestByCode"
 	Organization_GetWorkingPumpByCode_FullMethodName           = "/pb.Organization/GetWorkingPumpByCode"
@@ -38,6 +39,7 @@ const (
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type OrganizationClient interface {
 	GetWorkingUfByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingUfByCodeResp, error)
+	FindWorkingUfByCycle(ctx context.Context, in *FindWorkingUfByCycleReq, opts ...grpc.CallOption) (*FindWorkingUfByCycleResp, error)
 	GetWorkingRoByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingRoByCodeResp, error)
 	GetWorkingChestByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingChestByCodeResp, error)
 	GetWorkingPumpByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingPumpByCodeResp, error)
@@ -68,6 +70,15 @@ func (c *organizationClient) GetWorkingUfByCode(ctx context.Context, in *DcWorki
 	return out, nil
 }
 
+func (c *organizationClient) FindWorkingUfByCycle(ctx context.Context, in *FindWorkingUfByCycleReq, opts ...grpc.CallOption) (*FindWorkingUfByCycleResp, error) {
+	out := new(FindWorkingUfByCycleResp)
+	err := c.cc.Invoke(ctx, Organization_FindWorkingUfByCycle_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *organizationClient) GetWorkingRoByCode(ctx context.Context, in *DcWorkingReq, opts ...grpc.CallOption) (*GetWorkingRoByCodeResp, error) {
 	out := new(GetWorkingRoByCodeResp)
 	err := c.cc.Invoke(ctx, Organization_GetWorkingRoByCode_FullMethodName, in, out, opts...)
@@ -172,6 +183,7 @@ func (c *organizationClient) ItemHistoryDataForChart(ctx context.Context, in *It
 // for forward compatibility
 type OrganizationServer interface {
 	GetWorkingUfByCode(context.Context, *DcWorkingReq) (*GetWorkingUfByCodeResp, error)
+	FindWorkingUfByCycle(context.Context, *FindWorkingUfByCycleReq) (*FindWorkingUfByCycleResp, error)
 	GetWorkingRoByCode(context.Context, *DcWorkingReq) (*GetWorkingRoByCodeResp, error)
 	GetWorkingChestByCode(context.Context, *DcWorkingReq) (*GetWorkingChestByCodeResp, error)
 	GetWorkingPumpByCode(context.Context, *DcWorkingReq) (*GetWorkingPumpByCodeResp, error)
@@ -193,6 +205,9 @@ type UnimplementedOrganizationServer struct {
 func (UnimplementedOrganizationServer) GetWorkingUfByCode(context.Context, *DcWorkingReq) (*GetWorkingUfByCodeResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingUfByCode not implemented")
 }
+func (UnimplementedOrganizationServer) FindWorkingUfByCycle(context.Context, *FindWorkingUfByCycleReq) (*FindWorkingUfByCycleResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindWorkingUfByCycle not implemented")
+}
 func (UnimplementedOrganizationServer) GetWorkingRoByCode(context.Context, *DcWorkingReq) (*GetWorkingRoByCodeResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetWorkingRoByCode not implemented")
 }
@@ -257,6 +272,24 @@ func _Organization_GetWorkingUfByCode_Handler(srv interface{}, ctx context.Conte
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Organization_FindWorkingUfByCycle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindWorkingUfByCycleReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(OrganizationServer).FindWorkingUfByCycle(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Organization_FindWorkingUfByCycle_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(OrganizationServer).FindWorkingUfByCycle(ctx, req.(*FindWorkingUfByCycleReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _Organization_GetWorkingRoByCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(DcWorkingReq)
 	if err := dec(in); err != nil {
@@ -466,6 +499,10 @@ var Organization_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "GetWorkingUfByCode",
 			Handler:    _Organization_GetWorkingUfByCode_Handler,
 		},
+		{
+			MethodName: "FindWorkingUfByCycle",
+			Handler:    _Organization_FindWorkingUfByCycle_Handler,
+		},
 		{
 			MethodName: "GetWorkingRoByCode",
 			Handler:    _Organization_GetWorkingRoByCode_Handler,

+ 15 - 0
app/model/dcWorkingUfModel_gen.go

@@ -24,6 +24,7 @@ var (
 
 type (
 	dcWorkingUfModel interface {
+		FindForCycleAndStep(ctx context.Context, projectId int64, deviceCode string, filterCycle int64, step int64, sFilterTime, eFilterTime float64, limit int64) ([]DcWorkingUf, error)
 		MultiInsert(ctx context.Context, datas []DcWorkingUf) (int64, error)
 		Insert(ctx context.Context, data *DcWorkingUf) (sql.Result, error)
 		FindOne(ctx context.Context, id int64) (*DcWorkingUf, error)
@@ -91,6 +92,20 @@ func (m *defaultDcWorkingUfModel) Delete(ctx context.Context, id int64) error {
 	return err
 }
 
+func (m *defaultDcWorkingUfModel) FindForCycleAndStep(ctx context.Context, projectId int64, deviceCode string, filterCycle int64, step int64, sFilterTime, eFilterTime float64, limit int64) ([]DcWorkingUf, error) {
+	query := fmt.Sprintf("select %s from %s where `project_id`=? and `device_code`=? and `filter_cycle`=? and `step`=? and `filter_time` BETWEEN ? and ? order by id desc limit %d", dcWorkingUfRows, m.table, limit)
+	var resp []DcWorkingUf
+	err := m.conn.QueryRowsCtx(ctx, &resp, query, projectId, deviceCode, filterCycle, step, sFilterTime, eFilterTime)
+	switch err {
+	case nil:
+		return resp, nil
+	case sqlc.ErrNotFound:
+		return nil, ErrNotFound
+	default:
+		return nil, err
+	}
+}
+
 func (m *defaultDcWorkingUfModel) FindOne(ctx context.Context, id int64) (*DcWorkingUf, error) {
 	query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", dcWorkingUfRows, m.table)
 	var resp DcWorkingUf

Деякі файли не було показано, через те що забагато файлів було змінено