udservice.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. package gm
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "strings"
  9. "time"
  10. "tmr-watch/conf/setting"
  11. "tmr-watch/http/handle/restful"
  12. "tmr-watch/pkg/logging"
  13. "github.com/astaxie/beego/logs"
  14. "github.com/xormplus/xorm"
  15. )
  16. // "../../../pkg/setting"
  17. // "../../../routers/restful"
  18. // http://172.16.86.95:8080/copartner_downloads?equipmentId=48ffa4de-7870-4b18-a052-9f8d3a46089a&farmId=ef275fb06fd847d88422517773e5a616&method=downloadpen
  19. func GmUdSync(pastureId, farmId string) {
  20. UdBarSync(pastureId, farmId)
  21. UdFeedSync(pastureId, farmId)
  22. UdFeedtempletPush(pastureId, farmId)
  23. UdUtirPush(pastureId, farmId, "")
  24. UdBarFeedRemainPush(pastureId, farmId, "")
  25. UdMaterialIssuePush(pastureId, farmId, "")
  26. }
  27. func UdBarSync(pastureId, farmId string) {
  28. url := fmt.Sprintf("http://172.16.86.95:8080/copartner_downloads?equipmentId=48ffa4de-7870-4b18-a052-9f8d3a46089a&farmId=%s&method=downloadpen", farmId)
  29. barByte := getPull(url)
  30. fmt.Println(string(barByte))
  31. barMap := make(map[string]interface{})
  32. json.Unmarshal(barByte, &barMap)
  33. tx := restful.Engine.NewSession()
  34. defer tx.Close()
  35. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  36. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, "", string(barByte), "", "", 3, url)
  37. if len(barMap) > 0 {
  38. if barMap["status"].(string) != "ok" {
  39. return
  40. }
  41. for _, item := range barMap["msg"].([]interface{}) {
  42. bar := item.(map[string]interface{})
  43. barname := bar["barname"].(string) + "_ud"
  44. count, _ := tx.Table("bar").Where("pastureId = ? ", pastureId).Count()
  45. barExist, _ := tx.SQL(` select count(1) from bar where bcode = ? `, bar["barcode"]).Exist()
  46. tx.Exec(`insert into bar(pastureid,bcode,bname,sort)values(?,?,?,?) ON DUPLICATE KEY UPDATE bname = ? `, pastureId, bar["barcode"], barname, count+1, barname)
  47. _, _ = tx.Exec(`insert into feedp(pastureid,barid,barname,softccount,ccount)values(?,(select id from bar where bcode= ? and pastureId = ? ),?,?,?)
  48. ON DUPLICATE KEY UPDATE softccount = ? `,
  49. pastureId, bar["barcode"], pastureId, barname, bar["cowcount"], bar["cowcount"], bar["cowcount"])
  50. fmt.Println(bar["barcode"], barname)
  51. if !barExist {
  52. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  53. pastureId, bar["barcode"], 1, barname)
  54. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  55. pastureId, bar["barcode"], 2, barname)
  56. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  57. pastureId, bar["barcode"], 3, barname)
  58. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  59. pastureId, bar["barcode"], 4, barname)
  60. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  61. pastureId, bar["barcode"], 5, barname)
  62. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  63. pastureId, bar["barcode"], 6, barname)
  64. }
  65. }
  66. }
  67. }
  68. func UdFeedSync(pastureId, farmId string) {
  69. url := fmt.Sprintf("http://172.16.86.95:8080/copartner_downloads?equipmentId=48ffa4de-7870-4b18-a052-9f8d3a46089a&farmId=%s&method=downloadmaterial", farmId)
  70. feedByte := getPull(url)
  71. fmt.Println(string(feedByte))
  72. tx := restful.Engine.NewSession()
  73. defer tx.Close()
  74. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  75. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, "", string(feedByte), "", "", 3, url)
  76. feedMap := make(map[string]interface{})
  77. json.Unmarshal(feedByte, &feedMap)
  78. if len(feedMap) > 0 {
  79. if feedMap["status"].(string) != "ok" {
  80. return
  81. }
  82. for _, item := range feedMap["msg"].([]interface{}) {
  83. fmt.Println(item)
  84. feed := item.(map[string]interface{})
  85. feedname := feed["feedname"].(string) + "_ud"
  86. feedClassExist, err := tx.Table("feedclass").Where("fccode = ? ", feed["feedclass"]).Where(" pastureId = ? ", pastureId).Exist()
  87. fmt.Println(err)
  88. if !feedClassExist {
  89. count, _ := tx.Table("feedclass").Where("pastureId = ? ", pastureId).Count()
  90. ids, err := setting.SnowIds.NextId()
  91. if err != nil {
  92. ids = time.Now().UnixNano()
  93. logging.Info("create SnowIds err", err)
  94. }
  95. _, err = tx.Exec(`insert into feedclass(id,pastureId,fcname,fccode,bigfeedclassname,sort,bigfeedclassid) values(?,?,?,?,?,?)`, ids,
  96. pastureId, feed["feedclass"], feed["feedclass"], feed["feedclass"], count+1, ids)
  97. fmt.Println(err)
  98. }
  99. ids, err := setting.SnowIds.NextId()
  100. if err != nil {
  101. ids = time.Now().UnixNano()
  102. logging.Info("create SnowIds err", err)
  103. }
  104. _, err = tx.Exec(`insert into feed(id,pastureId,feedcode,udname,fclassid,fclass,fname) values(?,?,?,?,(select id from feedclass where fccode = ? and pastureId = ? ),?,if(char_length(?) > 7, left(?,7),?) )
  105. ON DUPLICATE KEY UPDATE udname = ? ,fclassid = (select id from feedclass where fccode = ? and pastureId = ? ) ,fclass = ?`,
  106. ids, pastureId, feed["feedcode"], feedname, feed["feedclass"], pastureId, feed["feedclass"], feedname, feedname, feedname, feedname, feed["feedclass"], pastureId, feed["feedclass"])
  107. }
  108. }
  109. }
  110. func getPull(url string) []byte {
  111. forwardingReq := new(ForwardingReq)
  112. forwardingReq.Url = url
  113. forwardingReq.Method = "GET"
  114. jsonStr, _ := json.Marshal(forwardingReq)
  115. req, err := http.NewRequest("POST", setting.ServerSetting.UDForwardingSvc+":8080/forwarding", bytes.NewBuffer(jsonStr))
  116. if err != nil {
  117. logs.Error(err)
  118. // return nil
  119. }
  120. req.Header.Set("Content-Type", "application/json")
  121. client := &http.Client{}
  122. resp, err := client.Do(req)
  123. if err != nil {
  124. logs.Error(err)
  125. return nil
  126. }
  127. defer resp.Body.Close()
  128. body, _ := ioutil.ReadAll(resp.Body)
  129. if strings.Index(resp.Status, "200") > -1 {
  130. bodyData := make(map[string]string)
  131. json.Unmarshal(body, &bodyData)
  132. if _, ok := bodyData["data"]; ok {
  133. return []byte(bodyData["data"])
  134. }
  135. }
  136. return nil
  137. }
  138. //搅拌
  139. func UdUtirPush(pastureId, farmId, date string) error {
  140. tx := restful.Engine.NewSession()
  141. defer tx.Close()
  142. var now string
  143. if date != "" {
  144. now = date
  145. } else {
  146. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  147. }
  148. dataList, err := tx.SQL(`select date_format(d1.date,'%Y-%m-%d') loadDate,d.times loadShift,d.datacaptureno tmrNo,ft.id recipeId,ft.ccname recipeName,ifnull(f.id,ftd.fid) ingId,d1.fname ingName,ifnull(fc.fcname,(select fcname from feedclass fc1 join feed f1 on f1.fclassid = fc1.id where f1.id =ftd.fid )) ingType,
  149. ifnull(f.dry * d1.actualweightminus,0) dmPct,d1.sort mixNo,ifnull(d1.feedallowratio,0) allowableError ,d1.lweight expWeight,d1.actualweightminus actualWeight,
  150. DATE_FORMAT(IFNULL((SELECT MAX(intime) FROM downloadplandtl1 d2
  151. WHERE d1.pid=d2.pid AND d1.pastureid = d2.pastureid AND d2.intime<d1.intime)
  152. , (SELECT MAX(intime) FROM downloadedplan d2
  153. WHERE d1.date=d2.mydate AND d1.pastureid = d2.pastureid AND d2.id=d1.pid)
  154. ), '%Y-%m-%d %H:%i:%s')
  155. startTime ,
  156. date_format(d1.intime,'%Y-%m-%d %H:%i:%s') endTime, d.tmrtname tmrName , d.pid id ,ifnull(ftd.sort,"") premixFeedSort ,
  157. ifnull( (select id from feed where id = ftd.fid),"") premixFeedId,ifnull(ftd.fname,"") premixFeedName,
  158. ifnull(ftd.fweight / (select sum(fweight) from ftdetaildate where date = d1.date and ftid = d1.fid ) * d1.actualweightminus,"") premixFeedWeight
  159. from downloadplandtl1 d1 join downloadedplan d on d.id = d1.pid
  160. left join feedtempletdate ft on ft.id = d.tempid and ft.date = d1.date
  161. left join feed f on f.feedcode = d1.feedcode
  162. left join feedclass fc on fc.id = f.fclassid
  163. left join ftdetaildate ftd on ftd.date = d1.date and ftd.ftid = d1.fid
  164. where d1.date = ?`, now).Query().List()
  165. if err != nil {
  166. logging.Error(err)
  167. return err
  168. }
  169. dataByte, _ := json.Marshal(&dataList)
  170. reqJson := `{
  171. "reqMethod": "PARTY",
  172. "param": {
  173. "code": "1",
  174. "method": "uploadadddata",
  175. "resultData": %s,
  176. "farmId": "%s",
  177. "rowCount": %d,
  178. "errMessage": ""
  179. },
  180. "regCode": "cpt180511",
  181. "command": "3d6e4752",
  182. "apiId": "getCptData"
  183. }`
  184. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  185. postPush(reqJson, 0, tx, pastureId)
  186. fmt.Println(reqJson)
  187. return nil
  188. }
  189. func UdMaterialIssuePush(pastureId, farmId, date 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 dd.sort feedSort, ifnull((select id from feed where feedcode = dd.feedcode ),"") feedId,dd.fname feedName,
  199. d.id,IFNULL(ft.id,d2.feedtempletid ) recipeId,IFNULL(ft.id,d2.feedtempletid ) feedtempletId,ft.tname feedtempletName ,
  200. IFNULL(d.templetName,d2.feedtempletName ) recipeName,
  201. 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,
  202. d.Times as dropShift,b.id as penId,d2.Fname as penName,fp.CCOUNT as cowCount, d2.SORT as feedingNo,
  203. ifnull(ROUND(d2.lweight * (dd.actualweightminus/ (select sum(actualweightminus) from downloadplandtl1 where pid = dd.pid and type = 0) ),2) ,0)as expWeight,
  204. ifnull(d2.ActualWeightMinus,0) as actualWeight, ifnull(date_format(timestamp(d2.InTime,CONCAT('-',d2.processTime)),'%Y-%m-%d %H:%i:%s'),d.mydate) as startTime,
  205. ifnull(date_format(d2.InTime,'%Y-%m-%d %H:%i:%s'),d.mydate) as endTime,ifnull((SELECT dr.driver FROM dutyrecord dr
  206. WHERE dr.pastureid = d.pastureid AND dr.eqid = d.tmrid AND dr.times= d.times AND dr.operatetime <=d.mydate
  207. ORDER BY dr.operatetime DESC LIMIT 1),"") as tmrName ,d.tmrtname equipmentId ,
  208. dd.fname,
  209. ifnull(TRIM(if(( select sum(dd2.actualweightminus) from downloadplandtl2 dd2 where dd2.pid = d2.pid) >0 , ROUND( d2.actualweightminus/( select sum(dd2.actualweightminus) from downloadplandtl2 dd2 where dd2.pid = d2.pid) * (dd.actualweightminus ),2), ROUND( d2.lweight/( select sum(dd2.lweight) from downloadplandtl2 dd2 where dd2.pid = d2.pid) * (dd.actualweightminus ),2))),0) feedWeight
  210. ,ifnull(ftd.sort,"") premixFeedSort ,
  211. ifnull((select id from feed where id = ftd.fid),"") premixFeedId,ifnull(ftd.fname,"") premixFeedName,
  212. ifnull(ftd.fweight / (select sum(fweight) from ftdetaildate where date = dd.date and ftid = dd.fid ) * dd.actualweightminus,"") premixFeedWeight
  213. from downloadedplan d
  214. LEFT JOIN downloadplandtl2 d2 on d.id=d2.PID
  215. LEFT JOIN (select dd.pid as lppid,dd1.* from downloadedplan dd join downloadplandtl1 dd1 on dd1.pid = dd.id and dd1.type = 0
  216. where dd.mydate= date_format(?,'%Y-%m-%d') and dd.lpplanType in (0,1) ) dd on dd.lppid = d.pid
  217. LEFT JOIN feedp fp on d2.FBarID=fp.barid
  218. left join bar b on fp.barid = b.id and d.pastureid = b.pastureid
  219. left JOIN feedtemplet ft on d.tempid=ft.id
  220. left join ftdetaildate ftd on ftd.date = dd.date and ftd.ftid = dd.fid
  221. where d.mydate= date_format(?,'%Y-%m-%d') and d.lpplanType!=1 and d.pastureid = ? and dd.fname is not null order by tmrno `, now, now, pastureId).Query().List()
  222. if err != nil {
  223. logging.Error(err)
  224. return err
  225. }
  226. dataByte, _ := json.Marshal(&dataList)
  227. reqJson := `{
  228. "reqMethod": "PARTY",
  229. "param": {
  230. "code": "1",
  231. "method": "uploaddiliverdata",
  232. "resultData": %s,
  233. "farmId": "%s",
  234. "rowCount": %d,
  235. "errMessage": ""
  236. },
  237. "regCode": "cpt180511",
  238. "command": "3d6e4752",
  239. "apiId": "getCptData"
  240. }`
  241. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  242. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  243. postPush(reqJson, 0, tx, pastureId)
  244. fmt.Println(reqJson)
  245. return nil
  246. }
  247. func UdBarFeedRemainPush(pastureId, farmId, date string) error {
  248. tx := restful.Engine.NewSession()
  249. defer tx.Close()
  250. var now string
  251. if date != "" {
  252. now = date
  253. } else {
  254. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  255. }
  256. dataList, err := tx.SQL(`SELECT
  257. '' startTime,
  258. '' endTime,
  259. br.RemainDate AS overplusDate,
  260. b.id AS penId,
  261. b.BNAME AS penName,
  262. br.Remain AS actualWeight
  263. FROM
  264. barfeedremain br
  265. LEFT JOIN feedp fp ON br.barid = fp.id
  266. left join bar b on b.id = fp.barid
  267. WHERE
  268. date_format( RemainDate, '%Y-%m-%d' ) =? `, now).Query().List()
  269. if err != nil {
  270. logging.Error(err)
  271. return err
  272. }
  273. dataByte, _ := json.Marshal(&dataList)
  274. reqJson := `{
  275. "reqMethod": "PARTY",
  276. "param": {
  277. "code": "1",
  278. "method": "uploadoverplusdata",
  279. "resultData": %s,
  280. "farmId":"%s",
  281. "rowCount": %d,
  282. "errMessage": ""
  283. },
  284. "regCode": "cpt180511",
  285. "command": "3d6e4752",
  286. "apiId": "getCptData"
  287. }`
  288. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  289. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  290. fmt.Println(reqJson)
  291. postPush(reqJson, 1, tx, pastureId)
  292. return nil
  293. }
  294. // method:
  295. // 配方 getfeedtempletinfo
  296. // 搅拌数据 uploadadddata
  297. // 撒料数据 uploaddiliverdata
  298. // 剩料 uploadoverplusdata
  299. func UdFeedtempletPush(pastureId, farmId string) error {
  300. tx := restful.Engine.NewSession()
  301. defer tx.Close()
  302. dataList, err := tx.SQL(`SELECT
  303. ft.ID AS recipeId,
  304. ft.TNAME AS recipeName,
  305. f.id AS ingId,
  306. f.FNAME AS ingName,
  307. round( f.dry * ftd.FWEIGHT, 2 ) AS dmQty,
  308. ftd.FWEIGHT AS afQty,
  309. ftd.SORT AS mixNo,
  310. round( f.Uprice * ftd.FWEIGHT, 2 ) AS recipeCost,
  311. fc.fcname AS ingType,
  312. f.AllowRatio AS allowableError ,fc.fcname ingType
  313. FROM
  314. feedtemplet ft
  315. JOIN ftdetail ftd ON ft.id = ftd.FTID
  316. JOIN feed f ON ftd.FID = f.id
  317. JOIN feedclass fc ON f.fclassid = fc.id
  318. WHERE
  319. ft.ENABLE = 1
  320. AND ft.isDelete != 1 `).Query().List()
  321. if err != nil {
  322. logging.Error(err)
  323. return err
  324. }
  325. dataByte, _ := json.Marshal(&dataList)
  326. reqJson := `{
  327. "reqMethod": "PARTY",
  328. "param": {
  329. "code": "1",
  330. "method": "getfeedtempletinfo",
  331. "resultData": %s,
  332. "farmId": "%s",
  333. "rowCount": %d,
  334. "errMessage": ""
  335. },
  336. "regCode": "cpt180511",
  337. "command": "3d6e4752",
  338. "apiId": "getCptData"
  339. }`
  340. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  341. fmt.Println(reqJson)
  342. postPush(reqJson, 4, tx, pastureId)
  343. return nil
  344. }
  345. type ForwardingReq struct {
  346. Body string `json:"body"`
  347. Headers []*Headers `json:"headers"`
  348. Url string `json:"url"`
  349. Method string `json:"method"`
  350. }
  351. type Headers struct {
  352. Key string `json:"key"`
  353. Value string `json:"value"`
  354. }
  355. func postPush(data string, msgtype int, tx *xorm.Session, pastureId string) {
  356. forwardingReq := new(ForwardingReq)
  357. forwardingReq.Url = "http://172.16.86.95:8080/copartner_uploads/"
  358. forwardingReq.Method = "POST"
  359. forwardingReq.Body = data
  360. jsonStr, _ := json.Marshal(forwardingReq)
  361. fmt.Println(setting.ServerSetting.UDForwardingSvc)
  362. req, err := http.NewRequest("POST", setting.ServerSetting.UDForwardingSvc+":8080/forwarding", bytes.NewBuffer(jsonStr))
  363. if err != nil {
  364. logs.Error(err)
  365. // return nil
  366. }
  367. req.Header.Set("Content-Type", "application/json")
  368. client := &http.Client{}
  369. resp, err := client.Do(req)
  370. if err != nil {
  371. logs.Error(err)
  372. return
  373. }
  374. defer resp.Body.Close()
  375. body, _ := ioutil.ReadAll(resp.Body)
  376. fmt.Println(string(body))
  377. if strings.Index(resp.Status, "200") > -1 {
  378. bodyData := make(map[string]string)
  379. json.Unmarshal(body, &bodyData)
  380. if _, ok := bodyData["data"]; ok {
  381. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  382. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, bodyData["data"], "", "", msgtype, forwardingReq.Url)
  383. } else {
  384. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  385. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, forwardingReq.Url)
  386. }
  387. } else {
  388. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  389. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, forwardingReq.Url)
  390. }
  391. }