Pārlūkot izejas kodu

feed: 配方更新状态维护

Yi 1 gadu atpakaļ
vecāks
revīzija
0e5ece5e61

+ 1 - 1
conf/app-develop.ini

@@ -42,7 +42,7 @@ Description = tmrgo
 Type = mysql
 User = root
 Password = 123456
-Host = 192.168.1.70:3306
+Host = 192.168.1.96:3306
 Name = tmrwatch2
 TablePrefix =
 

+ 2 - 0
go.sum

@@ -3,6 +3,8 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
 gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
 gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20230802054950-77dee3d12065 h1:ITJlIE5ITvh3FiOw6QOrVDgAYOtuimwMBiHM0prmVbQ=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20230802054950-77dee3d12065/go.mod h1:cxbPefIf1o+cyQwvFaM3ndaoUeaK5aWzPV/eZQGJPgE=
 github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks=
 github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE=
 github.com/Anderson-Lu/gofasion v0.0.0-20190530065914-6a05b679ee48 h1:Y0um3nHCQDleEpQzahJAkT8mvKTlLqvjoIqZYIAJgAw=

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

@@ -0,0 +1,15 @@
+package api
+
+import (
+	"tmr-watch/models"
+
+	"github.com/gin-gonic/gin"
+)
+
+func SearchFeetTemplateList(c *gin.Context) {
+	var searchFeedTemplateRequest models.SearchFeedTemplateRequest
+	if err := c.BindJSON(&searchFeedTemplateRequest); err != nil {
+		return
+	}
+
+}

+ 18 - 0
http/handle/group/feed_formula.go

@@ -371,3 +371,21 @@ func FeedUsage(c *gin.Context) {
 		appG.Response(http.StatusOK, e.SUCCESS, res)
 	}
 }
+
+// FeedFormulaVersion 集团端配方信息更新同步
+func FeedFormulaVersion(c *gin.Context) {
+	appG := app.Gin{C: c}
+	var req models.FeedFormulaUpdateVersionRequest
+	if err := c.BindJSON(&req); err != nil {
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+	if err := group.FeedFormulaVersionService(&req); err != nil {
+		appG.Response(http.StatusBadRequest, e.ERROR_GET_S_FAIL, map[string]interface{}{
+			"error": err,
+		})
+		return
+	}
+	appG.Response(http.StatusOK, e.SUCCESS, map[string]bool{"success": true})
+
+}

+ 1 - 1
http/routers/group_api.go

@@ -11,7 +11,6 @@ func GroupAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		for _, opt := range opts {
 			opt(s)
 		}
-		s.NoRoute(group.Handle404)
 		apiPasture := s.Group("/pasture")
 		apiPasture.POST("feed_formula/distribute", group.DistributeFeedFormula)              // 饲料配方下发
 		apiPasture.POST("feed_formula/cancel/distribute", group.CancelDistributeFeedFormula) // 取消饲料配方下发
@@ -28,5 +27,6 @@ func GroupAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		apiPasture.POST("cattle_category/distribute", group.CowCategoryDistribute)           // 畜牧分类下发
 		apiPasture.POST("cattle_category/delete", group.CowCategoryDelete)                   // 畜牧分类删除
 		apiPasture.POST("feed/usage", group.FeedUsage)                                       // 配方使用概况
+		apiPasture.POST("feed_formula/version", group.FeedFormulaVersion)                    // 集团端配方信息更新同步
 	}
 }

+ 17 - 0
http/routers/new_api.go

@@ -0,0 +1,17 @@
+package routers
+
+import (
+	"tmr-watch/http/handle/api"
+
+	"github.com/gin-gonic/gin"
+)
+
+func NewAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
+	return func(s *gin.Engine) {
+		for _, opt := range opts {
+			opt(s)
+		}
+		newApiGroup := s.Group("/new_api")
+		newApiGroup.POST("feet_template/list", api.SearchFeetTemplateList)
+	}
+}

+ 2 - 1
http/routers/root.go

@@ -1,6 +1,7 @@
 package routers
 
 import (
+	"tmr-watch/http/handle/group"
 	"tmr-watch/middleware"
 
 	"github.com/gin-contrib/gzip"
@@ -12,7 +13,7 @@ func Root(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		for _, opt := range opts {
 			opt(s)
 		}
-
+		s.NoRoute(group.Handle404)
 		// common middleware
 		s.Use(
 			middleware.CORS(),

+ 1 - 0
http/routers/router.go

@@ -10,6 +10,7 @@ func HTTPServerRoute(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		Root(opts...),
 		AppAPI(opts...),
 		GroupAPI(opts...),
+		NewAPI(opts...),
 	}
 
 	return func(s *gin.Engine) {

+ 16 - 3
migration/v0001_feedtemplet.sql

@@ -1,5 +1,6 @@
 ALTER TABLE `feedtemplet`
-    ADD COLUMN `is_modify` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可修改 0 无效 1 是 2 否';
+    ADD COLUMN `is_modify` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可修改 0 无效 1 是 2 否',
+    ADD COLUMN `group_data_id` bigint(11) unsigned NOT NULL DEFAULT '0' COMMENT '集体端数据ID';
 
 ALTER TABLE `ftdetail`
     ADD COLUMN `is_modify` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可修改 0 无效 1 是 2 否';
@@ -7,7 +8,7 @@ ALTER TABLE `ftdetail`
 ## SELECT * FROM apisql WHERE sqlname = 'getFTList' AND ENABLE >0
 ## 需要更新的语句如下
 SELECT * FROM ( SELECT
-    tname,tcolor,ccid,ccname,fttype, remark,`enable`,source,fttypeid,tcode,is_modify,
+    tname,tcolor,ccid,ccname,fttype, remark,`enable`,source,fttypeid,tcode,is_modify,version,
     TRIM(id) id,
     TRIM(pastureid)pastureid,
     isissue,
@@ -204,4 +205,16 @@ SELECT TRIM(pastureid) pastureid,
            ) as domain
 
 FROM `sysopt`
-WHERE pastureid = ?
+WHERE pastureid = ?;
+
+## 配方版本更新记录表
+CREATE TABLE `feed_detail_version_log` (
+   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键自增id',
+   `feed_template_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '配方id',
+   `group_version` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '版本号',
+   `belong` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '配方归属 0 无效 1 归属集团端 2 归属牧场端',
+   `created_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',
+   `updated_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',
+   PRIMARY KEY (`id`),
+   KEY `idx_feed_template_id` (`feed_template_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配方版本更新记录表'

+ 14 - 0
models/feed_detail_version_log.go

@@ -0,0 +1,14 @@
+package models
+
+type FeedDetailVersionLog struct {
+	Id             int64 `xorm:"id" json:"id,omitempty"`
+	FeedTemplateId int64 `xorm:"feed_template_id" json:"feed_template_id"`
+	GroupVersion   int32 `xorm:"group_version" json:"group_version"`
+	Belong         int32 `xorm:"belong" json:"belong"`
+	CreatedAt      int64 `xorm:"created_at" json:"created_at"`
+	UpdatedAt      int64 `xorm:"updated_at" json:"updated_at"`
+}
+
+func (f *FeedDetailVersionLog) TableName() string {
+	return "feed_detail_version_log"
+}

+ 26 - 0
models/feed_template.go

@@ -1,5 +1,7 @@
 package models
 
+import "time"
+
 type FeedTemplate struct {
 	Id           int64   `xorm:"id" json:"id"`
 	PastureId    int64   `xorm:"pastureid" json:"pasture_id"`
@@ -26,8 +28,32 @@ type FeedTemplate struct {
 	Backup1      string  `xorm:"backup1" json:"backup1"`
 	Backup2      string  `xorm:"backup2" json:"backup2"`
 	IsModify     int32   `xorm:"is_modify" json:"is_modify"`
+	GroupDataId  int64   `xorm:"group_data_id" json:"group_data_id"`
 }
 
 func (f *FeedTemplate) TableName() string {
 	return "feedtemplet"
 }
+
+func NewFeedTemplateByGroup(req *FeedFormula) *FeedTemplate {
+	return &FeedTemplate{
+		PastureId:    req.PastureId,
+		TCode:        req.EncodeNumber,
+		TName:        req.Name,
+		TColor:       req.Colour,
+		CCid:         int64(req.CattleCategoryId),
+		CCName:       req.CattleCategoryName,
+		FTType:       req.FormulaTypeName,
+		FTTypeId:     req.FormulaTypeId,
+		Source:       "集团下发",
+		Remark:       req.Remarks,
+		Enable:       1,
+		Version:      req.Version,
+		SaveTime:     time.Now().Format("2006-01-02 15:04:05"),
+		IsIssue:      0,
+		IssueVersion: 0,
+		IssueId:      0,
+		IsModify:     req.IsModify,
+		GroupDataId:  req.Id,
+	}
+}

+ 18 - 0
models/group_data.go

@@ -281,3 +281,21 @@ type SprinkleDetail struct {
 	Pid                         int32   `json:"pid"`
 	RemoveCancelCorrectRatio    float64 `json:"remove_cancel_correct_ratio"` // 去除取消正确率
 }
+
+type SearchFeedTemplateRequest struct {
+	Name       string `json:"name"`
+	Page       int32  `json:"page"`
+	Offset     int32  `json:"offset"`
+	PageCount  string `json:"pagecount"`
+	ReturnType string `json:"returntype"`
+	ParamMaps  struct {
+		PastureId string `json:"pastureid"`
+		TName     string `json:"tname"`
+	} `json:"parammaps"`
+}
+
+type FeedFormulaUpdateVersionRequest struct {
+	FeedTemplateId int64 `json:"feed_template_id"` // 配方id
+	Version        int32 `json:"version"`          // 版本号
+	Belong         int32 `json:"belong"`           // 配方归属  0 无效 1 归属集团端 2 归属牧场端
+}

+ 37 - 2
module/group.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"strconv"
+	"time"
 	"tmr-watch/http/handle/restful"
 	"tmr-watch/models"
 )
@@ -21,7 +22,6 @@ func DistributeFeedFormula(pastureId int64, feedTemplateList []*models.FeedTempl
 	defer tx.Close()
 	for _, feedTemplate := range feedTemplateList {
 		if _, err := tx.Table(new(models.FeedTemplate)).Insert(feedTemplate); err != nil {
-			tx.Rollback()
 			return err
 		}
 		feedFormulaDetail := make([]*models.FeedTemplateDetail, 0)
@@ -47,7 +47,6 @@ func DistributeFeedFormula(pastureId int64, feedTemplateList []*models.FeedTempl
 			continue
 		}
 		if _, err := tx.Table(new(models.FeedTemplateDetail)).Insert(feedFormulaDetail); err != nil {
-			tx.Rollback()
 			return err
 		}
 	}
@@ -491,3 +490,39 @@ func getSprinkleDetail(pastureId, feedFormulaId int32, startTime, endTime string
 	}
 	return dataList, nil
 }
+
+func FeedFormulaVersion(req *models.FeedFormulaUpdateVersionRequest) error {
+	if req.Belong == 0 {
+		return nil
+	}
+	DbSession := restful.Engine.NewSession()
+	defer DbSession.Close()
+
+	history := &models.FeedDetailVersionLog{}
+	if _, err := DbSession.Where("feed_template_id = ?", req.FeedTemplateId).
+		And("belong = ?", req.Belong).
+		Get(history); err != nil {
+		return err
+	}
+
+	if history.Id > 0 {
+		history.GroupVersion = req.Version
+		history.UpdatedAt = time.Now().Unix()
+		if _, err := DbSession.Where("id = ?", history.Id).Cols("group_version", "updated_at").Update(history); err != nil {
+			return err
+		}
+	} else {
+		feedDetailVersionLog := &models.FeedDetailVersionLog{
+			FeedTemplateId: req.FeedTemplateId,
+			GroupVersion:   req.Version,
+			Belong:         req.Belong,
+			CreatedAt:      time.Now().Unix(),
+			UpdatedAt:      time.Now().Unix(),
+		}
+		if _, err := DbSession.Insert(feedDetailVersionLog); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}

+ 5 - 20
service/group/group.go

@@ -3,7 +3,6 @@ package group
 import (
 	"fmt"
 	"sort"
-	"time"
 	"tmr-watch/models"
 	"tmr-watch/module"
 	"tmr-watch/pkg/logger/zaplog"
@@ -16,25 +15,7 @@ import (
 func DistributeFeedFormulaService(req *models.PastureBodyRequest) error {
 	feedTemplateList := make([]*models.FeedTemplate, 0)
 	for _, b := range req.FeedFormula {
-		feedTemplateList = append(feedTemplateList, &models.FeedTemplate{
-			PastureId:    req.PastureId,
-			TCode:        b.EncodeNumber,
-			TName:        b.Name,
-			TColor:       b.Colour,
-			CCid:         int64(b.CattleCategoryId),
-			CCName:       b.CattleCategoryName,
-			FTType:       b.FormulaTypeName,
-			FTTypeId:     b.FormulaTypeId,
-			Source:       "集团下发",
-			Remark:       b.Remarks,
-			Enable:       1,
-			Version:      b.Version,
-			SaveTime:     time.Now().Format("2006-01-02 15:04:05"),
-			IsIssue:      0,
-			IssueVersion: 0,
-			IssueId:      0,
-			IsModify:     b.IsModify,
-		})
+		feedTemplateList = append(feedTemplateList, models.NewFeedTemplateByGroup(b))
 	}
 	return module.DistributeFeedFormula(req.PastureId, feedTemplateList, req.FeedFormulaDetail)
 }
@@ -317,3 +298,7 @@ func CategoryDeleteService(keyWord string, req *models.CategoryDeleteRequest) er
 func FeedUsageService(req *models.FeedFormulaUsageRequest) (*models.FeedFormulaUsageResponse, error) {
 	return module.FeedTemplateUsageDetail(req)
 }
+
+func FeedFormulaVersionService(req *models.FeedFormulaUpdateVersionRequest) error {
+	return module.FeedFormulaVersion(req)
+}