Browse Source

sheep: tmr_gear

Yi 11 months ago
parent
commit
531ad5e652
8 changed files with 177 additions and 46 deletions
  1. 1 1
      go.mod
  2. 8 0
      go.sum
  3. 25 0
      http/handle/api/new_api.go
  4. 1 0
      http/routers/new_api.go
  5. 0 29
      migration/v0002_yq_bar.sql
  6. 18 8
      models/tmr_gear.go
  7. 72 8
      module/sheep.go
  8. 52 0
      service/sheep/tmr_gear.go

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module tmr-watch
 go 1.16
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20240412073745-a781895d2a7f
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20240416053821-34e917f3e0dc
 	gitee.com/xuyiping_admin/pkg v0.0.0-20230816061144-c1f079802584
 	github.com/360EntSecGroup-Skylar/excelize v1.4.1
 	github.com/Anderson-Lu/gofasion v0.0.0-20190530065914-6a05b679ee48

+ 8 - 0
go.sum

@@ -731,6 +731,14 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20240412063848-81e2e5859cdb h1:MGLoKD2y
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240412063848-81e2e5859cdb/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240412073745-a781895d2a7f h1:FO2Z0evzd6UoclJKhVWZ8lmfPKHB+iHOH2VGzkrqYGQ=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240412073745-a781895d2a7f/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416015656-fbeb7db82cd9 h1:6BjgdgPfG//H9c7Kt2j0TVevVn8o9jM86D9u+IQd3Dc=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416015656-fbeb7db82cd9/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416020553-04b06f435c78 h1:W5jDREaIr4siefgYqPuHe+eyyVohmsI+VuMqUBQakwY=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416020553-04b06f435c78/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416035941-597a2e046a88 h1:+Pz9KmEps5zBwpAk3xw8SzcJkx9J8Tinuve8b5ISGlc=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416035941-597a2e046a88/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416053821-34e917f3e0dc h1:Y1EuiS0zIIXGyyUjO/+XmiSs2mxLa9I/49DXSc/+dkY=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240416053821-34e917f3e0dc/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 gitee.com/xuyiping_admin/pkg v0.0.0-20230816061144-c1f079802584 h1:5RE5yrMMvnDITrnoX821mFl7dNYfsFA1osDobUV/TDo=
 gitee.com/xuyiping_admin/pkg v0.0.0-20230816061144-c1f079802584/go.mod h1:VQ7WztVDQRlXE1dUu/Yqo3ZdhKsfv7IGJtV+vqNqJVw=
 github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks=

+ 25 - 0
http/handle/api/new_api.go

@@ -118,3 +118,28 @@ func UpdateTmrGear(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+func UseGear(c *gin.Context) {
+	var req operationPb.UseGearRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.TmrId, valid.Required),
+		valid.Field(&req.Id, valid.Required),
+		valid.Field(&req.TmrId, valid.Required),
+	); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	data, err := sheep.UseGear(c, &req)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, data)
+}

+ 1 - 0
http/routers/new_api.go

@@ -16,5 +16,6 @@ func NewAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		newApiGroup.POST("feet_template/version", api.GetFeetTemplateVersion)
 		newApiGroup.POST("feet_template/upgrade", api.FeetTemplateUpgradeNewVersion)
 		newApiGroup.POST("tmr/gear", api.UpdateTmrGear)
+		newApiGroup.POST("user/gear", api.UseGear)
 	}
 }

+ 0 - 29
migration/v0002_yq_bar.sql

@@ -57,35 +57,6 @@ insert into apisql(sqlname,sqlstr,params) values ('getPenList','select id,pen fr
 
 ALTER TABLE `tmr`  ADD COLUMN `volume_rate` decimal(12,5) NOT NULL COMMENT '撒料机每转体积';
 
-
-update apisql SET sqlstr = "SELECT sort,fname,weight,LENGTH,bcode,ccount,speed,gear,useinbar FROM
-(SELECT
-a.sort,a.fname,a.lweight weight,a.fpid,
-IF(a.useinbartype=0,'转投剩料',
-IF(a.useinbartype=1,'撒','继续饲喂')
-) useinbar,
-CONCAT(a.fbarid) fbarid,
-CONCAT(a.pid) pid,
-b.bcode,b.`length`,c.`ccount`,d.speed,
-#(a.`lweight` /  b.length) as  l1,
-#(a.`lweight` *  f.`volume`) / d.volume_rate as l3,
-#(60 * 60 / 1000 / d.speed) as l4,
-(((a.`lweight` /  b.length) * f.`volume`) / d.volume_rate) / (60 * 60 / 1000 / d.speed)  AS gear
-FROM
-  downloadplandtl2 a
-  JOIN bar b ON a.`fbarid` = b.`id`
-  JOIN feedp c ON c.`barid` = a.`fbarid`
-  JOIN downloadedplan g ON a.pid = g.id
-  JOIN tmr d ON d.id = g.tmrid
-  JOIN feedtemplet f ON c.`ftid` = f.id
-WHERE a.pastureid = ?
- AND a.pid= ?
- AND d.id = ?
-AND (IF(?=0,a.useinbartype IN(0,2),a.useinbartype = 1 ) OR ?='')
-ORDER BY a.sort
-) AS B",params = 'pastureid,id,tmrId,useinbartype,useinbartype'
-wHERE sqlname = 'getDownloadplandt2ListV2' and enable = 1;
-
 # 新增圈舍
 update apisql SET sqlstr = "INSERT INTO bar
 (pastureid,bcode,bname,allowratio,autozone,autosecond,autosecondname,isstart,enable,sort,AUFNR,pen,length)

+ 18 - 8
models/tmr_gear.go

@@ -8,13 +8,12 @@ import (
 )
 
 type TmrGear struct {
-	Id        int64                   `json:"id"`
-	TmrId     int64                   `json:"tmr_id"`
-	Gear      string                  `json:"name"`
-	Rev       int64                   `json:"rev"`
-	IsDelete  operationPb.IsShow_Kind `json:"is_delete"`
-	CreatedAt int64                   `json:"created_at"`
-	UpdatedAt int64                   `json:"updated_at"`
+	Id        int64  `json:"id"`
+	TmrId     int64  `json:"tmr_id"`
+	Gear      string `json:"name"`
+	Rev       int64  `json:"rev"`
+	CreatedAt int64  `json:"created_at"`
+	UpdatedAt int64  `json:"updated_at"`
 }
 
 func (t *TmrGear) TableName() string {
@@ -31,10 +30,21 @@ func NewTmrGearList(tmrId int64, req *operationPb.UpdateOrCreateTmrGearRequest)
 			TmrId:     tmrId,
 			Gear:      fmt.Sprintf("%d", i+1),
 			Rev:       int64(v.Rev),
-			IsDelete:  operationPb.IsShow_OK,
 			CreatedAt: time.Now().Unix(),
 			UpdatedAt: time.Now().Unix(),
 		}
 	}
 	return res
 }
+
+type TmrGearDetail struct {
+	BCode    string  `json:"bcode"`
+	CCount   int32   `json:"ccount"`
+	FName    string  `json:"fname"`
+	GearRate float64 `json:"gear_rate"`
+	Length   int32   `json:"length"`
+	Sort     int32   `json:"sort"`
+	Speed    float64 `json:"speed"`
+	UseInBar string  `json:"useinbar"`
+	Weight   float64 `json:"weight"`
+}

+ 72 - 8
module/sheep.go

@@ -3,20 +3,20 @@ package module
 import (
 	"context"
 	"errors"
+	"fmt"
+	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 	"gitee.com/xuyiping_admin/pkg/xerr"
 	"github.com/xormplus/xorm"
 	"strconv"
-	"time"
 	"tmr-watch/http/handle/restful"
 	"tmr-watch/models"
-
-	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 )
 
 // SearchTrmGearByTmrId 查询撒料电机档位数据
 func SearchTrmGearByTmrId(ctx context.Context, tmrId int64) ([]*models.TmrGear, error) {
 	res := make([]*models.TmrGear, 0)
-	if err := restful.Engine.NewSession().Table(new(models.TmrGear).TableName()).Where("is_delete = ?", operationPb.IsShow_OK).
+	if err := restful.Engine.NewSession().Table(new(models.TmrGear).TableName()).
+		Where("is_delete = ?", operationPb.IsShow_OK).
 		Where("tmr_id = ?", tmrId).Find(&res); err != nil {
 		if !errors.Is(err, xorm.ErrNotExist) {
 			return nil, err
@@ -40,10 +40,7 @@ func CreateOrUpdateTmrGear(ctx context.Context, req *operationPb.UpdateOrCreateT
 	}
 
 	if len(tmrGearList) >= 1 {
-		if _, err = tx.Table(new(models.TmrGear).TableName()).Where("tmr_id = ?", req.TmrId).Update(map[string]interface{}{
-			"is_delete":  operationPb.IsShow_NO,
-			"updated_at": time.Now().Unix(),
-		}); err != nil {
+		if _, err = tx.Table(new(models.TmrGear).TableName()).Where("tmr_id = ?", req.TmrId).Delete(new(models.TmrGear)); err != nil {
 			tx.Rollback()
 			return xerr.WithStack(err)
 		}
@@ -56,3 +53,70 @@ func CreateOrUpdateTmrGear(ctx context.Context, req *operationPb.UpdateOrCreateT
 	}
 	return tx.Commit()
 }
+
+func UseTmrGear(ctx context.Context, req *operationPb.UseGearRequest) ([]*models.TmrGearDetail, error) {
+	sqlName := fmt.Sprintf(
+		`SELECT sort,fname,weight,LENGTH,bcode,ccount,speed,gear_rate,useinbar FROM 
+		(SELECT a.sort,a.fname,a.lweight weight,a.fpid, IF(a.useinbartype=0,'转投剩料', IF(a.useinbartype=1,'撒','继续饲喂') ) useinbar, 
+		CONCAT(a.fbarid) fbarid,
+		CONCAT(a.pid) pid,
+		b.bcode,
+		b.length,
+		c.ccount,
+		d.speed,
+		(((a.lweight /  b.length) * f.volume) / d.volume_rate) / (60 * 60 / 1000 / d.speed)  AS gear_rate 
+		FROM  downloadplandtl2 a  
+		JOIN bar b ON a.fbarid = b.id  
+		JOIN feedp c ON c.barid = a.fbarid  
+		JOIN downloadedplan g ON a.pid = g.id  
+		JOIN tmr d ON d.id = g.tmrid  
+		JOIN feedtemplet f ON c.ftid = f.id
+		WHERE a.pastureid = %s
+		AND a.pid= %s
+		AND d.id = %d
+		ORDER BY a.sort) AS B`, req.PastureId, req.Id, req.TmrId)
+
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	resultList, err := tx.QueryString(sqlName)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	tmrGearDetailList := make([]*models.TmrGearDetail, 0)
+	for _, v := range resultList {
+		sort, _ := strconv.ParseInt(v["sort"], 10, 64)
+		fname := v["fname"]
+		bcode := v["bcode"]
+		weight, _ := strconv.ParseFloat(v["weight"], 64)
+		length, _ := strconv.ParseInt(v["length"], 10, 64)
+		ccount, _ := strconv.ParseInt(v["ccount"], 10, 64)
+		speed, _ := strconv.ParseFloat(v["speed"], 64)
+		gearRate, _ := strconv.ParseFloat(v["gear_rate"], 64)
+
+		tmrGearDetailList = append(tmrGearDetailList, &models.TmrGearDetail{
+			Sort:     int32(sort),
+			FName:    fname,
+			Weight:   weight,
+			Length:   int32(length),
+			BCode:    bcode,
+			CCount:   int32(ccount),
+			Speed:    speed,
+			GearRate: gearRate,
+		})
+	}
+
+	return tmrGearDetailList, nil
+}
+
+func TmrGearListByTmrId(tmrId int64) ([]*models.TmrGear, error) {
+	tmrGearList := make([]*models.TmrGear, 0)
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+	err := tx.Table(new(models.TmrGear).TableName()).Where("tmr_id = ?", tmrId).Select("*").Find(&tmrGearList)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+	return tmrGearList, nil
+}

+ 52 - 0
service/sheep/tmr_gear.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 	"gitee.com/xuyiping_admin/pkg/xerr"
+	"net/http"
 	"tmr-watch/module"
 )
 
@@ -28,3 +29,54 @@ func UpdateOrCreateTmrGear(ctx context.Context, req *operationPb.UpdateOrCreateT
 	}
 	return nil
 }
+
+func UseGear(ctx context.Context, req *operationPb.UseGearRequest) (*operationPb.UseGearResponse, error) {
+	list, err := module.UseTmrGear(ctx, req)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	tmrGearList, err := module.TmrGearListByTmrId(int64(req.TmrId))
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	gear := "0"
+	useGearDataList := make([]*operationPb.UseGearDataList, 0)
+	for _, v := range list {
+		if len(tmrGearList) > 0 {
+			for i := 0; i < len(tmrGearList)-1; i++ {
+				if v.GearRate > float64(tmrGearList[i].Rev) && v.GearRate <= float64(tmrGearList[i+1].Rev) {
+					gear = tmrGearList[i+1].Gear
+				}
+			}
+
+			if v.GearRate <= float64(tmrGearList[0].Rev) {
+				gear = tmrGearList[0].Gear
+			}
+			if v.GearRate >= float64(tmrGearList[len(tmrGearList)-1].Rev) {
+				gear = tmrGearList[len(tmrGearList)-1].Gear
+			}
+		}
+
+		newData := &operationPb.UseGearDataList{
+			Bcode:    v.BCode,
+			Fname:    v.FName,
+			Length:   v.Length,
+			Sort:     v.Sort,
+			Speed:    float32(v.Speed),
+			Useinbar: v.UseInBar,
+			Weight:   float32(v.Weight),
+			Gear:     gear,
+			Ccount:   v.CCount,
+			GearRate: float32(v.GearRate),
+		}
+		useGearDataList = append(useGearDataList, newData)
+	}
+
+	return &operationPb.UseGearResponse{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.UseGearData{List: useGearDataList},
+	}, nil
+}