123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- package group
- import (
- "fmt"
- "sort"
- "tmr-watch/models"
- "tmr-watch/module"
- "tmr-watch/pkg/logger/zaplog"
- "tmr-watch/pkg/util"
- operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
- "go.uber.org/zap"
- )
- // DistributeFeedFormulaService 饲料配方下发牧场端
- func DistributeFeedFormulaService(req *operationPb.DistributeDataRequest) error {
- zaplog.Info("DistributeFeedFormulaService", zap.Any("request", req))
- feedTemplateList := make([]*models.FeedTemplate, 0)
- for _, b := range req.FeedFormulaList {
- feedTemplateList = append(feedTemplateList, models.NewFeedTemplateByGroup(int64(req.PastureId), b))
- }
- return module.DistributeFeedFormula(feedTemplateList)
- }
- // CancelDistributeFeedFormulaService 取消饲料配方下发牧场端
- func CancelDistributeFeedFormulaService(req *models.CancelDistributeFeedFormulaRequest) error {
- if len(req.PastureDataId) <= 0 {
- return nil
- }
- return module.CancelDistributeFeedFormula(req.PastureId, req.PastureDataId)
- }
- func FeedFormulaIsModifyService(req *models.PastureFeedFormulaIsModifyRequest) error {
- return module.FeedFormulaIsModify(req)
- }
- // FeedFormulaList 配方列表数据
- func FeedFormulaList(req *models.FeedListRequest) (*models.FeedFormulaData, error) {
- res := &models.FeedFormulaData{
- Total: 0,
- Page: req.Page,
- PageSize: req.PageSize,
- List: make([]*models.FeedTemplate, 0),
- }
- dataList, total, err := module.FeedTemplateList(req)
- if err != nil {
- zaplog.Error("FeedFormulaList", zap.Any("dataList", dataList), zap.Any("err", err))
- return nil, err
- }
- res.Total = int32(total)
- res.List = dataList
- return res, nil
- }
- // FeedList 饲料列表数据
- func FeedList(req *models.FeedListRequest) (*models.FeedData, error) {
- res := &models.FeedData{
- Total: 0,
- Page: req.Page,
- PageSize: req.PageSize,
- List: make([]*models.Feed, 0),
- }
- dataList, total, err := module.FeedList(req)
- if err != nil {
- zaplog.Error("FeedList", zap.Any("dataList", dataList), zap.Any("err", err))
- return nil, err
- }
- res.Total = int32(total)
- res.List = dataList
- return res, nil
- }
- // FeedTemplateDetailList 饲料配方详情列表数据
- func FeedTemplateDetailList(req *models.FeedListRequest) (*models.FeedDetailData, error) {
- res := &models.FeedDetailData{
- Total: 0,
- Page: req.Page,
- PageSize: req.PageSize,
- List: make([]*models.FeedTemplateDetail, 0),
- }
- dataList, total, err := module.FeedTemplateDetailList(req)
- if err != nil {
- zaplog.Error("FeedTemplateDetailList", zap.Any("dataList", dataList), zap.Any("err", err))
- return nil, err
- }
- res.Total = int32(total)
- res.List = dataList
- return res, nil
- }
- // AnalysisAccuracyService 首页准确率分析
- func AnalysisAccuracyService(req *models.AnalysisAccuracyRequest) (*models.AnalysisAccuracyResponse, error) {
- response := &models.AnalysisAccuracyResponse{
- MixedFodderAccurateRatio: make([]*models.PastureAnalysisAccuracyDataValue, 0),
- MixedFodderCorrectRatio: make([]*models.PastureAnalysisAccuracyDataValue, 0),
- SprinkleFodderAccurateRatio: make([]*models.PastureAnalysisAccuracyDataValue, 0),
- SprinkleFodderCorrectRatio: make([]*models.PastureAnalysisAccuracyDataValue, 0),
- }
- // 混料准确率和正确率
- mixedFodderDataList, err := module.MixedFodderData(req)
- if err != nil {
- return nil, err
- }
- // 撒料准确率和撒料正确率
- sprinkleFodderDataList, err := module.SprinkleFodderData(req)
- if err != nil {
- return nil, err
- }
- timeList := util.TimeBetween(req.StartDate, req.EndDate)
- for _, dayTime := range timeList {
- var mixedInfo, sprinkleInfo bool
- for _, mixed := range mixedFodderDataList {
- myDate := mixed.PlanTime.Format(util.LayoutDateFormat)
- if myDate != dayTime {
- continue
- }
- // 混料准确率
- mixedAccurateValue := &models.PastureAnalysisAccuracyDataValue{
- DayTime: dayTime,
- Ratio: mixed.MixedFodderAccurateRatio,
- }
- // 混料正确率
- mixedCorrectValue := &models.PastureAnalysisAccuracyDataValue{
- DayTime: dayTime,
- Ratio: mixed.MixedFodderCorrectRatio,
- }
- response.MixedFodderAccurateRatio = append(response.MixedFodderAccurateRatio, mixedAccurateValue)
- response.MixedFodderCorrectRatio = append(response.MixedFodderCorrectRatio, mixedCorrectValue)
- mixedInfo = true
- }
- if !mixedInfo {
- noInfo := &models.PastureAnalysisAccuracyDataValue{
- DayTime: dayTime,
- Ratio: 0,
- }
- response.MixedFodderAccurateRatio = append(response.MixedFodderAccurateRatio, noInfo)
- response.MixedFodderCorrectRatio = append(response.MixedFodderCorrectRatio, noInfo)
- }
- for _, sprinkle := range sprinkleFodderDataList {
- smyDate := sprinkle.PlanTime.Format(util.LayoutDateFormat)
- if smyDate != dayTime {
- continue
- }
- // 撒料准确率
- sprinkleAccurateValue := &models.PastureAnalysisAccuracyDataValue{
- DayTime: dayTime,
- Ratio: sprinkle.SprinkleFodderAccurateRatio,
- }
- // 撒料正确率
- sprinkleCorrectValue := &models.PastureAnalysisAccuracyDataValue{
- DayTime: dayTime,
- Ratio: sprinkle.SprinkleFodderCorrectRatio,
- }
- response.SprinkleFodderCorrectRatio = append(response.SprinkleFodderCorrectRatio, sprinkleCorrectValue)
- response.SprinkleFodderAccurateRatio = append(response.SprinkleFodderAccurateRatio, sprinkleAccurateValue)
- sprinkleInfo = true
- }
- if !sprinkleInfo {
- noInfo := &models.PastureAnalysisAccuracyDataValue{
- DayTime: dayTime,
- Ratio: 0,
- }
- response.SprinkleFodderAccurateRatio = append(response.SprinkleFodderAccurateRatio, noInfo)
- response.SprinkleFodderCorrectRatio = append(response.SprinkleFodderCorrectRatio, noInfo)
- }
- }
- return response, nil
- }
- // ProcessAnalysisService 过程分析-执行时间
- func ProcessAnalysisService(req *models.AnalysisAccuracyRequest) (*models.ProcessAnalysisResponse, error) {
- response := &models.ProcessAnalysisResponse{
- AddFeedTime: &models.ProcessAnalysisDataValue{},
- SprinkleTime: &models.ProcessAnalysisDataValue{},
- StirTime: &models.ProcessAnalysisDataValue{},
- }
- // 获取指定时间段内tmr设备列表
- tmrList, err := module.TMRList(req)
- if err != nil {
- return nil, err
- }
- addFeedList := make([]int, 0)
- sprinkleFeedList := make([]int, 0)
- stirDelayList := make([]int, 0)
- for _, v := range tmrList {
- mixedProcessTimeList, err := module.MixedProcessTimeList(req.PastureId, v.Id)
- if err != nil {
- zaplog.Error("ProcessAnalysisService", zap.Any("MixedProcessTimeList", err))
- } else {
- tmrMixAllTime := 0
- for _, t := range mixedProcessTimeList {
- tmrMixAllTime += util.TimeParseToMinutes(t.ProcessTime)
- }
- addFeedList = append(addFeedList, tmrMixAllTime)
- }
- sprinkleProcessTimeList, err := module.SprinkleProcessTimeList(req.PastureId, v.Id)
- if err != nil {
- zaplog.Error("ProcessAnalysisService", zap.Any("SprinkleProcessTimeList", err))
- } else {
- tmrSprinkleAllTime := 0
- for _, s := range sprinkleProcessTimeList {
- tmrSprinkleAllTime += util.TimeParseToMinutes(s.ProcessTime)
- }
- sprinkleFeedList = append(sprinkleFeedList, tmrSprinkleAllTime)
- }
- }
- if len(addFeedList) > 0 {
- sort.Ints(addFeedList)
- response.AddFeedTime.MaxValue = fmt.Sprintf("%.2f", float64(addFeedList[len(addFeedList)-1])/60)
- response.AddFeedTime.UpMiddleValue = fmt.Sprintf("%.2f", util.Median(addFeedList[len(addFeedList)/2+1:])/60)
- response.AddFeedTime.MiddleValue = fmt.Sprintf("%.2f", util.Median(addFeedList)/60)
- response.AddFeedTime.DownMiddleValue = fmt.Sprintf("%.2f", util.Median(addFeedList[0:len(addFeedList)/2])/60)
- response.AddFeedTime.MinValue = fmt.Sprintf("%.2f", float64(addFeedList[0])/60)
- }
- if len(sprinkleFeedList) > 0 {
- sort.Ints(sprinkleFeedList)
- response.SprinkleTime.MaxValue = fmt.Sprintf("%.2f", float64(sprinkleFeedList[len(sprinkleFeedList)-1])/60)
- response.SprinkleTime.UpMiddleValue = fmt.Sprintf("%.2f", util.Median(sprinkleFeedList[len(sprinkleFeedList)/2+1:])/60)
- response.SprinkleTime.MiddleValue = fmt.Sprintf("%.2f", util.Median(sprinkleFeedList)/60)
- response.SprinkleTime.DownMiddleValue = fmt.Sprintf("%.2f", util.Median(sprinkleFeedList[0:len(sprinkleFeedList)/2])/60)
- response.SprinkleTime.MinValue = fmt.Sprintf("%.2f", float64(sprinkleFeedList[0])/60)
- }
- if len(stirDelayList) > 0 {
- sort.Ints(stirDelayList)
- response.StirTime.MaxValue = fmt.Sprintf("%d", stirDelayList[len(stirDelayList)-1])
- response.StirTime.UpMiddleValue = fmt.Sprintf("%.2f", util.Median(stirDelayList[len(stirDelayList)/2+1:]))
- response.StirTime.MiddleValue = fmt.Sprintf("%.2f", util.Median(stirDelayList))
- response.StirTime.DownMiddleValue = fmt.Sprintf("%.2f", util.Median(stirDelayList[0:len(stirDelayList)/2]))
- response.StirTime.MinValue = fmt.Sprintf("%d", stirDelayList[0])
- }
- return response, nil
- }
- // SprinkleStatisticsService 撒料统计
- func SprinkleStatisticsService(req *models.SprinkleStatisticsRequest) ([]*models.SprinkleStatisticsDataList, error) {
- sprinkleDataList, err := module.SprinkleStatistics(req)
- if err != nil {
- return nil, err
- }
- return sprinkleDataList, nil
- }
- func AccountDistributionService(req *models.AccountDistributionRequest) error {
- return module.AccountDistribution(req)
- }
- func ForageCategoryDistributeService(req *models.CategoryRequest) error {
- feedClass := &models.FeedClass{
- PastureId: int64(req.PastureId),
- FCCode: req.Number,
- FCName: req.Name,
- Enable: req.IsShow,
- BigFeedClassId: req.ParentId,
- BigFeedClassName: req.ParentName,
- GroupId: int64(req.GroupId),
- }
- return module.ForageCategoryDistribute(feedClass)
- }
- func CattleCategoryDistributeService(req *models.CategoryRequest) error {
- cowClass := &models.CowClass{
- PastureId: int64(req.PastureId),
- ClassCode: req.Number,
- ClassName: req.Name,
- Enable: req.IsShow,
- ParentId: req.ParentId,
- ParentName: req.ParentName,
- GroupId: int64(req.GroupId),
- }
- return module.CattleCategoryDistribute(cowClass)
- }
- func CategoryDeleteService(keyWord string, req *models.CategoryDeleteRequest) error {
- switch keyWord {
- case "feed_delete":
- return module.ForageCategoryDelete(int64(req.PastureId), int64(req.GroupId))
- case "cow_delete":
- return module.CowCategoryDelete(int64(req.PastureId), int64(req.GroupId))
- }
- return nil
- }
- func FeedUsageService(req *models.FeedFormulaUsageRequest) (*models.FeedFormulaUsageResponse, error) {
- return module.FeedTemplateUsageDetail(req)
- }
- func FeedFormulaVersionService(pastureId int64, req *models.FeedFormulaUpdateVersionRequest) error {
- return module.FeedFormulaVersion(pastureId, req)
- }
|