udservice.go 23 KB

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