|
@@ -1 +1,1796 @@
|
|
|
package service
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "github.com/astaxie/beego/logs"
|
|
|
+ "kpt.xdmy/apiserver/model"
|
|
|
+ "kpt.xdmy/apiserver/model/http"
|
|
|
+ "kpt.xdmy/pkg/util"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type pastureStatistics struct {
|
|
|
+ Psum float64 `gorm:"column:psum"`
|
|
|
+ Name string `gorm:"column:name"`
|
|
|
+ PastureId int `gorm:"column:pastureId"`
|
|
|
+}
|
|
|
+
|
|
|
+type monthBudget struct {
|
|
|
+ MonthBudget float64 `gorm:"column:monthBudget"`
|
|
|
+ Name string `gorm:"column:name"`
|
|
|
+}
|
|
|
+
|
|
|
+//各牧场年度用水量对比
|
|
|
+func (s *Service) GetWaterYieldByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+round( IFNULL(SUM(w.waterConsumption),0) ,2)psum,
|
|
|
+ p.name as name
|
|
|
+FROM
|
|
|
+ water w
|
|
|
+ INNER JOIN measure ms
|
|
|
+ ON w.measureId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.date between ? and ? ) AND ms.useType = '1级表' and p.name <> '现代牧业' and (p.center = ? or ? = '' ) and p.IsEnergy = 0
|
|
|
+GROUP BY ms.pastureId `
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ nowYearData = append(nowYearData, util.Round(nowYear.Psum, 2))
|
|
|
+ all += nowYear.Psum
|
|
|
+ exist := false
|
|
|
+ for _, lastYear := range lastYearList {
|
|
|
+ if lastYear.Name == nowYear.Name {
|
|
|
+ exist = true
|
|
|
+ lastYearData = append(lastYearData, util.Round(lastYear.Psum, 2))
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = pastureName
|
|
|
+ resp.LastYear = lastYearData
|
|
|
+ resp.NowYear = nowYearData
|
|
|
+
|
|
|
+ resp.All = util.Round(all, 2)
|
|
|
+
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Service) GetWaterSingleCowByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+round( IFNULL(SUM(w.waterConsumption),0) ,2)psum,
|
|
|
+ p.name
|
|
|
+FROM
|
|
|
+ water w
|
|
|
+ INNER JOIN measure ms
|
|
|
+ ON w.measureId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.date between ? and ? ) AND ms.useType = '1级表' and p.name <> '现代牧业' and (p.center = ? or ? = '' ) and p.IsEnergy = 0
|
|
|
+GROUP BY ms.pastureId desc `
|
|
|
+
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ lastCowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) group by pastureid `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) group by pastureid `,
|
|
|
+ startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastCowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll, lastCowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+ cowNumAll += item.FeedSum.CowNum
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ lastCowNum := make(map[string]int64, 0)
|
|
|
+ for _, item := range lastCowNumList {
|
|
|
+ lastCowNumAll += item.FeedSum.CowNum
|
|
|
+ lastCowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all, lastAll float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ if _, ok := cowNum[nowYear.Name]; ok {
|
|
|
+ all += nowYear.Psum
|
|
|
+ nowYearData = append(nowYearData, nowYear.Psum/float64(cowNum[nowYear.Name]))
|
|
|
+ } else {
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ }
|
|
|
+ exist := false
|
|
|
+ for _, lastYear := range lastYearList {
|
|
|
+ if lastYear.Name == nowYear.Name {
|
|
|
+ exist = true
|
|
|
+ if _, ok := lastCowNum[lastYear.Name]; ok {
|
|
|
+ lastAll += nowYear.Psum
|
|
|
+ lastYearData = append(lastYearData, lastYear.Psum/float64(lastCowNum[nowYear.Name]))
|
|
|
+ } else {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ //resp.LastYear = append(resp.LastYear, util.Round(lastAll/float64(lastCowNumAll), 3))
|
|
|
+ //resp.LastYear = append(resp.LastYear, lastYearData...)
|
|
|
+ for _, item := range lastYearData {
|
|
|
+ resp.LastYear = append(resp.LastYear, util.Round(item, 3))
|
|
|
+ }
|
|
|
+
|
|
|
+ //resp.NowYear = append(resp.NowYear, util.Round(all/float64(cowNumAll), 3))
|
|
|
+ for _, item := range nowYearData {
|
|
|
+ resp.NowYear = append(resp.NowYear, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ resp.All = all
|
|
|
+ resp.Line = util.Round(all/float64(cowNumAll), 3)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+//单头牛水费
|
|
|
+func (s *Service) GetWaterRateByPasture(center, startTime, endTime string) (*http.GetWaterRateByPastureResp, error) {
|
|
|
+
|
|
|
+ resp := new(http.GetWaterRateByPastureResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) group by pastureid `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+ //cowNumAll += cowNum[feequery.Pasture.Name]
|
|
|
+
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ feequeryList := make([]*model.FeeQueryAndPasture, 0)
|
|
|
+ err = s.d.DB.Debug().Raw(`select sum(HSL) HSL ,p.name from feequery fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.Date between ? and ? and fd.FYLX ='水费' and (p.center = ? or ? = '' ) group by fd.pastureId order by p.id`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&feequeryList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var hslList []float64
|
|
|
+ var all float64
|
|
|
+ for _, feequery := range feequeryList {
|
|
|
+ pastureName = append(pastureName, feequery.Pasture.Name)
|
|
|
+ var hsl float64
|
|
|
+ hsl, err = strconv.ParseFloat(feequery.HSL, 64)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("转换失败:", err)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ if _, ok := cowNum[feequery.Name]; ok {
|
|
|
+ all += hsl
|
|
|
+ cowNumAll += cowNum[feequery.Pasture.Name]
|
|
|
+ hslList = append(hslList, hsl/float64(cowNum[feequery.Pasture.Name]))
|
|
|
+ } else {
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, f := range feequeryList {
|
|
|
+ if item.Name == f.Name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, item.Name)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(all/float64(cowNumAll), 3))
|
|
|
+ //select 1748193.91/8271863
|
|
|
+ for _, item := range hslList {
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ resp.Line = util.Round(all/float64(cowNumAll), 3)
|
|
|
+ //resp.Actual = append(resp.Actual, hslList...)
|
|
|
+ return resp, err
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Service) GetWaterRateCompleteByPasture(center, startTime, endTime string) (*http.GetWaterRateCompleteByPastureResp, error) {
|
|
|
+ resp := new(http.GetWaterRateCompleteByPastureResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ feequeryList := make([]*model.FeeQueryAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(HSL),0) HSL ,p.name from feequery fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.Date between ? and ? and fd.FYLX ='水费' and (p.center = ? or ? = '' ) group by fd.pastureId`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&feequeryList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+ monthBudgetList := make([]*monthBudget, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(monthBudget),0) monthBudget,p.name from month_budget mb join pasture p on p.id = mb.pastureId
|
|
|
+ where mb.feeType = '水费' and mb.budgetMonth between ? and ? and (p.center = ? or ? = '' ) group by mb.pastureId`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&monthBudgetList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var budgetList, actualList, complete []float64
|
|
|
+ var budgetAll, actualAll float64
|
|
|
+ for _, monthBudget := range monthBudgetList {
|
|
|
+ pastureName = append(pastureName, monthBudget.Name)
|
|
|
+ budgetList = append(budgetList, util.Round(monthBudget.MonthBudget, 2))
|
|
|
+ budgetAll += monthBudget.MonthBudget
|
|
|
+ exist := false
|
|
|
+ var hsl float64
|
|
|
+ for _, feequery := range feequeryList {
|
|
|
+ if feequery.Name == monthBudget.Name {
|
|
|
+ exist = true
|
|
|
+
|
|
|
+ hsl, err = strconv.ParseFloat(feequery.HSL, 64)
|
|
|
+ if err != nil {
|
|
|
+ actualList = append(actualList, 0)
|
|
|
+ logs.Error("转换失败:", err)
|
|
|
+ } else {
|
|
|
+ actualAll += hsl
|
|
|
+ actualList = append(actualList, util.Round(hsl, 2))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ actualList = append(actualList, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ //预算减实际除预算加1
|
|
|
+ if monthBudget.MonthBudget > 0 && hsl > 0 {
|
|
|
+ complete = append(complete, util.Round(((monthBudget.MonthBudget-hsl)/monthBudget.MonthBudget+1)*100, 2))
|
|
|
+ } else {
|
|
|
+ complete = append(complete, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ actualList = append(actualList, 0)
|
|
|
+ budgetList = append(budgetList, 0)
|
|
|
+ complete = append(complete, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(actualAll, 2))
|
|
|
+ resp.Actual = append(resp.Actual, actualList...)
|
|
|
+
|
|
|
+ resp.Budget = append(resp.Budget, util.Round(budgetAll, 2))
|
|
|
+ resp.Budget = append(resp.Budget, budgetList...)
|
|
|
+
|
|
|
+ if budgetAll > 0 && actualAll > 0 {
|
|
|
+ resp.Complete = append(resp.Complete, util.Round(((budgetAll-actualAll)/budgetAll+1)*100, 2))
|
|
|
+ } else {
|
|
|
+ resp.Complete = append(resp.Complete, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Complete = append(resp.Complete, complete...)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+type dosagePerCow struct {
|
|
|
+ Psum float64 `gorm:"column:psum"`
|
|
|
+ Date string `gorm:"column:date"`
|
|
|
+ Name string `gorm:"column:name"`
|
|
|
+ CowNum int64 `gorm:"column:cowNum"`
|
|
|
+}
|
|
|
+
|
|
|
+//每月单头牛用水量对比
|
|
|
+func (s *Service) GetWaterPerHeadByPasture(pastureId, startTime, endTime string) (map[string]interface{}, error) {
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ dosagePerCowList := make([]*dosagePerCow, 0)
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(`SELECT
|
|
|
+round( IFNULL(SUM(w.waterConsumption),0) ,2)psum,
|
|
|
+ p.name,DATE_FORMAT( w.date, '%Y-%m') date,
|
|
|
+ ifnull((select sum(cowNum) from feed_sum where DATE_FORMAT( feedDay, '%Y-%m') = DATE_FORMAT( w.date, '%Y-%m') and pastureId = p.id ),0)cowNum
|
|
|
+FROM
|
|
|
+ water w
|
|
|
+ INNER JOIN measure ms
|
|
|
+ ON w.measureId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.date between ? and ? ) AND ms.useType = '1级表' and p.name <> '现代牧业' and FIND_IN_SET(p.id,?)
|
|
|
+GROUP BY DATE_FORMAT( w.date, '%Y-%m'),ms.pastureId order by DATE_FORMAT( w.date, '%Y-%m'),p.name asc `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), pastureId).Find(&dosagePerCowList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ data := dosagePerCowFormat(dosagePerCowList)
|
|
|
+ return data, nil
|
|
|
+}
|
|
|
+
|
|
|
+func dosagePerCowFormat(dosagePerCowList []*dosagePerCow) map[string]interface{} {
|
|
|
+ var dateList, pastureNameList []string
|
|
|
+ var dataList []interface{}
|
|
|
+ data := make(map[string]interface{}, 0)
|
|
|
+ data["data1"] = []string{}
|
|
|
+ data["data2"] = []string{}
|
|
|
+ data["data3"] = []interface{}{}
|
|
|
+ for _, item := range dosagePerCowList {
|
|
|
+ if len(dateList) == 0 {
|
|
|
+ dateList = append(dateList, item.Date)
|
|
|
+ }
|
|
|
+ dateExist := false
|
|
|
+ for _, date := range dateList {
|
|
|
+ if date == item.Date {
|
|
|
+ dateExist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !dateExist {
|
|
|
+ dateList = append(dateList, item.Date)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(pastureNameList) == 0 {
|
|
|
+ pastureNameList = append(pastureNameList, item.Name)
|
|
|
+ }
|
|
|
+ pastureNameExist := false
|
|
|
+ for _, pastureName := range pastureNameList {
|
|
|
+ if pastureName == item.Name {
|
|
|
+ pastureNameExist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !pastureNameExist {
|
|
|
+ pastureNameList = append(pastureNameList, item.Name)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pastureName := range pastureNameList {
|
|
|
+ var number []float64
|
|
|
+ for _, date := range dateList {
|
|
|
+ exist := false
|
|
|
+ for _, item := range dosagePerCowList {
|
|
|
+ if item.Date == date && item.Name == pastureName {
|
|
|
+ exist = true
|
|
|
+ number = append(number, util.Round(item.Psum/float64(item.CowNum), 2))
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ number = append(number, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataList = append(dataList, number)
|
|
|
+ }
|
|
|
+
|
|
|
+ data["data1"] = pastureNameList
|
|
|
+ data["data2"] = dateList
|
|
|
+ data["data3"] = dataList
|
|
|
+ return data
|
|
|
+}
|
|
|
+
|
|
|
+//-----------------------
|
|
|
+
|
|
|
+//各牧场年度用电量对比
|
|
|
+func (s *Service) GetElectricityYieldByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+round( IFNULL(SUM(w.elecConsumption),0) ,2)psum,
|
|
|
+ p.name as name
|
|
|
+FROM
|
|
|
+ electricity w
|
|
|
+ INNER JOIN measure ms
|
|
|
+ ON w.measureId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.date between ? and ? ) AND ms.useType = '1级表' and p.name <> '现代牧业' and (p.center = ? or ? = '' )
|
|
|
+GROUP BY ms.pastureId `
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ nowYearData = append(nowYearData, util.Round(nowYear.Psum, 2))
|
|
|
+ all += nowYear.Psum
|
|
|
+ exist := false
|
|
|
+ for _, lastYear := range lastYearList {
|
|
|
+ if lastYear.Name == nowYear.Name {
|
|
|
+ exist = true
|
|
|
+ lastYearData = append(lastYearData, util.Round(lastYear.Psum, 2))
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = pastureName
|
|
|
+ resp.LastYear = lastYearData
|
|
|
+ resp.NowYear = nowYearData
|
|
|
+ resp.All = util.Round(all, 2)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Service) GetElectricitySingleCowByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+round( IFNULL(SUM(w.elecConsumption),0) ,2)psum,
|
|
|
+ p.name,ms.pastureId
|
|
|
+FROM
|
|
|
+ electricity w
|
|
|
+ INNER JOIN measure ms
|
|
|
+ ON w.measureId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.date between ? and ? ) AND ms.useType = '1级表' and ms.meterType = '电表' and p.name <> '现代牧业' and (p.center = ? or ? = '' ) and p.vendor = 1 and IsEnergy = 0
|
|
|
+GROUP BY ms.pastureId `
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ lastCowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name,fd.pastureId from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) and p.vendor = 1 and IsEnergy = 0 group by p.id `,
|
|
|
+ startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name,fd.pastureId from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) and p.vendor = 1 and IsEnergy = 0 group by p.id `,
|
|
|
+ startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastCowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll, lastCowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+ //cowNumAll += item.FeedSum.CowNum
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ lastCowNum := make(map[string]int64, 0)
|
|
|
+ for _, item := range lastCowNumList {
|
|
|
+ //lastCowNumAll += item.FeedSum.CowNum
|
|
|
+ lastCowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all, lastAll float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ if _, ok := cowNum[nowYear.Name]; ok {
|
|
|
+ all += nowYear.Psum
|
|
|
+ cowNumAll += cowNum[nowYear.Name]
|
|
|
+ nowYearData = append(nowYearData, util.Round(nowYear.Psum/float64(cowNum[nowYear.Name]), 3))
|
|
|
+ } else {
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ }
|
|
|
+ exist := false
|
|
|
+ for _, lastYear := range lastYearList {
|
|
|
+ if lastYear.Name == nowYear.Name {
|
|
|
+ exist = true
|
|
|
+ if _, ok := lastCowNum[lastYear.Name]; ok {
|
|
|
+ lastAll += nowYear.Psum
|
|
|
+ lastCowNumAll += lastCowNum[nowYear.Name]
|
|
|
+ lastYearData = append(lastYearData, util.Round(lastYear.Psum/float64(lastCowNum[nowYear.Name]), 3))
|
|
|
+ } else {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ resp.LastYear = append(resp.LastYear, util.Round(lastAll/float64(lastCowNumAll), 3))
|
|
|
+ //resp.LastYear = append(resp.LastYear, lastYearData...)
|
|
|
+ for _, item := range lastYearData {
|
|
|
+ resp.LastYear = append(resp.LastYear, util.Round(item, 3))
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.NowYear = append(resp.NowYear, util.Round(all/float64(cowNumAll), 3))
|
|
|
+
|
|
|
+ num := 0.0
|
|
|
+ for _, item := range nowYearData {
|
|
|
+ num += item
|
|
|
+ resp.NowYear = append(resp.NowYear, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ fmt.Println(num)
|
|
|
+ resp.All = util.Round(all, 3)
|
|
|
+ cowNumAll1 := float64(cowNumAll)
|
|
|
+ resp.Line = util.Round(all/cowNumAll1, 3)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+//单头牛电费
|
|
|
+func (s *Service) GetElectricityRateByPasture(center, startTime, endTime string) (*http.GetWaterRateByPastureResp, error) {
|
|
|
+
|
|
|
+ resp := new(http.GetWaterRateByPastureResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) group by pastureid `,
|
|
|
+ startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ feequeryList := make([]*model.FeeQueryAndPasture, 0)
|
|
|
+ err = s.d.DB.Debug().Raw(`select sum(HSL) HSL ,p.name from feequery fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.Date between ? and ? and fd.FYLX ='电费' and (p.center = ? or ? = '' ) group by fd.pastureId order by p.id`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&feequeryList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var hslList []float64
|
|
|
+ var all float64
|
|
|
+ for _, feequery := range feequeryList {
|
|
|
+ pastureName = append(pastureName, feequery.Pasture.Name)
|
|
|
+ var hsl float64
|
|
|
+ hsl, err = strconv.ParseFloat(feequery.HSL, 64)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("转换失败:", err)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ if _, ok := cowNum[feequery.Name]; ok {
|
|
|
+ all += hsl
|
|
|
+ cowNumAll += cowNum[feequery.Pasture.Name]
|
|
|
+ hslList = append(hslList, hsl/float64(cowNum[feequery.Pasture.Name]))
|
|
|
+ } else {
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, f := range feequeryList {
|
|
|
+ if item.Name == f.Name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, item.Name)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(all/float64(cowNumAll), 3))
|
|
|
+ for _, item := range hslList {
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ resp.Line = util.Round(all/float64(cowNumAll), 3)
|
|
|
+ //resp.Actual = append(resp.Actual, hslList...)
|
|
|
+ return resp, err
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Service) GetElectricityRateCompleteByPasture(center, startTime, endTime string) (*http.GetWaterRateCompleteByPastureResp, error) {
|
|
|
+ resp := new(http.GetWaterRateCompleteByPastureResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ feequeryList := make([]*model.FeeQueryAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(HSL),0) HSL ,p.name from feequery fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.Date between ? and ? and fd.FYLX ='电费' and (p.center = ? or ? = '' ) group by fd.pastureId`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&feequeryList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+ monthBudgetList := make([]*monthBudget, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(monthBudget),0) monthBudget,p.name from month_budget mb join pasture p on p.id = mb.pastureId
|
|
|
+ where mb.feeType = '电费' and mb.budgetMonth between ? and ? and (p.center = ? or ? = '' ) group by mb.pastureId`, startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&monthBudgetList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var budgetList, actualList, complete []float64
|
|
|
+ var budgetAll, actualAll float64
|
|
|
+ for _, monthBudget := range monthBudgetList {
|
|
|
+ pastureName = append(pastureName, monthBudget.Name)
|
|
|
+ budgetList = append(budgetList, util.Round(monthBudget.MonthBudget/10000, 2))
|
|
|
+ budgetAll += monthBudget.MonthBudget
|
|
|
+ exist := false
|
|
|
+ var hsl float64
|
|
|
+ for _, feequery := range feequeryList {
|
|
|
+ if feequery.Name == monthBudget.Name {
|
|
|
+ exist = true
|
|
|
+
|
|
|
+ hsl, err = strconv.ParseFloat(feequery.HSL, 64)
|
|
|
+ if err != nil {
|
|
|
+ actualList = append(actualList, 0)
|
|
|
+ logs.Error("转换失败:", err)
|
|
|
+ } else {
|
|
|
+ actualAll += hsl
|
|
|
+ actualList = append(actualList, util.Round(hsl/10000, 2))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ actualList = append(actualList, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ //预算减实际除预算加1
|
|
|
+ if monthBudget.MonthBudget > 0 && hsl > 0 {
|
|
|
+ complete = append(complete, util.Round(((monthBudget.MonthBudget-hsl)/monthBudget.MonthBudget+1)*100, 2))
|
|
|
+ } else {
|
|
|
+ complete = append(complete, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ actualList = append(actualList, 0)
|
|
|
+ budgetList = append(budgetList, 0)
|
|
|
+ complete = append(complete, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+
|
|
|
+ //resp.Actual = append(resp.Actual, util.Round(actualAll/10000, 2))
|
|
|
+ resp.Actual = append(resp.Actual, actualList...)
|
|
|
+
|
|
|
+ //resp.Budget = append(resp.Budget, util.Round(budgetAll/10000, 2))
|
|
|
+ resp.Budget = append(resp.Budget, budgetList...)
|
|
|
+
|
|
|
+ //if budgetAll > 0 && actualAll > 0 {
|
|
|
+ // resp.Complete = append(resp.Complete, util.Round(((budgetAll-actualAll)/budgetAll+1)*100, 2))
|
|
|
+ //} else {
|
|
|
+ // resp.Complete = append(resp.Complete, 0)
|
|
|
+ //}
|
|
|
+
|
|
|
+ resp.Complete = append(resp.Complete, complete...)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+//每月单头牛用电量对比
|
|
|
+func (s *Service) GetElectricityPerHeadByPasture(pastureId, startTime, endTime string) (map[string]interface{}, error) {
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ dosagePerCowList := make([]*dosagePerCow, 0)
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(`SELECT
|
|
|
+round( IFNULL(SUM(w.elecConsumption),0) ,2)psum,
|
|
|
+ p.name,DATE_FORMAT( w.date, '%Y-%m') date,
|
|
|
+ ifnull((select sum(cowNum) from feed_sum where DATE_FORMAT( feedDay, '%Y-%m') = DATE_FORMAT( w.date, '%Y-%m') and pastureId = p.id ),0)cowNum
|
|
|
+FROM
|
|
|
+ electricity w
|
|
|
+ INNER JOIN measure ms
|
|
|
+ ON w.measureId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.date between ? and ? ) AND ms.useType = '1级表' and p.name <> '现代牧业' and FIND_IN_SET(p.id,?)
|
|
|
+GROUP BY DATE_FORMAT( w.date, '%Y-%m'),ms.pastureId order by DATE_FORMAT( w.date, '%Y-%m'),p.id `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), pastureId).Find(&dosagePerCowList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ data := dosagePerCowFormat(dosagePerCowList)
|
|
|
+ return data, nil
|
|
|
+}
|
|
|
+
|
|
|
+//--------------------------------------- 维修
|
|
|
+//各牧场年度维修对比
|
|
|
+func (s *Service) GetWxYieldByPasture(deptname, center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ //lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+ round(ifnull(SUM( pu.sumPrice - pu.quitNumber * pu.price),0),4) psum,
|
|
|
+ p.name
|
|
|
+FROM
|
|
|
+ partuse pu
|
|
|
+ INNER JOIN bigpartuse bpu
|
|
|
+ ON pu.bigId = bpu.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON bpu.pastureId = p.id
|
|
|
+ #INNER JOIN department dpt
|
|
|
+ #on dpt.id = bpu.departmentId
|
|
|
+WHERE bpu.useType <> 3 and p.IsEnergy = 0
|
|
|
+ AND (SELECT name FROM department d WHERE d.id=bpu.departmentId) not in ('挤奶处','牧场办公室','财务部','餐厅','信息处')
|
|
|
+ AND (
|
|
|
+ pu.useTypeV = '维修'
|
|
|
+ OR pu.useTypeV = '保养'
|
|
|
+ )
|
|
|
+and ( bpu.receiveTime between ? and ?)
|
|
|
+ AND (bpu.departmentId in (select id from department where pastureId = bpu.pastureId and name = ? )
|
|
|
+or if(? = 1 ,bpu.departmentId in(select id from department where pastureId = bpu.pastureId and name != '挤奶处' and name != '牧场办公室' ),0=1) or ?='' ) and p.name <> '现代牧业' and (p.center = ? or ? = '' ) and pu.dflag != 1
|
|
|
+GROUP BY bpu.pastureId `
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), deptname, deptname, deptname, center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ monthBudgetList := make([]*monthBudget, 0)
|
|
|
+ err = s.d.DB.Debug().Raw(`select ifnull(sum(monthBudget),0) monthBudget,p.name from month_budget mb join pasture p on p.id = mb.pastureId
|
|
|
+ where mb.feeType = '维修费' and mb.budgetMonth between ? and ? AND (mb.deptId in (select id from department where pastureId = mb.pastureId and name = ? )
|
|
|
+or if(? = 1 ,mb.deptId in(select id from department where pastureId = mb.pastureId and name != '挤奶处' and name != '牧场办公室' ),0=1) or ?='' ) and (p.center = ? or ? = '' ) group by mb.pastureId`,
|
|
|
+ startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), deptname, deptname, deptname, center, center).Find(&monthBudgetList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ //err = s.d.DB.Raw(sqlstr, startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ // enddate.AddDate(-1, 0, 0).Format("2006-01-02"), deptname, deptname, deptname, deptname, deptname, center, center).Find(&lastYearList).Error
|
|
|
+ //if err != nil {
|
|
|
+ // logs.Error(err)
|
|
|
+ // return nil, err
|
|
|
+ //}
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where("IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ nowYearData = append(nowYearData, util.Round(nowYear.Psum, 2))
|
|
|
+ all += nowYear.Psum
|
|
|
+ //exist := false
|
|
|
+ //for _, lastYear := range lastYearList {
|
|
|
+ // if lastYear.Name == nowYear.Name {
|
|
|
+ // exist = true
|
|
|
+ //
|
|
|
+ // break
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //if !exist {
|
|
|
+ // lastYearData = append(lastYearData, 0)
|
|
|
+ //}
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ //lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, name := range pastureName {
|
|
|
+ exist := false
|
|
|
+ for _, monthBudget := range monthBudgetList {
|
|
|
+ if monthBudget.Name == name {
|
|
|
+ exist = true
|
|
|
+ lastYearData = append(lastYearData, util.Round(monthBudget.MonthBudget, 2))
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = pastureName
|
|
|
+ resp.LastYear = lastYearData
|
|
|
+ resp.NowYear = nowYearData
|
|
|
+ resp.All = util.Round(all, 2)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Service) GetWxSingleCowByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ //lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+ round(ifnull(SUM( pu.sumPrice - pu.quitNumber * pu.price),0),4) psum,
|
|
|
+ p.name
|
|
|
+FROM
|
|
|
+ partuse pu
|
|
|
+ INNER JOIN bigpartuse bpu
|
|
|
+ ON pu.bigId = bpu.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON bpu.pastureId = p.id
|
|
|
+ #INNER JOIN department dpt
|
|
|
+ #on dpt.id = bpu.departmentId
|
|
|
+WHERE bpu.useType <> 3
|
|
|
+ AND (
|
|
|
+ pu.useTypeV = '维修'
|
|
|
+ OR pu.useTypeV = '保养'
|
|
|
+ )
|
|
|
+and ( bpu.receiveTime between ? and ?)
|
|
|
+ and p.name <> '现代牧业' and (p.center = ? or ? = '' ) and pu.dflag != 1
|
|
|
+ AND (SELECT name FROM department d WHERE d.id=bpu.departmentId) not in ('挤奶处','牧场办公室','财务部','餐厅','信息处')
|
|
|
+GROUP BY bpu.pastureId `
|
|
|
+
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ //lastCowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ?
|
|
|
+ and (p.center = ? or ? = '' )
|
|
|
+ group by pastureid `, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ monthBudgetList := make([]*monthBudget, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(monthBudget),0) monthBudget,p.name from month_budget mb join pasture p on p.id = mb.pastureId
|
|
|
+ where mb.feeType = '维修费' and mb.budgetMonth between ? and ? and (p.center = ? or ? = '' ) group by mb.pastureId`,
|
|
|
+ startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&monthBudgetList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ //lastCowNum := make(map[string]int64, 0)
|
|
|
+ //for _, item := range lastCowNumList {
|
|
|
+ // lastCowNumAll += item.FeedSum.CowNum
|
|
|
+ // lastCowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ //}
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all, lastAll float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ if _, ok := cowNum[nowYear.Name]; ok {
|
|
|
+ all += nowYear.Psum
|
|
|
+ cowNumAll += cowNum[nowYear.Name]
|
|
|
+ nowYearData = append(nowYearData, nowYear.Psum/float64(cowNum[nowYear.Name]))
|
|
|
+ } else {
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, name := range pastureName {
|
|
|
+ exist := false
|
|
|
+ for _, monthBudget := range monthBudgetList {
|
|
|
+ if monthBudget.Name == name {
|
|
|
+ exist = true
|
|
|
+ if _, ok := cowNum[monthBudget.Name]; ok {
|
|
|
+ lastAll += monthBudget.MonthBudget
|
|
|
+ lastYearData = append(lastYearData, monthBudget.MonthBudget/float64(cowNum[monthBudget.Name]))
|
|
|
+ } else {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ resp.LastYear = append(resp.LastYear, util.Round(lastAll/float64(cowNumAll), 3))
|
|
|
+ //resp.LastYear = append(resp.LastYear, lastYearData...)
|
|
|
+ for _, item := range lastYearData {
|
|
|
+ resp.LastYear = append(resp.LastYear, util.Round(item, 3))
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.NowYear = append(resp.NowYear, util.Round(all/float64(cowNumAll), 3))
|
|
|
+ for _, item := range nowYearData {
|
|
|
+ resp.NowYear = append(resp.NowYear, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ resp.All = all
|
|
|
+ resp.Line = util.Round(all/float64(cowNumAll), 2)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+//每月单头牛维修对比
|
|
|
+func (s *Service) GetWxPerHeadByPasture(pastureId, startTime, endTime string) (map[string]interface{}, error) {
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ dosagePerCowList := make([]*dosagePerCow, 0)
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(`SELECT
|
|
|
+ round(ifnull(SUM( pu.sumPrice - pu.quitNumber * pu.price),0),4) psum,
|
|
|
+ p.name,DATE_FORMAT( bpu.receiveTime, '%Y-%m') date,
|
|
|
+ ifnull((select sum(cowNum) from feed_sum where DATE_FORMAT( feedDay, '%Y-%m') = DATE_FORMAT( bpu.receiveTime, '%Y-%m') and pastureId = p.id ),0)cowNum
|
|
|
+FROM
|
|
|
+ partuse pu
|
|
|
+ INNER JOIN bigpartuse bpu
|
|
|
+ ON pu.bigId = bpu.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON bpu.pastureId = p.id
|
|
|
+ #INNER JOIN department dpt
|
|
|
+ #on dpt.id = bpu.departmentId
|
|
|
+WHERE bpu.useType <> 3
|
|
|
+ AND (
|
|
|
+ pu.useTypeV = '维修'
|
|
|
+ OR pu.useTypeV = '保养'
|
|
|
+ )
|
|
|
+and ( bpu.receiveTime between ? and ?)
|
|
|
+ AND (SELECT name FROM department d WHERE d.id=bpu.departmentId) not in ('挤奶处','牧场办公室','财务部','餐厅','信息处')
|
|
|
+ and p.name <> '现代牧业' and FIND_IN_SET(p.id,?) and pu.dflag != 1
|
|
|
+GROUP BY DATE_FORMAT( bpu.receiveTime, '%Y-%m'),p.id order by DATE_FORMAT( bpu.receiveTime, '%Y-%m'),p.id `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), pastureId).Find(&dosagePerCowList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ data := dosagePerCowFormat(dosagePerCowList)
|
|
|
+ return data, nil
|
|
|
+}
|
|
|
+
|
|
|
+//各牧场年度燃动费对比
|
|
|
+func (s *Service) GetIgnitionYieldByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ feequeryList := make([]*model.FeeQueryAndPasture, 0)
|
|
|
+ err = s.d.DB.Debug().Raw(`select sum(HSL) HSL ,p.name from feequery fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.Date between ? and ? and fd.FYLX ='燃动费' and (p.center = ? or ? = '' ) group by fd.pastureId order by p.id`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&feequeryList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ monthBudgetList := make([]*monthBudget, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(monthBudget),0) monthBudget,p.name from month_budget mb join pasture p on p.id = mb.pastureId
|
|
|
+ where mb.feeType = '燃动费' and mb.budgetMonth between ? and ? and (p.center = ? or ? = '' ) group by mb.pastureId`,
|
|
|
+ startTime, endTime, center, center).Find(&monthBudgetList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var hslList, monthBudgets []float64
|
|
|
+ var all float64
|
|
|
+ for _, feequery := range feequeryList {
|
|
|
+ pastureName = append(pastureName, feequery.Pasture.Name)
|
|
|
+ var hsl float64
|
|
|
+ hsl, err = strconv.ParseFloat(feequery.HSL, 64)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("转换失败:", err)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ all += util.Round(hsl, 2)
|
|
|
+ hslList = append(hslList, hsl)
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, f := range feequeryList {
|
|
|
+ if item.Name == f.Name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, item.Name)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, name := range pastureName {
|
|
|
+ exist := false
|
|
|
+ for _, monthBudget := range monthBudgetList {
|
|
|
+ if name == monthBudget.Name {
|
|
|
+ exist = true
|
|
|
+ monthBudgets = append(monthBudgets, util.Round(monthBudget.MonthBudget, 2))
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ monthBudgets = append(monthBudgets, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = pastureName
|
|
|
+ resp.LastYear = monthBudgets
|
|
|
+ resp.NowYear = hslList
|
|
|
+ resp.All = util.Round(all, 2)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+//各牧场年度柴油对比
|
|
|
+func (s *Service) GetDieselYieldByPasture(center, startTime, endTime string) (*http.StatementResp, error) {
|
|
|
+ resp := new(http.StatementResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+ nowYearList := make([]*pastureStatistics, 0)
|
|
|
+ lastYearList := make([]*pastureStatistics, 0)
|
|
|
+
|
|
|
+ sqlstr := `SELECT
|
|
|
+ROUND( IFNULL(SUM(w.oilAmount),0) ,2)psum,
|
|
|
+ p.name
|
|
|
+FROM
|
|
|
+ diesel w
|
|
|
+ INNER JOIN oilcard ms
|
|
|
+ ON w.oilcardId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ w.selTime between ? and ? and p.name <> '现代牧业' and (p.center = ? or ? = '' )
|
|
|
+GROUP BY ms.pastureId `
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&nowYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = s.d.DB.Raw(sqlstr, startdate.AddDate(-1, 0, 0).Format("2006-01-02"),
|
|
|
+ enddate.AddDate(-1, 0, 0).Format("2006-01-02"), center, center).Find(&lastYearList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var nowYearData, lastYearData []float64
|
|
|
+ var all float64
|
|
|
+ for _, nowYear := range nowYearList {
|
|
|
+ pastureName = append(pastureName, nowYear.Name)
|
|
|
+ nowYearData = append(nowYearData, util.Round(nowYear.Psum, 2))
|
|
|
+ all += nowYear.Psum
|
|
|
+ exist := false
|
|
|
+ for _, lastYear := range lastYearList {
|
|
|
+ if lastYear.Name == nowYear.Name {
|
|
|
+ exist = true
|
|
|
+ lastYearData = append(lastYearData, util.Round(lastYear.Psum, 2))
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, pasture := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, name := range pastureName {
|
|
|
+ if pasture.Name == name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, pasture.Name)
|
|
|
+ nowYearData = append(nowYearData, 0)
|
|
|
+ lastYearData = append(lastYearData, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = pastureName
|
|
|
+ resp.LastYear = lastYearData
|
|
|
+ resp.NowYear = nowYearData
|
|
|
+ resp.All = util.Round(all, 2)
|
|
|
+ return resp, nil
|
|
|
+}
|
|
|
+
|
|
|
+//单头牛柴油
|
|
|
+func (s *Service) GetDieselRateByPasture(center, startTime, endTime string) (*http.GetWaterRateByPastureResp, error) {
|
|
|
+
|
|
|
+ resp := new(http.GetWaterRateByPastureResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) group by pastureid `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where("IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ dieselList := make([]*pastureStatistics, 0)
|
|
|
+ sqlstr := `SELECT
|
|
|
+ROUND( IFNULL(SUM(w.oilAmount),0) ,2)psum,
|
|
|
+ p.name
|
|
|
+FROM
|
|
|
+ diesel w
|
|
|
+ INNER JOIN oilcard ms
|
|
|
+ ON w.oilcardId = ms.id
|
|
|
+ INNER JOIN pasture p
|
|
|
+ ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ w.selTime between ? and ? and p.name <> '现代牧业' and (p.center = ? or ? = '' )
|
|
|
+GROUP BY ms.pastureId `
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(sqlstr, startdate.Format("2006-01-02"), enddate.Format("2006-01-02"), center, center).Find(&dieselList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var hslList []float64
|
|
|
+ var all float64
|
|
|
+ for _, diesel := range dieselList {
|
|
|
+ pastureName = append(pastureName, diesel.Name)
|
|
|
+ if _, ok := cowNum[diesel.Name]; ok {
|
|
|
+ all += diesel.Psum
|
|
|
+ cowNumAll += cowNum[diesel.Name]
|
|
|
+ hslList = append(hslList, diesel.Psum/float64(cowNum[diesel.Name]))
|
|
|
+ } else {
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, f := range dieselList {
|
|
|
+ if item.Name == f.Name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, item.Name)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(all/float64(cowNumAll), 3))
|
|
|
+ for _, item := range hslList {
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ resp.Line = util.Round(all/float64(cowNumAll), 3)
|
|
|
+
|
|
|
+ return resp, err
|
|
|
+}
|
|
|
+
|
|
|
+//单头牛燃动费
|
|
|
+func (s *Service) GetIgnitionRateByPasture(center, startTime, endTime string) (*http.GetWaterRateCompleteByPastureResp, error) {
|
|
|
+
|
|
|
+ resp := new(http.GetWaterRateCompleteByPastureResp)
|
|
|
+
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ cowNumList := make([]*model.FeedSumAndPasture, 0)
|
|
|
+ err = s.d.DB.Raw(`select sum(cowNum)cowNum ,p.name from feed_sum fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.feedDay between ? and ? and (p.center = ? or ? = '' ) group by pastureid `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), center, center).Find(&cowNumList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ cowNum := make(map[string]int64, 0)
|
|
|
+ var cowNumAll int64
|
|
|
+ for _, item := range cowNumList {
|
|
|
+
|
|
|
+ cowNum[item.Pasture.Name] = item.FeedSum.CowNum
|
|
|
+ }
|
|
|
+
|
|
|
+ pastureList := make([]*model.Pasture, 0)
|
|
|
+ err = s.d.DB.Where(" vendor = 1 ").Where(" IsEnergy = 0").Order("id").Find(&pastureList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ feequeryList := make([]*model.FeeQueryAndPasture, 0)
|
|
|
+ err = s.d.DB.Debug().Raw(`select sum(HSL) HSL ,p.name from feequery fd join pasture p on p.id = fd.pastureid
|
|
|
+ where fd.Date between ? and ? and fd.FYLX ='燃动费' and (p.center = ? or ? = '' ) group by fd.pastureId order by p.id`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&feequeryList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ monthBudgetList := make([]*monthBudget, 0)
|
|
|
+ err = s.d.DB.Raw(`select ifnull(sum(monthBudget),0) monthBudget,p.name from month_budget mb join pasture p on p.id = mb.pastureId
|
|
|
+ where mb.feeType = '燃动费' and mb.budgetMonth between ? and ? and (p.center = ? or ? = '' ) group by mb.pastureId`,
|
|
|
+ startdate.Format("2006-01"), enddate.Format("2006-01"), center, center).Find(&monthBudgetList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return resp, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pastureName []string
|
|
|
+ var hslList []float64
|
|
|
+ var monthBudgets []float64
|
|
|
+ var all, monthBudgetAll float64
|
|
|
+ for _, feequery := range feequeryList {
|
|
|
+ pastureName = append(pastureName, feequery.Name)
|
|
|
+ var hsl float64
|
|
|
+ hsl, err = strconv.ParseFloat(feequery.HSL, 64)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("转换失败:", err)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ if _, ok := cowNum[feequery.Name]; ok {
|
|
|
+ all += hsl
|
|
|
+ cowNumAll += cowNum[feequery.Name]
|
|
|
+ hslList = append(hslList, hsl/float64(cowNum[feequery.Name]))
|
|
|
+ } else {
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range pastureList {
|
|
|
+ exist := false
|
|
|
+ for _, f := range feequeryList {
|
|
|
+ if item.Name == f.Name {
|
|
|
+ exist = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ pastureName = append(pastureName, item.Name)
|
|
|
+ hslList = append(hslList, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, name := range pastureName {
|
|
|
+ exist := false
|
|
|
+ for _, monthBudget := range monthBudgetList {
|
|
|
+ if name == monthBudget.Name {
|
|
|
+ exist = true
|
|
|
+ if _, ok := cowNum[name]; ok {
|
|
|
+ monthBudgetAll += monthBudget.MonthBudget
|
|
|
+ monthBudgets = append(monthBudgets, monthBudget.MonthBudget/float64(cowNum[name]))
|
|
|
+ } else {
|
|
|
+ monthBudgets = append(monthBudgets, 0)
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !exist {
|
|
|
+ monthBudgets = append(monthBudgets, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Pasture = append(resp.Pasture, "集团")
|
|
|
+ resp.Pasture = append(resp.Pasture, pastureName...)
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(all/float64(cowNumAll), 3))
|
|
|
+ for _, item := range hslList {
|
|
|
+ resp.Actual = append(resp.Actual, util.Round(item, 3))
|
|
|
+ }
|
|
|
+ resp.Line = util.Round(all/float64(cowNumAll), 3)
|
|
|
+
|
|
|
+ resp.Budget = append(resp.Budget, util.Round(monthBudgetAll/float64(cowNumAll), 3))
|
|
|
+ for _, item := range monthBudgets {
|
|
|
+ resp.Budget = append(resp.Budget, util.Round(item, 3))
|
|
|
+ }
|
|
|
+
|
|
|
+ return resp, err
|
|
|
+}
|
|
|
+
|
|
|
+//每月单头牛柴油对比
|
|
|
+func (s *Service) GetDieselPerHeadByPasture(pastureId, startTime, endTime string) (map[string]interface{}, error) {
|
|
|
+ layout := "2006-01-02"
|
|
|
+ startdate, err := time.Parse(layout, startTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate, err := time.Parse(layout, endTime)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("时间转换失败:", err)
|
|
|
+ }
|
|
|
+ enddate = enddate.AddDate(0, 1, -1)
|
|
|
+
|
|
|
+ dosagePerCowList := make([]*dosagePerCow, 0)
|
|
|
+
|
|
|
+ err = s.d.DB.Debug().Raw(`SELECT
|
|
|
+round( IFNULL(SUM(w.oilAmount),0) ,2)psum,
|
|
|
+ p.name,DATE_FORMAT( w.selTime, '%Y-%m') date,
|
|
|
+ ifnull((select sum(cowNum) from feed_sum where DATE_FORMAT( feedDay, '%Y-%m') = DATE_FORMAT( w.selTime, '%Y-%m') and pastureId = p.id ),0)cowNum
|
|
|
+FROM
|
|
|
+diesel w
|
|
|
+INNER JOIN oilcard ms
|
|
|
+ON w.oilcardId = ms.id
|
|
|
+INNER JOIN pasture p
|
|
|
+ON ms.pastureId = p.id
|
|
|
+WHERE
|
|
|
+ (w.selTime between ? and ? ) and p.name <> '现代牧业' and FIND_IN_SET(p.id,?)
|
|
|
+GROUP BY DATE_FORMAT( w.selTime, '%Y-%m'),ms.pastureId order by DATE_FORMAT( w.selTime, '%Y-%m'),p.id `, startdate.Format("2006-01-02"),
|
|
|
+ enddate.Format("2006-01-02"), pastureId).Find(&dosagePerCowList).Error
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ data := dosagePerCowFormat(dosagePerCowList)
|
|
|
+ return data, nil
|
|
|
+}
|