yq.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. package yq
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "encoding/json"
  6. "fmt"
  7. "io/ioutil"
  8. "net/http"
  9. "strings"
  10. "time"
  11. "tmr-watch/conf/setting"
  12. "tmr-watch/http/handle/restful"
  13. "tmr-watch/pkg/logging"
  14. "github.com/astaxie/beego/logs"
  15. "github.com/robfig/cron"
  16. "github.com/xormplus/xorm"
  17. )
  18. type udPastureInfo struct {
  19. Token string `xorm:"token"`
  20. Pastureid string `xorm:"pastureid"`
  21. Werks string `xorm:"werks"`
  22. }
  23. func YqCron() {
  24. tx := restful.Engine.NewSession()
  25. defer tx.Close()
  26. pastureinfo := new(udPastureInfo)
  27. err := tx.SQL(`select column_default as pastureid,(select werks from pasture where pastureid = column_default) werks from information_schema.COLUMNS
  28. WHERE table_name = 'recweight' AND table_schema = ? AND column_name = 'pastureid'`, setting.DatabaseSetting.Name).GetFirst(pastureinfo).Error
  29. if err != nil {
  30. logs.Error(err)
  31. return
  32. }
  33. // token := getToken()
  34. c := cron.New()
  35. c.AddFunc("0 0 1 * * *", func() {
  36. token := getToken()
  37. now := time.Now().Format("2006-01-02")
  38. YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  39. YcFeedPush(pastureinfo.Pastureid, pastureinfo.Werks, token)
  40. YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  41. YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  42. YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  43. YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  44. })
  45. c.AddFunc("0 0 6 * * *", func() {
  46. token := getToken()
  47. now := time.Now().Format("2006-01-02")
  48. YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  49. YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  50. YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  51. })
  52. c.AddFunc("0 0 7 * * *", func() {
  53. token := getToken()
  54. now := time.Now().Format("2006-01-02")
  55. YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  56. YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  57. })
  58. c.AddFunc("0 0 12 * * *", func() {
  59. token := getToken()
  60. now := time.Now().Format("2006-01-02")
  61. YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  62. YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  63. YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  64. })
  65. c.AddFunc("0 0 18 * * *", func() {
  66. token := getToken()
  67. now := time.Now().Format("2006-01-02")
  68. YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  69. YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  70. YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  71. })
  72. c.AddFunc("0 0 23 * * *", func() {
  73. token := getToken()
  74. now := time.Now().Format("2006-01-02")
  75. YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  76. YcFeedPush(pastureinfo.Pastureid, pastureinfo.Werks, token)
  77. YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  78. YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  79. YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  80. YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  81. })
  82. duetimecst2, _ := time.ParseInLocation("15:04:05", "00:05:00", time.Local)
  83. duetimecst3, _ := time.ParseInLocation("15:04:05", "00:00:00", time.Local)
  84. spec := fmt.Sprintf("@every %v", duetimecst2.Sub(duetimecst3))
  85. c.AddFunc(spec, func() {
  86. token := getToken()
  87. now := time.Now().Format("2006-01-02")
  88. YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  89. YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, now, token)
  90. })
  91. c.Start()
  92. // YcFeedtempletPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
  93. // fmt.Println(getToken())
  94. // YcFeedPush(pastureinfo.Pastureid, pastureinfo.Werks, token)
  95. // YcPlanPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
  96. // YcUtirPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
  97. // YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
  98. // YcBarFeedRemainPush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
  99. // YcMaterialIssuePush(pastureinfo.Pastureid, pastureinfo.Werks, "", token)
  100. }
  101. func createApiSign(appId, timeStamp, apiKey, secretKey string) string {
  102. return getMD5Encode(fmt.Sprintf("%s#%s#%s#%s", appId, timeStamp, apiKey, secretKey))
  103. }
  104. func getMD5Encode(data string) string {
  105. fmt.Println(data)
  106. hasher := md5.New()
  107. hasher.Write([]byte(data))
  108. digest := hasher.Sum(nil)
  109. md5HashString := hex.EncodeToString(digest)
  110. return md5HashString
  111. }
  112. func getToken() string {
  113. appId := "6Zub5bed5Yqo55uS"
  114. apiKey := "3c6bbff8cf1e496eb8eb9025cd8537fh"
  115. secretKey := "26b5d9f63b6142de8f102afb1aa2eb7g"
  116. req, err := http.NewRequest("POST", "https://test.vmuyun.com/base-server/outSide/token", nil)
  117. if err != nil {
  118. logs.Error(err)
  119. }
  120. now := time.Now()
  121. nanos := now.UnixNano()
  122. timeStamp := fmt.Sprintf("%d", nanos/int64(time.Millisecond))
  123. apiSign := createApiSign(appId, timeStamp, apiKey, secretKey)
  124. req.Header.Set("appId", appId)
  125. req.Header.Set("apiKey", apiKey)
  126. req.Header.Set("secretKey", secretKey)
  127. req.Header.Set("timeStamp", timeStamp)
  128. req.Header.Set("apiSign", apiSign)
  129. client := &http.Client{}
  130. resp, err := client.Do(req)
  131. if err != nil {
  132. logs.Error(err)
  133. return ""
  134. }
  135. defer resp.Body.Close()
  136. body, _ := ioutil.ReadAll(resp.Body)
  137. data := make(map[string]string, 0)
  138. json.Unmarshal(body, &data)
  139. fmt.Println(string(body))
  140. if _, ok := data["data"]; ok {
  141. return data["data"]
  142. }
  143. return ""
  144. }
  145. func postPush(data string, msgtype int, tx *xorm.Session, pastureId, token string) {
  146. // jsonStr, _ := json.Marshal(data)
  147. url := "https://test.vmuyun.com/project-server/openApi/feeding/pushData"
  148. req, err := http.NewRequest("POST", url, strings.NewReader((data)))
  149. if err != nil {
  150. logs.Error(err)
  151. // return nil
  152. }
  153. // req.Header.Set("Content-Type", "application/json")
  154. // req.Header.Set("Content-Length", "13444")
  155. req.Header.Add("Authorization", token)
  156. // req.Header.Set("Host", "test.vmuyun.com")
  157. // req.Header.Set("Accept", "*/*")
  158. // req.Header.Set("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
  159. // req.Header.Add("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
  160. req.Header.Add("Content-Type", "application/json")
  161. // req.Header.Add("Accept", "*/*")
  162. // req.Header.Add("Host", "test.vmuyun.com")
  163. // req.Header.Add("Connection", "keep-alive")
  164. client := &http.Client{}
  165. resp, err := client.Do(req)
  166. if err != nil {
  167. logs.Error(err)
  168. return
  169. }
  170. defer resp.Body.Close()
  171. body, _ := ioutil.ReadAll(resp.Body)
  172. fmt.Println(string(body))
  173. if strings.Index(resp.Status, "200") > -1 {
  174. bodyData := make(map[string]string)
  175. json.Unmarshal(body, &bodyData)
  176. if _, ok := bodyData["data"]; ok {
  177. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  178. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, bodyData["data"], "", "", msgtype, url)
  179. } else {
  180. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  181. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
  182. }
  183. } else {
  184. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  185. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
  186. }
  187. }
  188. func YcFeedtempletPush(pastureId, farmId, date, token string) error {
  189. tx := restful.Engine.NewSession()
  190. defer tx.Close()
  191. var now string
  192. if date != "" {
  193. now = date
  194. } else {
  195. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  196. }
  197. dataList, err := tx.SQL(`SELECT
  198. ft.tcode AS recipeId,
  199. ft.TNAME AS recipeName,
  200. f.feedcode AS ingId,
  201. ifnull(f.udname,f.fname) AS ingName,
  202. round( f.dry * ftd.FWEIGHT, 2 ) AS dmQty,
  203. ftd.FWEIGHT AS afQty,
  204. ftd.SORT AS mixNo,
  205. round( f.Uprice * ftd.FWEIGHT, 2 ) AS recipeCost,
  206. fc.fcname AS ingType,
  207. f.AllowRatio AS allowableError ,fc.fcname ingType
  208. FROM
  209. feedtempletdate ft
  210. JOIN ftdetaildate ftd ON ft.id = ftd.FTID and ft.date = ftd.date
  211. JOIN feed f ON ftd.FID = f.id
  212. JOIN feedclass fc ON f.fclassid = fc.id
  213. WHERE
  214. ft.ENABLE = 1
  215. AND ft.isDelete != 1 and ft.date = ? `, now).Query().List()
  216. if err != nil {
  217. logging.Error(err)
  218. return err
  219. }
  220. dataByte, _ := json.Marshal(&dataList)
  221. reqJson := `{
  222. "reqMethod": "PARTY",
  223. "param": {
  224. "code": "1",
  225. "method": "getfeedtempletinfo",
  226. "resultData": %s,
  227. "farmId": "%s",
  228. "rowCount": %d,
  229. "errMessage": ""
  230. },
  231. "regCode": "cpt180511",
  232. "command": "3d6e4752",
  233. "apiId": "getCptData"
  234. }`
  235. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  236. fmt.Println(reqJson)
  237. postPush(reqJson, 4, tx, pastureId, token)
  238. return nil
  239. }
  240. func YcFeedPush(pastureId, farmId, token string) error {
  241. tx := restful.Engine.NewSession()
  242. defer tx.Close()
  243. dataList, err := tx.SQL(`SELECT
  244. dry dmQty,
  245. sort,
  246. feedcode ingId,
  247. fname ingName,
  248. fclass ingType,
  249. allowratio allowableError
  250. FROM
  251. feed
  252. WHERE
  253. pastureId = ? `, pastureId).Query().List()
  254. if err != nil {
  255. logging.Error(err)
  256. return err
  257. }
  258. dataByte, _ := json.Marshal(&dataList)
  259. reqJson := `{
  260. "apiId": "getKPTData ",
  261. "param": {
  262. "farmId": "%s",
  263. "method":"getfeedinfo",
  264. "rowCount": %d,
  265. "resultData":%s
  266. }
  267. }`
  268. reqJson = fmt.Sprintf(reqJson, farmId, len(dataList), string(dataByte))
  269. fmt.Println(reqJson)
  270. postPush(reqJson, 2, tx, pastureId, token)
  271. return nil
  272. }
  273. func YcPlanPush(pastureId, farmId, date, token string) error {
  274. tx := restful.Engine.NewSession()
  275. defer tx.Close()
  276. dataList, err := tx.SQL(`SELECT
  277. projname planName,
  278. datacaptureno tmrNo,
  279. times loadShift,
  280. tempid recipeId,
  281. templetname recipeName,
  282. lweight expWeight,
  283. tmrtname tmrName,
  284. '是' STATUS,
  285. feedpcount cowCount,
  286. id planId,
  287. DATE_FORMAT( mydate, '%H:%i:%s' ) planTime,
  288. DATE_FORMAT( mydate, '%Y-%m-%d' ) planDate,
  289. IF( iscompleted = 1, '是', '否' ) isCompleted,
  290. IF(dlp.driverId != 0,(
  291. SELECT
  292. drivername
  293. FROM
  294. driver
  295. WHERE
  296. id = dlp.driverId
  297. ),(
  298. SELECT
  299. dr.driver
  300. FROM
  301. dutyrecord dr
  302. WHERE
  303. dr.pastureid = dlp.pastureid
  304. AND dr.eqid = dlp.tmrid
  305. AND dr.times = dlp.times
  306. AND dr.operatetime <= dlp.mydate
  307. ORDER BY
  308. dr.operatetime DESC
  309. LIMIT 1
  310. )) driverName
  311. FROM
  312. downloadedplan dlp
  313. WHERE
  314. havebutton = 1
  315. AND mydate = ? `, date).Query().List()
  316. if err != nil {
  317. logging.Error(err)
  318. return err
  319. }
  320. dataByte, _ := json.Marshal(&dataList)
  321. reqJson := `{
  322. "apiId": "getKPTData ",
  323. "param": {
  324. "farmId": "%s",
  325. "method":"getplaninfo",
  326. "rowCount": %d,
  327. "resultData":%s
  328. }
  329. }`
  330. reqJson = fmt.Sprintf(reqJson, farmId, len(dataList), string(dataByte))
  331. fmt.Println(reqJson)
  332. postPush(reqJson, 2, tx, pastureId, token)
  333. return nil
  334. }
  335. //搅拌
  336. func YcUtirPush(pastureId, farmId, date, token string) error {
  337. tx := restful.Engine.NewSession()
  338. defer tx.Close()
  339. var now string
  340. if date != "" {
  341. now = date
  342. } else {
  343. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  344. }
  345. 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,
  346. ifnull(ifnull(fc.fcname,(select fcname from feedclass fc1 join feed f1 on f1.fclassid = fc1.id where f1.id =ftd.fid )),'饲料') ingType,
  347. 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,
  348. 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,
  349. DATE_FORMAT(IFNULL((SELECT MAX(intime) FROM downloadplandtl1 d2
  350. WHERE d1.pid=d2.pid AND d1.pastureid = d2.pastureid AND d2.intime<d1.intime)
  351. , (SELECT MAX(intime) FROM downloadedplan d2
  352. WHERE d1.date=d2.mydate AND d1.pastureid = d2.pastureid AND d2.id=d1.pid)
  353. ), '%Y-%m-%d %H:%i:%s')
  354. startTime ,
  355. date_format(d1.intime,'%Y-%m-%d %H:%i:%s') endTime, driver.drivername tmrName ,d1.feedallowratio allowable_error
  356. from downloadplandtl1 d1 join downloadedplan d on d.id = d1.pid
  357. left join feedtempletdate ft on ft.id = d.tempid and ft.date = d1.date
  358. left join feed f on f.feedcode = d1.feedcode
  359. left join feedclass fc on fc.id = f.fclassid
  360. left join ftdetaildate ftd on ftd.date = d1.date and ftd.ftid = d1.fid
  361. join tmr t on t.id = d.tmrid
  362. left join driver on driver.drivercode = t.eqcode
  363. where d1.date = ? and d.havebutton = 1 and d1.type = 0 `, now).Query().List()
  364. if err != nil {
  365. logging.Error(err)
  366. return err
  367. }
  368. dataByte, _ := json.Marshal(&dataList)
  369. reqJson := `{
  370. "reqMethod": "PARTY",
  371. "param": {
  372. "code": "1",
  373. "method": "uploadadddata",
  374. "resultData": %s,
  375. "farmId": "%s",
  376. "rowCount": %d,
  377. "errMessage": ""
  378. },
  379. "regCode": "cpt180511",
  380. "command": "3d6e4752",
  381. "apiId": "getCptData"
  382. }`
  383. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  384. postPush(reqJson, 0, tx, pastureId, token)
  385. fmt.Println(reqJson)
  386. return nil
  387. }
  388. func YcBarFeedRemainPush(pastureId, farmId, date, token string) error {
  389. tx := restful.Engine.NewSession()
  390. defer tx.Close()
  391. var now string
  392. if date != "" {
  393. now = date
  394. } else {
  395. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  396. }
  397. dataList, err := tx.SQL(`SELECT
  398. date_format( remaindate, '%Y-%m-%d' ) overplusDate,
  399. ifnull(b.bcode,b.id) AS penId,
  400. b.BNAME AS penName,
  401. br.Remain AS actualWeight
  402. FROM
  403. barfeedremain br
  404. LEFT JOIN feedp fp ON br.barid = fp.id
  405. left join bar b on b.id = fp.barid
  406. WHERE
  407. date_format( remaindate, '%Y-%m-%d' ) =? `, now).Query().List()
  408. if err != nil {
  409. logging.Error(err)
  410. return err
  411. }
  412. dataByte, _ := json.Marshal(&dataList)
  413. reqJson := `{
  414. "reqMethod": "PARTY",
  415. "param": {
  416. "code": "1",
  417. "method": "uploadoverplusdata",
  418. "resultData": %s,
  419. "farmId":"%s",
  420. "rowCount": %d,
  421. "errMessage": ""
  422. },
  423. "regCode": "cpt180511",
  424. "command": "3d6e4752",
  425. "apiId": "getCptData"
  426. }`
  427. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  428. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  429. fmt.Println(reqJson)
  430. postPush(reqJson, 1, tx, pastureId, token)
  431. return nil
  432. }
  433. func YcMaterialIssuePush(pastureId, farmId, date, token string) error {
  434. tx := restful.Engine.NewSession()
  435. defer tx.Close()
  436. var now string
  437. if date != "" {
  438. now = date
  439. } else {
  440. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  441. }
  442. dataList, err := tx.SQL(`SELECT
  443. DATE_FORMAT(d.mydate,'%Y-%m-%d') dropDate,
  444. d.datacaptureno tmrNo,
  445. d.times dropShift,
  446. b.bcode penId,
  447. b.bname penName,
  448. fp.ccount cowCount,
  449. d2.sort feedingNo,
  450. d2.lweight expWeight,
  451. d2.actualweight actualWeight,
  452. 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,
  453. DATE_FORMAT(d2.intime,'%Y-%m-%d %H:%i:%s') endTime,
  454. d.tmrtname tmrName, driver.drivername driverName,d.id planId,1 calculation,
  455. ifnull((select weight from fpdetaildate where date = d2.date and barid = d2.fbarid and times = 1 ) ,0) shift1,
  456. ifnull( (select weight from fpdetaildate where date = d2.date and barid = d2.fbarid and times = 2 ) ,0) shift2,
  457. ifnull( (select weight from fpdetaildate where date = d2.date and barid = d2.fbarid and times = 3 ) ,0) shift3,
  458. ifnull( (select weight from fpdetaildate where date = d2.date and barid = d2.fbarid and times = 4 ) ,0) shift4,
  459. ifnull( (select weight from fpdetaildate where date = d2.date and barid = d2.fbarid and times = 5 ) ,0) shift5,
  460. ifnull( (select weight from fpdetaildate where date = d2.date and barid = d2.fbarid and times = 6 ),0) shift6,
  461. d.tempid recipeId,d.templetname recipeName, d.completedtime isCompleted
  462. FROM
  463. downloadedplan d
  464. JOIN downloadplandtl2 d2 ON d.id = d2.pid
  465. JOIN bar b ON d2.fbarid = b.id
  466. join feedp fp on fp.barid = b.id
  467. join tmr t on t.id = d.tmrid
  468. left join driver on driver.drivercode = t.eqcode where d.mydate = ? and d.havebutton = 1
  469. `, now).Query().List()
  470. if err != nil {
  471. logging.Error(err)
  472. return err
  473. }
  474. dataByte, _ := json.Marshal(&dataList)
  475. reqJson := `{
  476. "reqMethod": "PARTY",
  477. "param": {
  478. "code": "1",
  479. "method": "uploaddiliverdata",
  480. "resultData": %s,
  481. "farmId": "%s",
  482. "rowCount": %d,
  483. "errMessage": ""
  484. },
  485. "regCode": "cpt180511",
  486. "command": "3d6e4752",
  487. "apiId": "getCptData"
  488. }`
  489. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  490. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  491. postPush(reqJson, 0, tx, pastureId, token)
  492. fmt.Println(reqJson)
  493. return nil
  494. }