sheep.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package module
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "strconv"
  7. "tmr-watch/http/handle/restful"
  8. "tmr-watch/models"
  9. operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
  10. "gitee.com/xuyiping_admin/pkg/xerr"
  11. "github.com/xormplus/xorm"
  12. // "tmr-watch/pkg/logger/zaplog"
  13. )
  14. // SearchTrmGearByTmrId 查询撒料电机档位数据
  15. func SearchTrmGearByTmrId(ctx context.Context, tmrId int64) ([]*models.TmrGear, error) {
  16. res := make([]*models.TmrGear, 0)
  17. if err := restful.Engine.NewSession().Table(new(models.TmrGear).TableName()).
  18. Where("tmr_id = ?", tmrId).Find(&res); err != nil {
  19. if !errors.Is(err, xorm.ErrNotExist) {
  20. return nil, err
  21. }
  22. }
  23. return res, nil
  24. }
  25. func CreateOrUpdateTmrGear(ctx context.Context, req *operationPb.UpdateOrCreateTmrGearRequest) error {
  26. tmrId, _ := strconv.ParseInt(req.TmrId, 10, 64)
  27. tmrGearList, err := SearchTrmGearByTmrId(ctx, tmrId)
  28. if err != nil {
  29. return xerr.WithStack(err)
  30. }
  31. tx := restful.Engine.NewSession()
  32. defer tx.Close()
  33. if err = tx.Begin(); err != nil {
  34. return xerr.WithStack(err)
  35. }
  36. if len(tmrGearList) >= 1 {
  37. if _, err = tx.Table(new(models.TmrGear).TableName()).Where("tmr_id = ?", req.TmrId).Delete(new(models.TmrGear)); err != nil {
  38. tx.Rollback()
  39. return xerr.WithStack(err)
  40. }
  41. }
  42. newTmrGearList := models.NewTmrGearList(tmrId, req)
  43. if _, err = tx.Table(new(models.TmrGear).TableName()).Insert(newTmrGearList); err != nil {
  44. tx.Rollback()
  45. return xerr.WithStack(err)
  46. }
  47. return tx.Commit()
  48. }
  49. func UseTmrGear(ctx context.Context, req *operationPb.UseGearRequest) ([]*models.TmrGearDetail, error) {
  50. sqlName := fmt.Sprintf(
  51. `SELECT sort,fname,weight,length,bcode,ccount,speed,gear_rate,useinbar,pid,fbarid FROM
  52. (SELECT a.sort,a.fname,a.lweight weight,a.fpid, IF(a.useinbartype=0,'转投剩料', IF(a.useinbartype=1,'撒','继续饲喂') ) useinbar,
  53. CONCAT(a.fbarid) fbarid,
  54. CONCAT(a.pid) pid,
  55. b.bcode,
  56. b.length,
  57. c.cowcount AS ccount,
  58. ROUND( c.ccountradio * c.cowcount / 100, 2 ) ccountratio,
  59. d.speed,
  60. (((a.lweight / b.length) * f.volume) / d.volume_rate) / (1 / (d.speed * 1000 / 3600)) * 60 AS gear_rate
  61. FROM downloadplandtl2 a
  62. JOIN bar b ON a.fbarid = b.id
  63. JOIN fpdetaildate c ON c.barid = a.fbarid
  64. JOIN downloadedplan g ON a.pid = g.id
  65. JOIN tmr d ON d.id = g.tmrid
  66. JOIN feedtemplet f ON a.feedtempletid = f.id
  67. WHERE a.pastureid = %s
  68. AND a.pid= %s
  69. AND d.id = %d
  70. GROUP BY a.sort
  71. ORDER BY a.sort
  72. ) AS B`, req.PastureId, req.Id, req.TmrId)
  73. tx := restful.Engine.NewSession()
  74. defer tx.Close()
  75. resultList, err := tx.QueryString(sqlName)
  76. if err != nil {
  77. return nil, xerr.WithStack(err)
  78. }
  79. // zaplog.Info("UseTmrGear", zap.Any("resultList", resultList), zap.Any("sqlName", sqlName))
  80. tmrGearDetailList := make([]*models.TmrGearDetail, 0)
  81. for _, v := range resultList {
  82. sort, _ := strconv.ParseInt(v["sort"], 10, 64)
  83. fname := v["fname"]
  84. bcode := v["bcode"]
  85. weight, _ := strconv.ParseFloat(v["weight"], 64)
  86. length, _ := strconv.ParseInt(v["length"], 10, 64)
  87. ccount, _ := strconv.ParseInt(v["ccount"], 10, 64)
  88. speed, _ := strconv.ParseFloat(v["speed"], 64)
  89. gearRate, _ := strconv.ParseFloat(v["gear_rate"], 64)
  90. pid, _ := strconv.ParseInt(v["pid"], 10, 64)
  91. fbarid, _ := strconv.ParseInt(v["fbarid"], 10, 64)
  92. tmrGearDetailList = append(tmrGearDetailList, &models.TmrGearDetail{
  93. Sort: int32(sort),
  94. FName: fname,
  95. Weight: weight,
  96. Length: int32(length),
  97. BCode: bcode,
  98. CCount: int32(ccount),
  99. Speed: speed,
  100. GearRate: gearRate,
  101. Pid: pid,
  102. FBarid: fbarid,
  103. })
  104. }
  105. return tmrGearDetailList, nil
  106. }
  107. func TmrGearListByTmrId(tmrId int64) ([]*models.TmrGear, error) {
  108. tmrGearList := make([]*models.TmrGear, 0)
  109. tx := restful.Engine.NewSession()
  110. defer tx.Close()
  111. err := tx.Table(new(models.TmrGear).TableName()).Where("tmr_id = ?", tmrId).Select("*").Find(&tmrGearList)
  112. if err != nil {
  113. return nil, xerr.WithStack(err)
  114. }
  115. return tmrGearList, nil
  116. }