udsync.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. package api
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "strconv"
  10. "time"
  11. "../../pkg/logging"
  12. "../../pkg/setting"
  13. "../../routers/restful"
  14. "github.com/astaxie/beego/logs"
  15. "github.com/robfig/cron"
  16. )
  17. func UDSync() {
  18. tx := restful.Engine.NewSession()
  19. defer tx.Close()
  20. pastureinfo := new(udPastureInfo)
  21. err := tx.SQL(`select token,pastureid from pasture p join ( select column_default from information_schema.COLUMNS
  22. WHERE table_name = 'recweight' AND table_schema = 'tmrwatch2' AND column_name = 'pastureid') pas
  23. where p.pastureid = pas.column_default`).GetFirst(pastureinfo).Error
  24. if err != nil {
  25. logs.Error(err)
  26. return
  27. }
  28. log.Println("Starting Cron...")
  29. // UDFeedtempletinfo(pastureinfo.Token, pastureinfo.Pastureid)
  30. // UDUploadadddata(pastureinfo.Token, pastureinfo.Pastureid)
  31. // UDUploaddiliverdata(pastureinfo.Token, pastureinfo.Pastureid)
  32. // UDUploadoverplusdata(pastureinfo.Token, pastureinfo.Pastureid)
  33. // // 同步栏舍
  34. // resFeedp := httpGet(pastureinfo.Token, "downloadpen")
  35. // syncFeedp(pastureinfo.Pastureid, resFeedp)
  36. // // 同步饲料
  37. // resFeed := httpGet(pastureinfo.Token, "downloadmaterial")
  38. // syncFeed(pastureinfo.Pastureid, resFeed)
  39. defer func() {
  40. if err := recover(); err != nil {
  41. fmt.Printf("CronTest pnic err%+v \n", err)
  42. logging.Error("panic recover err ", err)
  43. }
  44. }()
  45. log.Println("Starting Cron...")
  46. c := cron.New()
  47. _, err = c.AddFunc("30 21 * * *", func() {
  48. log.Println("UDSync", time.Now())
  49. UDFeedtempletinfo(pastureinfo.Token, pastureinfo.Pastureid)
  50. UDUploadadddata(pastureinfo.Token, pastureinfo.Pastureid)
  51. UDUploaddiliverdata(pastureinfo.Token, pastureinfo.Pastureid)
  52. UDUploadoverplusdata(pastureinfo.Token, pastureinfo.Pastureid)
  53. // // 同步栏舍
  54. // resFeedp := httpGet(pastureinfo.Token, "downloadpen")
  55. // syncFeedp(pastureinfo.Pastureid, resFeedp)
  56. // 同步饲料
  57. resFeed := httpGet(pastureinfo.Token, "downloadmaterial")
  58. syncFeed(pastureinfo.Pastureid, resFeed)
  59. })
  60. if err != nil {
  61. println("cron4 err", err.Error())
  62. }
  63. c.Start()
  64. }
  65. //同步饲料数据
  66. func syncFeed(pastureid string, feedList []interface{}) error {
  67. tx := restful.Engine.NewSession()
  68. defer tx.Close()
  69. err := tx.Begin()
  70. if err != nil {
  71. tx.Rollback()
  72. logs.Error("syncFeed-error-1:", err)
  73. return err
  74. }
  75. for _, f := range feedList {
  76. feed := f.(map[string]interface{})
  77. var feedcode, fname, fclass, fclassid, dry interface{}
  78. if _, ok := feed["feedcode"]; ok {
  79. feedcode = feed["feedcode"]
  80. }
  81. if _, ok := feed["feedname"]; ok {
  82. fname = feed["feedname"]
  83. }
  84. if _, ok := feed["feedclass"]; ok {
  85. fclass = feed["feedclass"]
  86. }
  87. if _, ok := feed["drymatter"]; ok {
  88. dry = feed["drymatter"]
  89. }
  90. fclassExist, err := tx.SQL(" select id from feedclass where pastureid = ? and fcname = ?", pastureid, fclass).Exist()
  91. if err != nil {
  92. tx.Rollback()
  93. logs.Error("syncFeed-error-2:", err)
  94. return err
  95. }
  96. if fclassExist {
  97. fclassDataList, err := tx.SQL(" select id from feedclass where pastureid = ? and fcname = ?", pastureid, fclass).QueryString()
  98. if err != nil {
  99. tx.Rollback()
  100. logs.Error("syncFeed-error-3:", err)
  101. return err
  102. }
  103. for _, fclassData := range fclassDataList {
  104. fclassid = fclassData["id"]
  105. }
  106. } else {
  107. ids, err := setting.SnowIds.NextId()
  108. if err != nil {
  109. ids = time.Now().UnixNano()
  110. logging.Info("create SnowIds err", err)
  111. }
  112. _, err = tx.SQL("insert into feedclass(id,pastureid,fccode,fcname,bigfeedclassname,bigfeedclassid,sort)VALUES(?,?,?,?,?,?,(select ifnull(max(f.sort),0) +1 from feedclass f where f.pastureid =? ))",
  113. ids, pastureid, fclass, fclass, fclass, ids, pastureid).Execute()
  114. if err != nil {
  115. tx.Rollback()
  116. logs.Error("syncFeed-error-4:", err)
  117. return err
  118. }
  119. fclassid = ids
  120. }
  121. ids, err := setting.SnowIds.NextId()
  122. if err != nil {
  123. ids = time.Now().UnixNano()
  124. logging.Info("create SnowIds err", err)
  125. }
  126. insertSql := `insert into feed(id,pastureid,feedcode,fname,fclassid,fclass,dry)VALUES(?,?,?,?,?,?,?)
  127. ON DUPLICATE KEY UPDATE fname = ? ,dry = ? `
  128. _, err = tx.SQL(insertSql, ids, pastureid, feedcode, fname, fclassid, fclass, dry, fname, dry).Execute()
  129. if err != nil {
  130. tx.Rollback()
  131. logs.Error("syncFeed-error-5:", err)
  132. return err
  133. }
  134. }
  135. err = tx.Commit()
  136. if err != nil {
  137. tx.Rollback()
  138. logs.Error("syncFeed-error-6:", err)
  139. return err
  140. }
  141. return nil
  142. }
  143. // 同步栏舍数据
  144. func syncFeedp(pastureid string, feedpList []interface{}) error {
  145. tx := restful.Engine.NewSession()
  146. defer tx.Close()
  147. err := tx.Begin()
  148. if err != nil {
  149. logs.Error("syncFeedp-error-1:", err)
  150. return err
  151. }
  152. for _, f := range feedpList {
  153. feedp := f.(map[string]interface{})
  154. var barName, barCode, feedtempletCode, barId interface{}
  155. var ftId, tname interface{}
  156. var cowCount interface{}
  157. if _, ok := feedp["barname"]; ok {
  158. barName = feedp["barname"]
  159. }
  160. if _, ok := feedp["barcode"]; ok {
  161. barCode = feedp["barcode"]
  162. }
  163. if _, ok := feedp["cowcount"]; ok {
  164. cowCount = feedp["cowcount"]
  165. }
  166. if _, ok := feedp["feedtempletcode"]; ok {
  167. feedtempletCode = feedp["feedtempletCode"]
  168. }
  169. barCount, err := tx.SQL(" select count(1) from bar where pastureid = ? and bcode = ? ", pastureid, barCode).Count()
  170. if err != nil {
  171. tx.Rollback()
  172. logs.Error("syncFeedp-error-2:", err)
  173. return err
  174. }
  175. if barCount > 0 {
  176. barDataList, err := tx.SQL(" select id from bar where pastureid = ? and bcode = ?", pastureid, barCode).QueryString()
  177. if err != nil {
  178. tx.Rollback()
  179. logs.Error("syncFeedp-error-3:", err)
  180. return err
  181. }
  182. for _, barData := range barDataList {
  183. barId = barData["id"]
  184. }
  185. } else {
  186. barReq, err := tx.SQL("insert into bar(pastureid,bname,bcode)VALUES(?,?,?)", pastureid, barName, barCode).Execute()
  187. if err != nil {
  188. tx.Rollback()
  189. logs.Error("syncFeedp-error-4:", err)
  190. return err
  191. }
  192. id, err := barReq.LastInsertId()
  193. if err != nil {
  194. tx.Rollback()
  195. logs.Error("syncFeedp-error-5:", err)
  196. return err
  197. }
  198. barId = strconv.FormatInt(id, 10)
  199. }
  200. if feedtempletCode != "" {
  201. feedtempletDataList, err := tx.SQL(" select id,tname from feedtemplet where pastureid = ? and tcode = ?", pastureid, feedtempletCode).QueryString()
  202. if err != nil {
  203. tx.Rollback()
  204. logs.Error("syncFeedp-error-6:", err)
  205. return err
  206. }
  207. for _, feedtemplet := range feedtempletDataList {
  208. ftId = feedtemplet
  209. tname = feedtemplet
  210. }
  211. }
  212. insertSql := `insert into feedp(pastureid,barname,barid,ccount,ftid,ftname)VALUES(?,?,?,?,?,?)
  213. ON DUPLICATE KEY UPDATE ccount = ? ,ftid = ? ,ftname = ? `
  214. _, err = tx.SQL(insertSql, pastureid, barName, barId, cowCount, ftId, tname, cowCount, ftId, tname).Execute()
  215. if err != nil {
  216. tx.Rollback()
  217. logs.Error("syncFeedp-error-7:", err)
  218. return err
  219. }
  220. }
  221. err = tx.Commit()
  222. if err != nil {
  223. tx.Rollback()
  224. logs.Error("syncFeedp-error-8:", err)
  225. return err
  226. }
  227. return nil
  228. }
  229. func syncFeedtemplet(pastureid string, feedtempletList []map[string]interface{}) error {
  230. tx := restful.Engine.NewSession()
  231. defer tx.Close()
  232. err := tx.Begin()
  233. if err != nil {
  234. logs.Error("syncFeedtemplet-error-1:", err)
  235. return err
  236. }
  237. // feedtempletName 配方名称 String
  238. // feedtempletCode 配方编码 String
  239. // cowClass 牲畜类别 String
  240. // creater 创建人 String
  241. //少一个配方类型
  242. for _, feedtemplet := range feedtempletList {
  243. var feedtempletName, feedtempletCode, ccid, cowClass, fttype, fttypeid string
  244. if _, ok := feedtemplet["feedtempletName"]; ok {
  245. feedtempletName = feedtemplet["feedtempletName"].(string)
  246. }
  247. if _, ok := feedtemplet["feedtempletCode"]; ok {
  248. feedtempletCode = feedtemplet["feedtempletCode"].(string)
  249. }
  250. if _, ok := feedtemplet["cowClass"]; ok {
  251. cowClass = feedtemplet["cowClass"].(string)
  252. }
  253. err = tx.SQL("select id from cowclass where classname = ? and pastureid = ? ", cowClass, pastureid).GetFirst(&ccid).Error
  254. if err != nil {
  255. tx.Rollback()
  256. logs.Error("syncFeedtemplet-error-2:", err)
  257. return err
  258. }
  259. insertSQl := `insert into feedtemplet(pastureid,tcode,tname,ccid,ccname,fttype,fttypeid,enable,sort)
  260. values(?,?,?,?,?,?,?,?,(select max(f.sort)+1 from feedtemplet f where f.pastureid = ? ))
  261. ON DUPLICATE KEY UPDATE tname = ?,ccid = ?,ccname = ?,fttype = ?,fttypeid = ?`
  262. a, err := tx.SQL(insertSQl, pastureid, feedtempletCode, feedtempletName, ccid, cowClass, fttype, fttypeid, 1, pastureid, feedtempletCode, feedtempletName, ccid, cowClass, fttype, fttypeid).Execute()
  263. if err != nil {
  264. tx.Rollback()
  265. logs.Error("syncFeedtemplet-error-3:", err)
  266. return err
  267. }
  268. ftid, err := a.LastInsertId()
  269. if err != nil {
  270. tx.Rollback()
  271. logs.Error("syncFeedtemplet-error-4:", err)
  272. return err
  273. }
  274. if _, ok := feedtemplet["feeds"]; ok {
  275. for _, feed := range feedtemplet["feeds"].([]map[string]interface{}) {
  276. var feedCode, feedid, sort, weight string
  277. if _, ok := feed["feedCode"]; ok {
  278. feedCode = feed["feedCode"].(string)
  279. }
  280. if _, ok := feed["sort"]; ok {
  281. sort = feed["sort"].(string)
  282. }
  283. if _, ok := feed["weight"]; ok {
  284. weight = feed["weight"].(string)
  285. }
  286. err = tx.SQL("select id from feed where feedcode = ? and pastureid = ? ", feedCode, pastureid).GetFirst(&feedid).Error
  287. if err != nil {
  288. tx.Rollback()
  289. logs.Error("syncFeedtemplet-error-5:", err)
  290. return err
  291. }
  292. ftdetailInsertSQl := `insert into ftdetail(pastureid,ftid,fid,fname,fweight,sort)
  293. values(?,?,?,?,?,?)
  294. ON DUPLICATE KEY UPDATE fweight = ?,sort = ?`
  295. _, err := tx.SQL(ftdetailInsertSQl, pastureid, ftid, feedtempletName, weight, sort, weight, sort).Execute()
  296. if err != nil {
  297. tx.Rollback()
  298. logs.Error("syncFeedtemplet-error-3:", err)
  299. return err
  300. }
  301. ftdetailDateInsertSQl := `insert into ftdetaildate(pastureid,ftid,fid,fname,fweight,sort,date)
  302. values(?,?,?,?,?,?,now())
  303. ON DUPLICATE KEY UPDATE fweight = ?,sort = ?`
  304. _, err = tx.SQL(ftdetailDateInsertSQl, pastureid, ftid, feedtempletName, weight, sort, weight, sort).Execute()
  305. if err != nil {
  306. tx.Rollback()
  307. logs.Error("syncFeedtemplet-error-3:", err)
  308. return err
  309. }
  310. }
  311. }
  312. }
  313. err = tx.Commit()
  314. if err != nil {
  315. tx.Rollback()
  316. logs.Error("syncBar-error-5:", err)
  317. return err
  318. }
  319. return nil
  320. }
  321. type udPastureInfo struct {
  322. Token string `xorm:"token"`
  323. Pastureid string `xorm:"pastureid"`
  324. }
  325. func httpGet(farmId, method string) []interface{} {
  326. url := fmt.Sprintf("https://wdc.unidairy.cn/copartner_downloads/?farmId=%s&method=%s", farmId, method)
  327. res, err := http.Get(url)
  328. if err != nil {
  329. return nil
  330. }
  331. robots, err := ioutil.ReadAll(res.Body)
  332. res.Body.Close()
  333. if err != nil {
  334. return nil
  335. }
  336. var data map[string][]interface{}
  337. json.Unmarshal(robots, &data)
  338. return data["msg"]
  339. }
  340. func UDFeedtempletinfo(token, pastureid string) {
  341. tx := restful.Engine.NewSession()
  342. defer tx.Close()
  343. sqlstr := `SELECT
  344. ft.ID AS recipeId,
  345. ft.TNAME AS recipeName,
  346. f.feedcode AS ingId,
  347. f.FNAME AS ingName,
  348. round( f.dry * ftd.FWEIGHT, 2 ) AS dmQty,
  349. ftd.FWEIGHT AS afQty,
  350. ftd.SORT AS mixNo,
  351. ifnull(round( f.Uprice * ftd.FWEIGHT, 2 ),"") AS recipeCost,
  352. ifnull(fc.FCNAME,"") AS ingType,
  353. f.AllowRatio AS allowableError
  354. FROM
  355. feedtemplet ft
  356. LEFT JOIN ftdetail ftd ON ft.id = ftd.FTID
  357. LEFT JOIN feed f ON ftd.FID = f.id and ft.pastureid = f.pastureid
  358. LEFT JOIN feedclass fc ON f.FCLASS = fc.id where ft.pastureid = ? `
  359. data, err := tx.SQL(sqlstr, pastureid).Query().List()
  360. if err != nil {
  361. logs.Error("syncBar-error-5:", err)
  362. return
  363. }
  364. req := make(map[string]interface{})
  365. req["farmId"] = token
  366. req["rowCount"] = len(data)
  367. req["method"] = "getfeedtempletinfo"
  368. req["resultData"] = data
  369. res := new(UDUploadoverplusdataReq)
  370. res.ApiId = "getKPTData"
  371. // res.ReqMethod = "PARTY"
  372. // res.RegCode = "cpt180511"
  373. // res.Command = "202cb962ac590"
  374. res.Param = req
  375. UDPostPush(res, "application/json")
  376. }
  377. func UDUploadadddata(token, pastureid string) {
  378. tx := restful.Engine.NewSession()
  379. defer tx.Close()
  380. sqlstr := `select date_format(d.mydate,'%Y-%m-%d') loadDate,d.SORT tmrNo,d.Times loadShift,
  381. IFNULL(ft.id,((SELECT feedtempletid FROM downloadplandtl2 d2 WHERE d2.pid=d.id LIMIT 1))) recipeId,
  382. IFNULL(d.templetName ,((SELECT feedtempletName FROM downloadplandtl2 d2 WHERE d2.pid=d.id LIMIT 1))) recipeName,
  383. ifnull(f.feedcode,"") as ingId,de.Fname as ingName,ifnull(fc.FCNAME,"") ingType,
  384. ifnull(f.dry,"") dmPct,de.SORT mixNo,de.feedallowratio allowableError, de.LWEIGHT expWeight,
  385. de.ActualWeightMinus actualWeight,ifnull(date_format(timestamp(de.InTime,CONCAT('-',de.processTime)),'%Y-%m-%d %H:%i:%s'),"") startTime,
  386. date_format(de.InTime,'%Y-%m-%d %H:%i:%s') endTime,ifnull((SELECT dr.driver FROM dutyrecord dr
  387. WHERE dr.pastureid = d.pastureid AND dr.eqid = d.tmrid AND dr.times= d.times AND dr.operatetime <=d.mydate
  388. ORDER BY dr.operatetime DESC LIMIT 1),"") tmrName ,d.tmrtname equipmentId
  389. from downloadedplan d LEFT JOIN downloadplandtl1_exec de on d.id=de.PID
  390. left join downloadplandtl1 de1 on de1.pid = d.id
  391. LEFT JOIN feed f on de1.Fid=f.id and f.pastureid = de1.pastureid LEFT JOIN feedtemplet ft on d.templetName=ft.TNAME
  392. LEFT JOIN feedclass fc on f.FCLASS=fc.id
  393. where d.mydate=date_format(NOW(),'%Y-%m-%d') and d.IsCompleted=1 and d.lpplanType=0 and d.pastureid = ?
  394. union all
  395. select date_format(d.mydate,'%Y-%m-%d') loadDate,d.SORT tmrNo,d.Times loadShift,
  396. IFNULL(ft.id,((SELECT feedtempletid FROM downloadplandtl2 d2 WHERE d2.flpid=d.id LIMIT 1))) recipeId,
  397. IFNULL(d.templetName ,((SELECT feedtempletName FROM downloadplandtl2 d2 WHERE d2.flpid=d.id LIMIT 1))) recipeName,
  398. ifnull(f.feedcode,"") as ingId,de.Fname as ingName,ifnull(fc.FCNAME,"") ingType,
  399. ifnull(f.dry,"") dmPct,de.SORT mixNo,de.feedallowratio allowableError, de.LWEIGHT expWeight,
  400. de.ActualWeightMinus actualWeight,ifnull(date_format(timestamp(de.InTime,CONCAT('-',de.processTime)),'%Y-%m-%d %H:%i:%s'),"") startTime,
  401. date_format(de.InTime,'%Y-%m-%d %H:%i:%s') endTime,ifnull((SELECT dr.driver FROM dutyrecord dr
  402. WHERE dr.pastureid = d.pastureid AND dr.eqid = d.tmrid AND dr.times= d.times AND dr.operatetime <=d.mydate
  403. ORDER BY dr.operatetime DESC LIMIT 1),"") tmrName ,d.tmrtname equipmentId
  404. from downloadedplan d LEFT JOIN downloadplandtl1_exec de on d.id=de.PID
  405. left join downloadplandtl1 de1 on de1.pid = d.id
  406. LEFT JOIN feed f on de1.Fid=f.id and f.pastureid = de1.pastureid LEFT JOIN feedtemplet ft on d.templetName=ft.TNAME
  407. LEFT JOIN feedclass fc on f.FCLASS=fc.id
  408. where d.mydate=date_format(NOW(),'%Y-%m-%d') and d.IsCompleted=1 and d.lpplanType=1 and d.pastureid = ?
  409. ORDER BY mixNo `
  410. data, err := tx.SQL(sqlstr, pastureid, pastureid).Query().List()
  411. if err != nil {
  412. logs.Error("syncBar-error-5:", err)
  413. return
  414. }
  415. req := make(map[string]interface{})
  416. req["farmId"] = token
  417. req["rowCount"] = len(data)
  418. req["method"] = "uploadadddata"
  419. req["resultData"] = data
  420. res := new(UDUploadoverplusdataReq)
  421. res.ApiId = "getKPTData"
  422. res.Param = req
  423. UDPostPush(res, "application/json")
  424. }
  425. func UDUploaddiliverdata(token, pastureid string) {
  426. tx := restful.Engine.NewSession()
  427. defer tx.Close()
  428. sqlstr := `SELECT
  429. IFNULL(ft.id,d2.feedtempletid ) recipeId,
  430. IFNULL(d.templetName,d2.feedtempletName ) recipeName,
  431. date_format(d.mydate,'%Y-%m-%d') as dropDate,ifnull((select sort from downloadedplan where pid=d.pid and lpplanType !=d.lpplanType and mydate=d.mydate),d.sort) as tmrNo,
  432. d.Times as dropShift,b.bcode as penId,d2.Fname as penName,fp.CCOUNT as cowCount, d2.SORT as feedingNo, d2.LWEIGHT as expWeight,
  433. d2.ActualWeightMinus as actualWeight, ifnull(date_format(timestamp(d2.InTime,CONCAT('-',d2.processTime)),'%Y-%m-%d %H:%i:%s'),"") as startTime,
  434. date_format(d2.InTime,'%Y-%m-%d %H:%i:%s') as endTime,ifnull((SELECT dr.driver FROM dutyrecord dr
  435. WHERE dr.pastureid = d.pastureid AND dr.eqid = d.tmrid AND dr.times= d.times AND dr.operatetime <=d.mydate
  436. ORDER BY dr.operatetime DESC LIMIT 1),"") as tmrName ,d.tmrtname equipmentId
  437. from downloadedplan d
  438. LEFT JOIN downloadplandtl2 d2 on d.id=d2.PID
  439. LEFT JOIN feedp fp on d2.FBarID=fp.id
  440. left join bar b on fp.barid = b.id and d.pastureid = b.pastureid
  441. left JOIN feedtemplet ft on d.templetName=ft.TNAME
  442. where d.mydate= date_format(NOW(),'%Y-%m-%d') and d.IsCompleted=1 and d.lpplanType!=1 and d.pastureid = ? `
  443. data, err := tx.SQL(sqlstr, pastureid).Query().List()
  444. if err != nil {
  445. logs.Error("syncBar-error-5:", err)
  446. return
  447. }
  448. req := make(map[string]interface{})
  449. req["farmId"] = token
  450. req["rowCount"] = len(data)
  451. req["method"] = "uploaddiliverdata"
  452. req["resultData"] = data
  453. res := new(UDUploadoverplusdataReq)
  454. res.ApiId = "getKPTData"
  455. res.Param = req
  456. UDPostPush(res, "application/json")
  457. }
  458. type UDUploadoverplusdataReq struct {
  459. ApiId string `json:"apiId"`
  460. Param interface{} `json:"param"`
  461. ReqMethod string `json:"reqMethod"`
  462. RegCode string `json:"regCode"`
  463. Command string `json:"command"`
  464. }
  465. func UDUploadoverplusdata(token, pastureid string) {
  466. tx := restful.Engine.NewSession()
  467. defer tx.Close()
  468. sqlstr := `SELECT
  469. '' startTime,
  470. '' endTime,
  471. ifnull(br.RemainDate,"") AS overplusDate,
  472. b.bcode AS penId,
  473. fp.barname AS penName,
  474. ifnull(br.Remain,"") AS actualWeight
  475. FROM
  476. barfeedremain br
  477. LEFT JOIN feedp fp ON br.barid = fp.id
  478. left join bar b on fp.barid = b.id
  479. WHERE
  480. RemainDate = date_format(NOW(),'%Y-%m-%d') and br.pastureid = ? `
  481. data, err := tx.SQL(sqlstr, pastureid).Query().List()
  482. if err != nil {
  483. logs.Error("syncBar-error-5:", err)
  484. return
  485. }
  486. req := make(map[string]interface{})
  487. req["farmId"] = token
  488. req["rowCount"] = len(data)
  489. req["method"] = "uploadoverplusdata"
  490. req["code"] = "1"
  491. req["errMessage"] = ""
  492. req["resultData"] = data
  493. res := new(UDUploadoverplusdataReq)
  494. res.ApiId = "getCptData"
  495. res.ReqMethod = "PARTY"
  496. res.RegCode = "cpt180511"
  497. res.Command = "202cb962ac590"
  498. res.Param = req
  499. UDPostPush(res, "application/json")
  500. }
  501. func UDPostPush(data interface{}, contentType string) string {
  502. url := "https://wdc.unidairy.cn/copartner_uploads/"
  503. // 超时时间:5秒
  504. client := &http.Client{Timeout: 20 * time.Second}
  505. jsonStr, _ := json.Marshal(data)
  506. resp, err := client.Post(url, contentType, bytes.NewBuffer(jsonStr))
  507. if err != nil {
  508. panic(err)
  509. }
  510. defer resp.Body.Close()
  511. result, _ := ioutil.ReadAll(resp.Body)
  512. fmt.Println(string(result))
  513. return string(result)
  514. }
  515. func getPastureInfo() ([]map[string]interface{}, error) {
  516. tx := restful.Engine.NewSession()
  517. defer tx.Close()
  518. data, err := tx.SQL("select pastureid,token from pasture where token is not null ").Query().List()
  519. if err != nil {
  520. logs.Error("syncBar-error-5:", err)
  521. return nil, err
  522. }
  523. return data, nil
  524. }