udservice.go 25 KB

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