yc.go 18 KB

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