package api

import (
	"../../pkg/logging"
	"../../pkg/util"
	"../../routers/restful"
	"encoding/json"
	"fmt"
	"github.com/Anderson-Lu/gofasion/gofasion"
	"github.com/gin-gonic/gin"
	"github.com/hequan2017/go-admin/pkg/e"
	"github.com/robfig/cron"
	"io/ioutil"
	"log"
	"net/http"
	"strconv"
	"time"

	"../../pkg/app"
	//"time"
	"../../pkg/setting"
)

func GetDorm(c *gin.Context) {
	appG := app.Gin{C: c}
	if setting.ServerSetting.GRFD != "1"{  //格润富德
		appG.Response(http.StatusOK, e.SUCCESS, nil)
		return
	}
	dataByte, _ := ioutil.ReadAll(c.Request.Body)
	fsion := gofasion.NewFasion(string(dataByte))
	pastureid := fsion.Get("pastureid").ValueStr()

	err := GetMaterialCategory(pastureid) //饲料分类
	if err != nil{
		appG.Response(http.StatusOK, e.ERROR, "饲料分类同步失败:"+err.Error())
		return
	}
	err = GetCowCategory(pastureid)  // 牲畜类别
	if err != nil{
		appG.Response(http.StatusOK, e.ERROR, "牲畜类别同步失败:"+err.Error())
		return
	}
	err = GetDormBar(pastureid)   // 栏舍
	if err != nil{
		appG.Response(http.StatusOK, e.ERROR, "栏舍同步失败:"+err.Error())
		return
	}
	err = GetMaterial(pastureid) //饲料
	if err != nil{
		appG.Response(http.StatusOK, e.ERROR, "饲料同步失败:"+err.Error())
		return
	}
	err = GetFormula(pastureid) // 配方
	if err != nil{
		appG.Response(http.StatusOK, e.ERROR, "配方同步失败:"+err.Error())
		return
	}

	appG.Response(http.StatusOK, e.SUCCESS, nil)

}
func GetDormBar(pastureid string)error {
	//appG := app.Gin{C: c}
	//dataByte, _ := ioutil.ReadAll(c.Request.Body)
	//fsion := gofasion.NewFasion(string(dataByte))
	//sqlnamestr := fsion.Get("name").ValueStr()
	//offset := fsion.Get("offset").ValueDefaultInt(0)
	//pagecount := fsion.Get("pagecount").ValueDefaultInt(0)
	//returntype := fsion.Get("returntype").ValueDefaultStr("map")
	data := util.Send_Message1("{\"farmId\":4090}", "http://120.48.30.31:88/kaps-cow/api/tmr/getDorm")
	if data != nil {
		var feedp util.Feedp
		json.Unmarshal(data, &feedp)
		status := feedp.Status
		feedpData := feedp.Data

		if status == 0 {
			//dataByte, _ := ioutil.ReadAll(c.Request.Body)
			//fsion := gofasion.NewFasion(string(dataByte))
			//pastureid := fsion.Get("pastureid").ValueStr()
			// 开启事务
			tx := restful.Engine.NewSession()
			err := tx.Begin()
			defer func() {
				switch {
				case err != nil:
					logging.Error("tx.Begin 事务启动失败__error:", err)
					if tx != nil {
						tx.Rollback()
					}
				default:
					if tx != nil {
						err = tx.Commit()
					}
				}
				if tx != nil {
					tx.Close()
				}
			}()
			//feedpData := feedpData[:10]
			valuesMap, _ := tx.SQL("SELECT ifnull(backup2,'-1')backup2,bname  FROM bar WHERE  pastureid = ?",pastureid).QueryString()
			mt :=  make(map[string]string)
			for _, v := range valuesMap {
				mt[v["bname"]] = v["backup2"]
			}
			ise := false
			for _, val := range feedpData {
				penId := val.PenId
				penName := val.PenName
				cowCount := val.CowCount
				ccountRatio := val.CcountRatio

				//createdAt := val.CreatedAt
				modifiedAt := val.ModifiedAt
				isexec := false
				if _,ok :=mt[penName]; ok{
					if mt[penName] == modifiedAt{
						continue
					}
				}else{
					isexec = true
				}
				ise = true
				fmt.Println(penId, penName, cowCount, ccountRatio,modifiedAt,mt[penName])

				ids, err := setting.SnowIds.NextId()
				if err != nil {
					ids = time.Now().UnixNano()
					logging.Info("create SnowIds err", err)
				}

				_, err = tx.Exec("insert into bar(id,pastureid,backup1,backup2,bname,enable) "+
					" values(?,?,?,?,?,0)"+
					" ON DUPLICATE KEY UPDATE backup1=?,backup2=?",
					ids, pastureid, penId,modifiedAt, penName,penId,modifiedAt)

				if err != nil {
					return  err
				}

				//_, err = tx.Exec("insert into feedp(id,pastureid,barid,barname,ccount,ratio,ccountratio) "+
				//	" values(?,?,(select id from bar where pastureid=? and bname=?),?,(if(?='',0,?)),REPLACE(?,'%',''),REPLACE(?,'%','')*(if(?='',0,?)))"+
				//	" ON DUPLICATE KEY UPDATE barname=?,ccount=(if(?='',0,?)),ratio=REPLACE(?,'%',''),ccountratio=REPLACE(?,'%','')*(if(?='',0,?))",
				//	ids, pastureid, pastureid, penName, penName, cowCount, cowCount, ccountRatio, ccountRatio, cowCount, cowCount, penName,
				//	cowCount, cowCount, ccountRatio, ccountRatio, cowCount, cowCount)
				if isexec{  //不配置配方,不去新增feedp
					_, err = tx.Exec(`UPDATE feedp set ccount=(if(?='',0,?)),ratio=REPLACE(?,'%',''),ccountratio=REPLACE(?,'%','')*(if(?='',0,?))/100 
							where barid = (select id from bar where pastureid=? and bname=?) and pastureid = ?`,
						cowCount, cowCount, ccountRatio, ccountRatio, cowCount, cowCount, pastureid,penName,pastureid)

					if err != nil {
						return  err
					}

					_, err = tx.Exec(`UPDATE fpdetail  fpd
								JOIN feedp fp ON fp.pastureid = fpd.pastureid AND fp.barid =fpd.barid
								SET 
								fpd.weight = weight *(fp.ccount*fp.ratio/fpd.cowcount/fpd.ccountradio)
								WHERE fpd.pastureid = ? and barid =(select id from bar where pastureid=? and bname=?)`,pastureid,pastureid,penName)
					if err != nil {
						return  err
					}
					_, err = tx.Exec("call updateLPPbyFPChange((select id from bar where pastureid=? and bname=?),?)",pastureid,penName,pastureid)
					if err != nil {
						return  err
					}
				}

			}
			if ise{
				_, err = tx.Exec(`UPDATE fpdetail  fpd
								JOIN feedp fp ON fp.pastureid = fpd.pastureid AND fp.barid =fpd.barid
								SET 
								fp.feedweight = fp.feedweight *(fp.ccount*fp.ratio/fpd.cowcount/fpd.ccountradio),
								fp.ftweight = fp.ftweight *(fp.ccount*fp.ratio/fpd.cowcount/fpd.ccountradio),
								fpd.ccountradio =fp.ratio ,
								fpd.cowcount =fp.ccount
								WHERE fpd.pastureid = ? `,pastureid)
				if err != nil {
					return  err
				}
			}

		}

	}
	return  nil

}

func GetMaterial(pastureid string) error{
	data := util.Send_Message1("{\"farmId\":4090}", "http://120.48.30.31:88/kaps-cow/api/tmr/getMaterial")
	if data != nil {
		var feed util.Feed
		json.Unmarshal(data, &feed)
		status := feed.Status
		feedpData := feed.Data

		if status == 0 {


			// 开启事务
			tx := restful.Engine.NewSession()
			err := tx.Begin()
			defer func() {
				switch {
				case err != nil:
					logging.Error("tx.Begin 事务启动失败__error:", err)
					if tx != nil {
						tx.Rollback()
					}
				default:
					if tx != nil {
						err = tx.Commit()
					}
				}
				if tx != nil {
					tx.Close()
				}
			}()
			valuesMap, _ := tx.SQL("SELECT ifnull(backup2,'-1')backup2,fname  FROM feed WHERE  pastureid = ?",pastureid).QueryString()
			mt :=  make(map[string]string)
			for _, v := range valuesMap {
				mt[v["fname"]] = v["backup2"]
			}
			for _, val := range feedpData {
				fId := val.FId
				fName := val.FName
				price := val.Price
				dryMatter := val.DryMatter
				//autoChange := val.AutoChange
				//allowDev := val.AllowDev
				feedclassName := val.FeedclassName
				createdAt := val.CreatedAt
				modifiedAt := val.ModifiedAt

				if _,ok :=mt[fName]; ok{
					if mt[fName] == modifiedAt{
						continue
					}
				}
				fmt.Println(fName, feedclassName, createdAt, modifiedAt)

				ids, err := setting.SnowIds.NextId()
				if err != nil {
					ids = time.Now().UnixNano()
					logging.Info("create SnowIds err", err)
				}

				_, err = tx.Exec("insert into feed(id,pastureid,backup1,backup2,fname,fclass,fclassid,uprice,dry) "+
					" values(?,?,?,?,?,?,(select id from feedclass where fcname=? and pastureid=?),(if(?='',0,?)),(if(?='' or ?='~',0,?)))"+
					" ON DUPLICATE KEY UPDATE backup1=?,backup2=?,fname=?,fclass=?,fclassid=(select id from feedclass where fcname=? and pastureid=?),uprice=(if(?='',0,?)),dry=(if(?='' or ?='~',0,?))",
					ids, pastureid, fId,modifiedAt, fName, feedclassName, feedclassName, pastureid, price, price, dryMatter, dryMatter, dryMatter, fId,modifiedAt, fName, feedclassName, feedclassName, pastureid, price, price, dryMatter, dryMatter, dryMatter)
				if err != nil {
					return  err
				}

			}
		}

	}
 return nil
}

func GetMaterialCategory(pastureid string)error {
	data := util.Send_Message1("{\"farmId\":4090}", "http://120.48.30.31:88/kaps-cow/api/tmr/getMaterialCategory")
	if data != nil {
		var feedClass util.FeedClass
		json.Unmarshal(data, &feedClass)
		status := feedClass.Status
		feedpData := feedClass.Data

		if status == 0 {
			//dataByte, _ := ioutil.ReadAll(c.Request.Body)
			//fsion := gofasion.NewFasion(string(dataByte))
			//pastureid := fsion.Get("pastureid").ValueStr()
			// 开启事务
			tx := restful.Engine.NewSession()
			err := tx.Begin()
			defer func() {
				switch {
				case err != nil:
					logging.Error("tx.Begin 事务启动失败__error:", err)
					if tx != nil {
						tx.Rollback()
					}
				default:
					if tx != nil {
						err = tx.Commit()
					}
				}
				if tx != nil {
					tx.Close()
				}
			}()



			for _, val := range feedpData {
				feedclassName := val.FeedclassName
				feedclassId := val.FeedclassId
				createdAt := val.CreatedAt
				modifiedAt := val.ModifiedAt
				fmt.Println(feedclassId, feedclassName, createdAt, modifiedAt)


				ids, err := setting.SnowIds.NextId()
				if err != nil {
					ids = time.Now().UnixNano()
					logging.Info("create SnowIds err", err)
				}

				_, err = tx.Exec("insert into feedclass(id,pastureid,fcname,backup1,bigfeedclassid,bigfeedclassname,sort,`enable`) values(?,?,?,?,?,?,?,?)"+
					" ON DUPLICATE KEY UPDATE fcname=?,backup1=?",
					ids, pastureid, feedclassName, feedclassId, 3, "精粗各半", 0, 1, feedclassName, feedclassId)
				if err != nil {
					return  err
				}

			}
		}

	}
	return nil
}

func GetCowCategory(pastureid string)error {
	data := util.Send_Message1("{\"farmId\":4090}", "http://120.48.30.31:88/kaps-cow/api/tmr/getCowCategory")
	if data != nil {
		var cowClass util.CowClass
		json.Unmarshal(data, &cowClass)
		status := cowClass.Status
		feedpData := cowClass.Data

		if status == 0 {
			//dataByte, _ := ioutil.ReadAll(c.Request.Body)
			//fsion := gofasion.NewFasion(string(dataByte))
			//pastureid := fsion.Get("pastureid").ValueStr()
			// 开启事务
			tx := restful.Engine.NewSession()
			err := tx.Begin()
			defer func() {
				switch {
				case err != nil:
					logging.Error("tx.Begin 事务启动失败__error:", err)
					if tx != nil {
						tx.Rollback()
					}
				default:
					if tx != nil {
						err = tx.Commit()
					}
				}
				if tx != nil {
					tx.Close()
				}
			}()

			for _, val := range feedpData {
				cowClassCode := val.CowClassCode
				cowClassName := val.CowClassName
				createdAt := val.CreatedAt
				modifiedAt := val.ModifiedAt
				fmt.Println(cowClassCode, cowClassName, createdAt, modifiedAt)

				ids, err := setting.SnowIds.NextId()
				if err != nil {
					ids = time.Now().UnixNano()
					logging.Info("create SnowIds err", err)
				}

				_, err = tx.Exec("insert into cowclass(id,pastureid,backup1,classname) values(?,?,?,?)"+
					" ON DUPLICATE KEY UPDATE backup1=?,classname=?",
					ids, pastureid, cowClassCode, cowClassName, cowClassCode, cowClassName)
				if err != nil {
					return  err
				}


			}
		}

	}
	return nil
}

func GetFormula(pastureid string)error {
	data := util.Send_Message1("{\"farmId\":4090}", "http://120.48.30.31:88/kaps-cow/api/tmr/getFormula")
	if data != nil {
		var feedTemplet util.FeedTemplet
		json.Unmarshal(data, &feedTemplet)
		status := feedTemplet.Status
		feedpData := feedTemplet.Data

		if status == 0 {
			//dataByte, _ := ioutil.ReadAll(c.Request.Body)
			//fsion := gofasion.NewFasion(string(dataByte))
			//pastureid := fsion.Get("pastureid").ValueStr()
			// 开启事务
			tx := restful.Engine.NewSession()
			err := tx.Begin()
			defer func() {
				switch {
				case err != nil:
					logging.Error("tx.Begin 事务启动失败__error:", err)
					if tx != nil {
						tx.Rollback()
					}
				default:
					if tx != nil {
						err = tx.Commit()
					}
				}
				if tx != nil {
					tx.Close()
				}
			}()
			valuesMap, _ := tx.SQL("SELECT ifnull(backup2,'-1')backup2,tname  FROM feedtemplet WHERE  pastureid = ?",pastureid).QueryString()
			mt :=  make(map[string]string)
			for _, v := range valuesMap {
				mt[v["tname"]] = v["backup2"]
			}
			for _, val := range feedpData {
				ftId := val.FtId
				ftName := val.FtName
				feedList := val.FeedList
				//createdAt := val.CreatedAt
				modifiedAt := val.ModifiedAt
				if _,ok :=mt[ftName]; ok{
					if mt[ftName] == modifiedAt{
						continue
					}
				}
				ids, err := setting.SnowIds.NextId()
				if err != nil {
					ids = time.Now().UnixNano()
					logging.Info("create SnowIds err", err)
				}

				_, err = tx.Exec("insert into feedtemplet(id,pastureid,ccid,backup1,backup2,tname,fttypeid,fttype)  values(?,?,null,?,?,?,1,'饲喂配方')"+
					" ON DUPLICATE KEY UPDATE backup1=?,tname=?,backup2= ?",
					ids, pastureid, ftId,modifiedAt, ftName, ftId, ftName,modifiedAt)

				if err != nil {
					return  err
				}

				tx.Exec("delete from ftdetail where ftid=(select id from feedtemplet where pastureid=? and tname=?)",pastureid, ftName)

				for _, val := range feedList {
					fId := val.FId
					fName := val.FName
					fodderWeight := val.FodderWeight
					mixNo := val.MixNo

					ids, err := setting.SnowIds.NextId()

					if err != nil {
						ids = time.Now().UnixNano()
						logging.Info("create SnowIds err", err)
					}

					_, err = tx.Exec("insert into ftdetail(id,pastureid,ftid,fid,fname,fweight,sort)  "+
						" values(?,?,(select id from feedtemplet where pastureid=? and tname=? limit 1),(select id from feed where pastureid=? and backup1=? limit 1),?,(if(?='',0,?)),(if(?='',0,?)))" +
						"ON DUPLICATE KEY UPDATE fweight=(if(?='',0,?)),sort=(if(?='',0,?))",
						ids, pastureid, pastureid, ftName, pastureid, fId, fName, fodderWeight, fodderWeight, mixNo, mixNo,fodderWeight,fodderWeight, mixNo, mixNo)
					if err != nil {
						return  err
					}
					_, err = tx.Exec("call updateFPbyFTChange((select id from feedtemplet where pastureid=? and tname=? limit 1),?,(select fttypeid from feedtemplet where pastureid=? and tname=? limit 1))",pastureid,ftName,pastureid,pastureid,ftName)
					if err != nil {
						return  err
					}
				}
			}
		}

	}
	return nil
}

func AddOtherDevice() {
	tx := restful.Engine.NewSession()
	err := tx.Begin()
	defer func() {
		switch {
		case err != nil:
			logging.Error("tx.Begin 事务启动失败__error:", err)
			if tx != nil {
				tx.Rollback()
			}
		default:
			if tx != nil {
				err = tx.Commit()
			}
		}
		if tx != nil {
			tx.Close()
		}
	}()


	queryIdList, err1 := tx.SQL("select d.id,d.projname projName from downloadedplan d where  d.mydate=date_format(NOW(),'%Y-%m-%d') and iscompleted=1 and d.isuse=0 " +
		" and d.pastureid =(SELECT column_default  FROM information_schema.COLUMNS WHERE table_name = 'recweight' AND table_schema = 'tmrwatch' AND column_name = 'pastureid') ").Query().List()

	queryDataList, err2 := tx.SQL("select  d.id id,d.projname projName,round(d.lweight,2) lWeight,date_format(d.mydate,'%Y-%m-%d') as loadDate,d.SORT as tmrNo,d.Times as times,ft.backup1 as ftId,d.templetName  as ftName,f.backup1 as fId,"+
		" de.Fname as fName,fc.FCNAME as feedclassName,de.SORT as sort,de.feedallowratio as allowableError, "+
		" cast(ifnull(de.LWEIGHT,0) as decimal(10,2)) as expWeight,cast(ifnull(de.ActualWeightMinus,0) as decimal(10,2)) as actualWeight,"+
		" date_format(de.intime,'%Y-%m-%d %H:%i:%s') as endTime ,d.tmrtname as tName ,'' dName "+
		" from downloadedplan d LEFT JOIN downloadplandtl1 de on d.id=de.PID and d.pastureid=de.pastureid "+
		" LEFT JOIN feed f on de.fid=f.id and f.pastureid=d.pastureid LEFT JOIN feedtemplet ft on d.tempid=ft.id and ft.pastureid=d.pastureid "+
		" LEFT JOIN feedclass fc on f.fclassid=fc.id and fc.pastureid=d.pastureid  "+
		" where d.mydate=date_format(NOW(),'%Y-%m-%d') and iscompleted=1 and d.isuse=0  " +
		" and d.pastureid =(SELECT column_default  FROM information_schema.COLUMNS WHERE table_name = 'recweight' AND table_schema = 'tmrwatch' AND column_name = 'pastureid') ").Query().List()

	if err1 == nil && err2 == nil {

		for i := 0; i < len(queryIdList); i++ {
			id := queryIdList[i]["id"]
			projName := queryIdList[i]["projName"]

			listData := make(map[string]interface{})

			listData["farmId"] = 4090
			listData["id"] = id
			listData["projName"] = projName

			feedList := []interface{}{}

			for j := 0; j < len(queryDataList); j++ {
				id2 := queryDataList[j]["id"]
				if id == id2 {
					dataList := make(map[string]interface{})
					dataList["tmrNo"] = queryDataList[j]["tmrNo"]
					dataList["times"] = queryDataList[j]["times"]
					dataList["loadDate"] = queryDataList[j]["loadDate"]
					dataList["ftId"] = queryDataList[j]["ftId"]
					dataList["ftName"] = queryDataList[j]["ftName"]
					dataList["fId"] = queryDataList[j]["fId"]
					dataList["tName"] = queryDataList[j]["tName"]
					dataList["feedclassName"] = queryDataList[j]["feedclassName"]
					dataList["fName"] = queryDataList[j]["fName"]
					dataList["sort"] = queryDataList[j]["sort"]

					dataList["allowableError"] = queryDataList[j]["allowableError"]

					expWeight, _ := strconv.ParseFloat(queryDataList[j]["expWeight"].(string), 64)
					actualWeight, _ := strconv.ParseFloat((queryDataList[j]["actualWeight"]).(string), 64)
					lWeight, _ := strconv.ParseFloat(queryDataList[j]["lWeight"].(string), 64)


					dataList["expWeight"] = expWeight
					dataList["actualWeight"] = actualWeight
					dataList["lWeight"] = lWeight

					dataList["endTime"] = queryDataList[j]["endTime"]
					dataList["dName"] = queryDataList[j]["dName"]

					feedList = append(feedList, dataList)
				}
			}
			listData["data"] = feedList

			jsonStr, _ := json.Marshal(listData)

			postData := make(map[string]string)
			postData["formData"] = string(jsonStr)


			err = util.PostWithFormData("POST", "http://120.48.30.31:88/kaps-cow/api/tmr/addOtherDevice", &postData)
			if err != nil{
				fmt.Println("AddOtherDevice err:",err)
				logging.Error("AddOtherDevice err:",err)
			}


		}
	}

}

func AddOtherDeviceFeeding() {

	tx := restful.Engine.NewSession()
	err := tx.Begin()
	defer func() {
		switch {
		case err != nil:
			logging.Error("tx.Begin 事务启动失败__error:", err)
			if tx != nil {
				tx.Rollback()
			}
		default:
			if tx != nil {
				err = tx.Commit()
			}
		}
		if tx != nil {
			tx.Close()
		}
	}()

	queryIdList, err1 := tx.SQL("select d.id,d.projname projName from downloadedplan d where d.mydate=date_format(NOW(),'%Y-%m-%d')   and iscompleted=1 and d.isuse=0  " +
		" and d.pastureid =(SELECT column_default  FROM information_schema.COLUMNS WHERE table_name = 'recweight' AND table_schema = 'tmrwatch' AND column_name = 'pastureid')").Query().List()

	queryDataList, err2 := tx.SQL("SELECT  d.id id,d.projname projName,date_format(d.mydate,'%Y-%m-%d') as dropDate,d.Times as times,d.SORT as tmrNo,"+
		" bar.backup1 as penId,d2.fname as penName,fp.CCOUNT as cowCount, d2.SORT as sort,d.templetName ftName, ft.backup1 ftId,"+
		" ifnull(d2.LWEIGHT,0) as expWeight,d2.ActualWeightMinus as actualWeight,date_format(d2.intime,'%Y-%m-%d %H:%i:%s') as endTime,d.tmrtname as tName,'' dName  "+
		" from  downloadedplan d LEFT JOIN downloadplandtl2 d2 on d.id=d2.PID and d.pastureid=d2.pastureid  "+
		" LEFT JOIN bar on  d2.fbarid=bar.id and bar.pastureid=d2.pastureid LEFT JOIN feedp fp on d2.fbarid=fp.barid and fp.pastureid=d2.pastureid "+
		" LEFT JOIN feedtemplet ft on d.tempid=ft.id and ft.pastureid=d.pastureid "+
		" where d.mydate=date_format(NOW(),'%Y-%m-%d')  and iscompleted=1 and d.isuse=0 " +
		" and d.pastureid =(SELECT column_default  FROM information_schema.COLUMNS WHERE table_name = 'recweight' AND table_schema = 'tmrwatch' AND column_name = 'pastureid') ").Query().List()

	if err1 == nil && err2 == nil {

		for i := 0; i < len(queryIdList); i++ {
			id := queryIdList[i]["id"]
			projName := queryIdList[i]["projName"]

			listData := make(map[string]interface{})

			listData["farmId"] = 4090
			listData["id"] = id
			listData["projName"] = projName

			feedList := []interface{}{}

			for j := 0; j < len(queryDataList); j++ {
				id2 := queryDataList[j]["id"]
				if id == id2 {
					dataList := make(map[string]interface{})
					dataList["dropDate"] = queryDataList[j]["dropDate"]
					dataList["times"] = queryDataList[j]["times"]
					dataList["tmrNo"] = queryDataList[j]["tmrNo"]
					dataList["tName"] = queryDataList[j]["tName"]
					dataList["dName"] = queryDataList[j]["dName"]

					expWeight, _ := strconv.ParseFloat(queryDataList[j]["expWeight"].(string), 64)
					actualWeight, _ := strconv.ParseFloat((queryDataList[j]["actualWeight"]).(string), 64)


					dataList["expWeight"] = expWeight
					dataList["actualWeight"] = actualWeight

					dataList["endTime"] = queryDataList[j]["endTime"]
					dataList["penId"] = queryDataList[j]["penId"]
					dataList["penName"] = queryDataList[j]["penName"]
					dataList["cowCount"] = queryDataList[j]["cowCount"]
					dataList["sort"] = queryDataList[j]["sort"]
					dataList["ftId"] = queryDataList[j]["ftId"]
					dataList["ftName"] = queryDataList[j]["ftName"]
					feedList = append(feedList, dataList)
				}
			}
			listData["data"] = feedList
			jsonStr, _ := json.Marshal(listData)
			postData := make(map[string]string)
			postData["formData"] = string(jsonStr)
			err  = util.PostWithFormData("POST", "http://120.48.30.31:88/kaps-cow/api/tmr/addOtherDeviceFeeding", &postData)
			if err != nil{
				fmt.Println("AddOtherDeviceFeeding err:",err)
				logging.Error("AddOtherDeviceFeeding err:",err)
			}else {

				_,err = tx.Exec(`update downloadedplan set isuse=1 where mydate=date_format(NOW(),'%Y-%m-%d')  and iscompleted=1 and isuse=0	
							and pastureid =(SELECT column_default  FROM information_schema.COLUMNS WHERE table_name = 'recweight' 
							AND table_schema = 'tmrwatch' AND column_name = 'pastureid') `)
				if err != nil{
					logging.Error("update downloadedplan err:",err)
				}
			}
		}
	}

	//data := util.Send_Message1("{\"farmId\":4090}", "http://120.48.30.31:86/kaps-cow/api/tmr/getMaterial")

}

func PostTmrData(){
	defer func() { // 必须要先声明defer
		if err := recover(); err != nil {
			fmt.Printf("CronTest pnic err%+v \n", err)
			logging.Error("panic recover err ", err)
			//println("pnic err",err.(error).Error()) // 这里的err其实就是panic传入的内容,55
		}
	}()
	println("开始执行")
	AddOtherDevice()
	AddOtherDeviceFeeding()
}

func CronGRFD() {
	defer func() { // 必须要先声明defer
		if err := recover(); err != nil {
			fmt.Printf("CronTest pnic err%+v \n", err)
			logging.Error("panic recover err ", err)
		}
	}()
	log.Println("Starting CronWXwork...")
	c := cron.New()
	_, err := c.AddFunc("0/3 * * * *", PostTmrData) //* * * * *, 从分钟开始 每5分钟
	if err != nil {
		println("cron4 err", err.Error())
	}

	c.Start()


}