baishaojie před 9 měsíci
rodič
revize
9584dd2b10
1 změnil soubory, kde provedl 553 přidání a 0 odebrání
  1. 553 0
      http/handle/yq/yq.go

+ 553 - 0
http/handle/yq/yq.go

@@ -0,0 +1,553 @@
+package yq
+
+import (
+	"crypto/md5"
+	"encoding/hex"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"strings"
+	"time"
+	"tmr-watch/conf/setting"
+	"tmr-watch/http/handle/restful"
+	"tmr-watch/pkg/logging"
+
+	"github.com/astaxie/beego/logs"
+	"github.com/robfig/cron"
+	"github.com/xormplus/xorm"
+)
+
+type udPastureInfo struct {
+	Token     string `xorm:"token"`
+	Pastureid string `xorm:"pastureid"`
+	Werks     string `xorm:"werks"`
+}
+
+func YqCron() {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	pastureinfo := new(udPastureInfo)
+	err := tx.SQL(`select column_default  as pastureid,(select werks from pasture where pastureid = column_default)  werks  from    information_schema.COLUMNS
+	WHERE table_name = 'recweight' AND table_schema = ? AND column_name = 'pastureid'`, setting.DatabaseSetting.Name).GetFirst(pastureinfo).Error
+	if err != nil {
+		logs.Error(err)
+		return
+	}
+
+	// token := getToken()
+	c := cron.New()
+	c.AddFunc("0 0 1 * * *", func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcFeedPush(pastureinfo.Pastureid, pastureinfo.Werks, token)
+		YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	c.AddFunc("0 0 6 * * *", func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	c.AddFunc("0 0 7 * * *", func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	c.AddFunc("0 0 12 * * *", func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	c.AddFunc("0 0 18 * * *", func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	c.AddFunc("0 0 23 * * *", func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcFeedPush(pastureinfo.Pastureid, pastureinfo.Werks, token)
+		YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	duetimecst2, _ := time.ParseInLocation("15:04:05", "00:05:00", time.Local)
+	duetimecst3, _ := time.ParseInLocation("15:04:05", "00:00:00", time.Local)
+	spec := fmt.Sprintf("@every %v", duetimecst2.Sub(duetimecst3))
+	c.AddFunc(spec, func() {
+		token := getToken()
+		now := time.Now().Format("2006-01-02")
+		YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+		YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
+	})
+
+	c.Start()
+
+	// YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
+	// fmt.Println(getToken())
+
+	// YcFeedPush(pastureinfo.Pastureid, pastureinfo.Werks, token)
+	// YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
+	// YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
+	// YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
+	// YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
+	// YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
+}
+
+func createApiSign(appId, timeStamp, apiKey, secretKey string) string {
+	return getMD5Encode(fmt.Sprintf("%s#%s#%s#%s", appId, timeStamp, apiKey, secretKey))
+}
+
+func getMD5Encode(data string) string {
+	fmt.Println(data)
+	hasher := md5.New()
+	hasher.Write([]byte(data))
+	digest := hasher.Sum(nil)
+	md5HashString := hex.EncodeToString(digest)
+	return md5HashString
+}
+
+func getToken() string {
+	appId := "6Zub5bed5Yqo55uS"
+	apiKey := "3c6bbff8cf1e496eb8eb9025cd8537fh"
+	secretKey := "26b5d9f63b6142de8f102afb1aa2eb7g"
+
+	req, err := http.NewRequest("POST", "https://test.vmuyun.com/base-server/outSide/token", nil)
+	if err != nil {
+		logs.Error(err)
+	}
+
+	now := time.Now()
+	nanos := now.UnixNano()
+	timeStamp := fmt.Sprintf("%d", nanos/int64(time.Millisecond))
+	apiSign := createApiSign(appId, timeStamp, apiKey, secretKey)
+	req.Header.Set("appId", appId)
+	req.Header.Set("apiKey", apiKey)
+	req.Header.Set("secretKey", secretKey)
+	req.Header.Set("timeStamp", timeStamp)
+	req.Header.Set("apiSign", apiSign)
+
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		logs.Error(err)
+		return ""
+	}
+	defer resp.Body.Close()
+
+	body, _ := ioutil.ReadAll(resp.Body)
+	data := make(map[string]string, 0)
+	json.Unmarshal(body, &data)
+	fmt.Println(string(body))
+
+	if _, ok := data["data"]; ok {
+		return data["data"]
+	}
+	return ""
+}
+
+func postPush(data string, msgtype int, tx *xorm.Session, pastureId, token string) {
+
+	// jsonStr, _ := json.Marshal(data)
+	url := "https://test.vmuyun.com/project-server/openApi/feeding/pushData"
+	req, err := http.NewRequest("POST", url, strings.NewReader((data)))
+	if err != nil {
+		logs.Error(err)
+		// return nil
+	}
+
+	// req.Header.Set("Content-Type", "application/json")
+	// req.Header.Set("Content-Length", "13444")
+	req.Header.Add("Authorization", token)
+	// req.Header.Set("Host", "test.vmuyun.com")
+	// req.Header.Set("Accept", "*/*")
+	// req.Header.Set("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
+	// req.Header.Add("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
+	req.Header.Add("Content-Type", "application/json")
+	// req.Header.Add("Accept", "*/*")
+	// req.Header.Add("Host", "test.vmuyun.com")
+	// req.Header.Add("Connection", "keep-alive")
+
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		logs.Error(err)
+		return
+	}
+	defer resp.Body.Close()
+
+	body, _ := ioutil.ReadAll(resp.Body)
+	fmt.Println(string(body))
+
+	if strings.Index(resp.Status, "200") > -1 {
+		bodyData := make(map[string]string)
+		json.Unmarshal(body, &bodyData)
+		if _, ok := bodyData["data"]; ok {
+			tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
+			values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, bodyData["data"], "", "", msgtype, url)
+		} else {
+			tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
+			values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
+		}
+	} else {
+		tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
+		values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
+	}
+
+}
+
+func YcFeedtempletPush(pastureId, farmId, date, token string) error {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	var now string
+	if date != "" {
+		now = date
+	} else {
+		now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
+	}
+
+	dataList, err := tx.SQL(`SELECT
+	ft.tcode AS recipeId,
+	ft.TNAME AS recipeName,
+	f.feedcode   AS ingId,
+	ifnull(f.udname,f.fname) AS ingName,
+	round( f.dry * ftd.FWEIGHT, 2 ) AS dmQty,
+	ftd.FWEIGHT AS afQty,
+	ftd.SORT AS mixNo,
+	round( f.Uprice * ftd.FWEIGHT, 2 ) AS recipeCost,
+	fc.fcname AS ingType,
+	f.AllowRatio AS allowableError ,fc.fcname ingType
+FROM
+	feedtempletdate ft 
+	 JOIN ftdetaildate ftd ON ft.id = ftd.FTID  and ft.date = ftd.date
+	 JOIN feed f ON ftd.FID = f.id
+	 JOIN feedclass fc ON f.fclassid = fc.id 
+WHERE
+	ft.ENABLE = 1 
+	AND ft.isDelete != 1  and ft.date = ?  `, now).Query().List()
+	if err != nil {
+		logging.Error(err)
+		return err
+	}
+
+	dataByte, _ := json.Marshal(&dataList)
+
+	reqJson := `{
+    "reqMethod": "PARTY",
+    "param": {
+        "code": "1",
+        "method": "getfeedtempletinfo",
+        "resultData": %s,
+        "farmId": "%s",
+        "rowCount": %d,
+        "errMessage": ""
+    },
+    "regCode": "cpt180511",
+    "command": "3d6e4752",
+    "apiId": "getCptData"
+}`
+	reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
+	fmt.Println(reqJson)
+	postPush(reqJson, 4, tx, pastureId, token)
+	return nil
+}
+
+func YcFeedPush(pastureId, farmId, token string) error {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	dataList, err := tx.SQL(`SELECT
+	dry dmQty,
+	sort,
+	feedcode ingId,
+	fname ingName,
+	fclass ingType,
+	allowratio allowableError 
+FROM
+	feed 
+WHERE
+	pastureId = ?  `, pastureId).Query().List()
+	if err != nil {
+		logging.Error(err)
+		return err
+	}
+
+	dataByte, _ := json.Marshal(&dataList)
+	reqJson := `{
+		"apiId": "getKPTData ", 
+		"param": {
+			"farmId": "%s",
+				"method":"getfeedinfo",
+				"rowCount": %d,
+				"resultData":%s
+		}
+	}`
+
+	reqJson = fmt.Sprintf(reqJson, farmId, len(dataList), string(dataByte))
+	fmt.Println(reqJson)
+	postPush(reqJson, 2, tx, pastureId, token)
+	return nil
+}
+
+func YcPlanPush(pastureId, farmId, date, token string) error {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	dataList, err := tx.SQL(`SELECT
+	projname planName,
+	datacaptureno tmrNo,
+	times loadShift,
+	tempid recipeId,
+	templetname recipeName,
+	lweight expWeight,
+	tmrtname tmrName,
+	'是' STATUS,
+	feedpcount cowCount,
+	id planId,
+	DATE_FORMAT( mydate, '%H:%i:%s' ) planTime,
+	DATE_FORMAT( mydate, '%Y-%m-%d' ) planDate,
+IF( iscompleted = 1, '是', '否' ) isCompleted,
+IF(dlp.driverId != 0,(
+		SELECT
+			drivername 
+		FROM
+			driver 
+		WHERE
+			id = dlp.driverId 
+			),(
+		SELECT
+			dr.driver 
+		FROM
+			dutyrecord dr 
+		WHERE
+			dr.pastureid = dlp.pastureid 
+			AND dr.eqid = dlp.tmrid 
+			AND dr.times = dlp.times 
+			AND dr.operatetime <= dlp.mydate 
+		ORDER BY
+			dr.operatetime DESC 
+			LIMIT 1 
+		)) driverName 
+FROM
+	downloadedplan dlp 
+WHERE
+	havebutton = 1 
+	AND mydate = ?  `, date).Query().List()
+	if err != nil {
+		logging.Error(err)
+		return err
+	}
+
+	dataByte, _ := json.Marshal(&dataList)
+	reqJson := `{
+		"apiId": "getKPTData ", 
+		"param": {
+			"farmId": "%s",
+				"method":"getplaninfo",
+				"rowCount": %d,
+				"resultData":%s
+		}
+	}`
+
+	reqJson = fmt.Sprintf(reqJson, farmId, len(dataList), string(dataByte))
+	fmt.Println(reqJson)
+	postPush(reqJson, 2, tx, pastureId, token)
+	return nil
+}
+
+//搅拌
+func YcUtirPush(pastureId, farmId, date, token string) error {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+	var now string
+	if date != "" {
+		now = date
+	} else {
+		now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
+	}
+
+	dataList, err := tx.SQL(`select date_format(d1.date,'%Y-%m-%d')  dropDate,d.times loadShift,d.datacaptureno  tmrNo,ft.tcode recipeId,ft.ccname recipeName,if(d1.feedcode = -1 ,d1.fid,f.feedcode) ingId,ifnull(f.fname,ftd.fname)  ingName,
+	ifnull(ifnull(fc.fcname,(select fcname from feedclass fc1 join feed f1 on f1.fclassid = fc1.id where f1.id =ftd.fid )),'饲料') ingType,
+	ifnull(f.dry * d1.actualweightminus,0)  dmPct,d1.sort mixNo,ifnull(d1.feedallowratio,0) allowableError , if(f.fname is not null, ifnull(d1.lweight,''),	ifnull(ftd.fweight / (select sum(fweight)  from ftdetaildate  where  date =  d1.date and ftid = d1.fid ) *  d1.lweight,"") )  expWeight,
+	
+	if(f.fname is not null, ifnull(d1.actualweightminus,''),	ifnull(ftd.fweight / (select sum(fweight)  from ftdetaildate  where  date =  d1.date and ftid = d1.fid ) *  d1.actualweightminus,"") ) actualWeight,
+	DATE_FORMAT(IFNULL((SELECT MAX(intime) FROM downloadplandtl1 d2 
+WHERE  d1.pid=d2.pid AND d1.pastureid = d2.pastureid AND d2.intime<d1.intime)
+, (SELECT MAX(intime) FROM downloadedplan d2 
+WHERE  d1.date=d2.mydate AND d1.pastureid = d2.pastureid AND d2.id=d1.pid)
+), '%Y-%m-%d %H:%i:%s') 
+   startTime  ,
+	 date_format(d1.intime,'%Y-%m-%d %H:%i:%s')   endTime, driver.drivername tmrName ,d1.feedallowratio allowable_error
+	from downloadplandtl1  d1 join  downloadedplan d on d.id = d1.pid
+	left join feedtempletdate ft  on ft.id = d.tempid  and ft.date = d1.date
+	left join feed f on f.feedcode  = d1.feedcode
+	left join feedclass fc on fc.id = f.fclassid
+	left join ftdetaildate  ftd  on  ftd.date =  d1.date and ftd.ftid = d1.fid
+	join tmr t on t.id = d.tmrid 
+	left join  driver on driver.drivercode = t.eqcode
+	where d1.date = ? and d.havebutton = 1 and d1.type = 0 `, now).Query().List()
+	if err != nil {
+		logging.Error(err)
+		return err
+	}
+
+	dataByte, _ := json.Marshal(&dataList)
+
+	reqJson := `{
+    "reqMethod": "PARTY",
+    "param": {
+        "code": "1",
+        "method": "uploadadddata",
+        "resultData": %s,
+        "farmId": "%s",
+        "rowCount": %d,
+        "errMessage": ""
+    },
+    "regCode": "cpt180511",
+    "command": "3d6e4752",
+    "apiId": "getCptData"
+}`
+
+	reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
+	postPush(reqJson, 0, tx, pastureId, token)
+	fmt.Println(reqJson)
+	return nil
+}
+
+func YcBarFeedRemainPush(pastureId, farmId, date, token string) error {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	var now string
+	if date != "" {
+		now = date
+	} else {
+		now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
+	}
+
+	dataList, err := tx.SQL(`SELECT
+	date_format( remaindate, '%Y-%m-%d' ) overplusDate,
+	ifnull(b.bcode,b.id) AS penId,
+	b.BNAME AS penName,
+	br.Remain AS actualWeight
+FROM
+	barfeedremain br
+	LEFT JOIN feedp fp ON br.barid = fp.id
+	left join bar b on b.id = fp.barid
+WHERE
+	date_format( remaindate, '%Y-%m-%d' ) =?  `, now).Query().List()
+	if err != nil {
+		logging.Error(err)
+		return err
+	}
+
+	dataByte, _ := json.Marshal(&dataList)
+
+	reqJson := `{
+    "reqMethod": "PARTY",
+    "param": {
+        "code": "1",
+        "method": "uploadoverplusdata",
+        "resultData": %s,
+        "farmId":"%s",
+        "rowCount": %d,
+        "errMessage": ""
+    },
+    "regCode": "cpt180511",
+    "command": "3d6e4752",
+    "apiId": "getCptData"
+}`
+	reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
+	//  '0饲喂  1剩料  2原料  3栏舍  4配方 5栏舍牛头数 6库存',
+	fmt.Println(reqJson)
+	postPush(reqJson, 1, tx, pastureId, token)
+	return nil
+}
+
+func YcMaterialIssuePush(pastureId, farmId, date, token string) error {
+	tx := restful.Engine.NewSession()
+	defer tx.Close()
+
+	var now string
+	if date != "" {
+		now = date
+	} else {
+		now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
+	}
+
+	dataList, err := tx.SQL(`SELECT 
+	DATE_FORMAT(d.mydate,'%Y-%m-%d')  dropDate,
+	d.datacaptureno tmrNo,
+	d.times dropShift,
+	b.bcode penId,
+	b.bname penName,
+	fp.ccount  cowCount,
+	d2.sort feedingNo,
+	d2.lweight expWeight,
+	d2.actualweight actualWeight,
+	if((select count(1)  from downloadplandtl2 where pid = d.id and sort < d2.sort ) = 0 ,(select  DATE_FORMAT(intime,'%Y-%m-%d %H:%i:%s')  from downloadplandtl1 where pid = d.id  order by sort desc limit 1 ),(select  DATE_FORMAT(intime,'%Y-%m-%d %H:%i:%s')  from downloadplandtl2 where pid = d.id and sort < d2.sort  order by sort desc limit 1)) startTime,
+	 DATE_FORMAT(d2.intime,'%Y-%m-%d %H:%i:%s')  endTime,
+	 d.tmrtname tmrName, driver.drivername  driverName,d.id planId,1 calculation,
+	 ifnull((select weight  from fpdetaildate where date = d2.date and barid = d2.fbarid  and times = 1 ) ,0) shift1,
+	  ifnull( (select weight  from fpdetaildate where date = d2.date and barid = d2.fbarid  and times = 2 ) ,0) shift2,
+	  ifnull( (select weight  from fpdetaildate where date = d2.date and barid = d2.fbarid  and times = 3 ) ,0) shift3,
+		 ifnull( (select weight  from fpdetaildate where date = d2.date and barid = d2.fbarid  and times = 4 ) ,0) shift4,
+		  ifnull( (select weight  from fpdetaildate where date = d2.date and barid = d2.fbarid  and times = 5 ) ,0) shift5,
+		ifnull( (select weight  from fpdetaildate where date = d2.date and barid = d2.fbarid  and times = 6 ),0)  shift6,
+		d.tempid  recipeId,d.templetname recipeName,   d.completedtime  isCompleted
+	FROM
+		downloadedplan d
+		JOIN downloadplandtl2 d2 ON d.id = d2.pid
+		JOIN bar b ON d2.fbarid = b.id
+		join feedp fp on fp.barid = b.id 
+			join tmr t on t.id = d.tmrid 
+		left join driver on driver.drivercode = t.eqcode where d.mydate = ? and d.havebutton = 1
+	 `, now).Query().List()
+	if err != nil {
+		logging.Error(err)
+		return err
+	}
+
+	dataByte, _ := json.Marshal(&dataList)
+
+	reqJson := `{
+    "reqMethod": "PARTY",
+    "param": {
+        "code": "1",
+        "method": "uploaddiliverdata",
+        "resultData": %s,
+        "farmId": "%s",
+        "rowCount": %d,
+        "errMessage": ""
+    },
+    "regCode": "cpt180511",
+    "command": "3d6e4752",
+    "apiId": "getCptData"
+}`
+	reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
+	//  '0饲喂  1剩料  2原料  3栏舍  4配方 5栏舍牛头数 6库存',
+	postPush(reqJson, 0, tx, pastureId, token)
+	fmt.Println(reqJson)
+	return nil
+}