yq.go 17 KB

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