udservice.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  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([]interface{}, 0)
  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 {
  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([]interface{}, 0)
  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 {
  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. var response Response
  171. err = json.Unmarshal(body, &response)
  172. if err != nil {
  173. fmt.Println("Error unmarshalling JSON:", err)
  174. return nil
  175. }
  176. fmt.Println(response)
  177. msgBytes, err := json.Marshal(response.Msg)
  178. if err != nil {
  179. fmt.Println("Error marshalling msg to bytes:", err)
  180. return nil
  181. }
  182. return msgBytes
  183. }
  184. //搅拌
  185. func UdUtirPush(pastureId, farmId, date string) error {
  186. tx := restful.Engine.NewSession()
  187. defer tx.Close()
  188. var now string
  189. if date != "" {
  190. now = date
  191. } else {
  192. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  193. }
  194. 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,
  195. ifnull(ifnull(fc.fcname,(select fcname from feedclass fc1 join feed f1 on f1.fclassid = fc1.id where f1.id =ftd.fid )),'饲料') ingType,
  196. 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,
  197. 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,
  198. DATE_FORMAT(IFNULL((SELECT MAX(intime) FROM downloadplandtl1 d2
  199. WHERE d1.pid=d2.pid AND d1.pastureid = d2.pastureid AND d2.intime<d1.intime)
  200. , (SELECT MAX(intime) FROM downloadedplan d2
  201. WHERE d1.date=d2.mydate AND d1.pastureid = d2.pastureid AND d2.id=d1.pid)
  202. ), '%Y-%m-%d %H:%i:%s')
  203. startTime ,
  204. date_format(d1.intime,'%Y-%m-%d %H:%i:%s') endTime, ifnull(driver.drivername,'') tmrName ,d1.feedallowratio allowable_error
  205. from downloadplandtl1 d1 join downloadedplan d on d.id = d1.pid
  206. left join feedtempletdate ft on ft.id = d.tempid and ft.date = d1.date
  207. left join feed f on f.feedcode = d1.feedcode
  208. left join feedclass fc on fc.id = f.fclassid
  209. left join ftdetaildate ftd on ftd.date = d1.date and ftd.ftid = d1.fid
  210. join tmr t on t.id = d.tmrid
  211. left join driver on driver.drivercode = t.eqcode
  212. where d1.date = ? and d.havebutton = 1 and d1.type = 0 `, now).Query().List()
  213. if err != nil {
  214. logging.Error(err)
  215. return err
  216. }
  217. dataByte, _ := json.Marshal(&dataList)
  218. reqJson := `{
  219. "reqMethod": "PARTY",
  220. "param": {
  221. "code": "1",
  222. "method": "uploadadddata",
  223. "resultData": %s,
  224. "farmId": "%s",
  225. "rowCount": %d,
  226. "errMessage": ""
  227. },
  228. "regCode": "cpt180511",
  229. "command": "3d6e4752",
  230. "apiId": "getCptData"
  231. }`
  232. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  233. postPush(reqJson, 0, tx, pastureId)
  234. fmt.Println(reqJson)
  235. return nil
  236. }
  237. func UdMaterialIssuePush(pastureId, farmId, date string) error {
  238. tx := restful.Engine.NewSession()
  239. defer tx.Close()
  240. var now string
  241. if date != "" {
  242. now = date
  243. } else {
  244. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  245. }
  246. fmt.Println(now, pastureId)
  247. dataList, err := tx.SQL(`SELECT d1.sort feedSort, ifnull(f.feedcode,d1.fid) feedId,ifnull(ifnull(f.udname,f.fname),d1.fname) feedName,
  248. d.id,IFNULL(ft.tcode,d2.feedtempletid ) recipeId,IFNULL(ft.tcode,d2.feedtempletid ) feedtempletId,ifnull(ft.tname,d.templetName) feedtempletName ,
  249. IFNULL(d.templetName,d2.feedtempletName ) recipeName,
  250. 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,
  251. d.Times as dropShift,ifnull(b.bcode,b.id) as penId,b.bname as penName,fp.CCOUNT as cowCount, d2.SORT as feedingNo,
  252. ifnull(ROUND(d2.lweight * (d1.actualweightminus/ (select sum(actualweightminus) from downloadplandtl1 where pid = d1.pid and type = 0) ),2) ,0)as expWeight,
  253. 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,
  254. ifnull(date_format(d2.InTime,'%Y-%m-%d %H:%i:%s'),d.mydate) as endTime,ifnull((SELECT dr.driver FROM dutyrecord dr
  255. WHERE dr.pastureid = d.pastureid AND dr.eqid = d.tmrid AND dr.times= d.times AND dr.operatetime <=d.mydate
  256. ORDER BY dr.operatetime DESC LIMIT 1),"") as tmrName ,d.tmrtname equipmentId ,
  257. d1.fname,
  258. 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 ,
  259. 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)*
  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. 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)*
  262. 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 ))
  263. ),'')),0) feedWeight
  264. ,ifnull(ftd.sort,"") premixFeedSort ,
  265. ifnull((select feedcode from feed where id = ftd.fid),"") premixFeedId,ifnull(ftd.fname,"") premixFeedName,
  266. 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 ,
  267. 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)*
  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. 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)*
  270. 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 ))
  271. ),''),'0')
  272. premixFeedWeight
  273. from downloadedplan d
  274. LEFT JOIN downloadplandtl2 d2 on d.id=d2.PID
  275. LEFT JOIN (select dd.pid as lppid,dd1.* from downloadedplan dd join downloadplandtl1 dd1 on dd1.pid = dd.id and dd1.type = 0
  276. where dd.mydate= date_format(?,'%Y-%m-%d') and dd.lpplanType in (0,1) ) d1 on d1.lppid = d.pid
  277. LEFT JOIN feedp fp on d2.FBarID=fp.barid
  278. join bar b on fp.barid = b.id and d.pastureid = b.pastureid
  279. left join feed f on f.feedcode = d1.feedcode
  280. left JOIN feedtempletdate ft on d.tempid=ft.id and ft.date = d1.date and d.tversion = ft.version
  281. left join feedtempletdate ft1 on d1.feedcode = '-1' and ft1.date = d1.date and ft1.id = d1.fid
  282. left join ftdetaildate ftd on ftd.date = d1.date and ftd.ftid = d1.fid AND d1.feedcode = '-1' and ftd.version = ft1.version
  283. where d.mydate= date_format(?,'%Y-%m-%d') and d2.type = 0 and d.pastureid = ? and d1.fname is not null order by tmrno `, now, now, pastureId).Query().List()
  284. if err != nil {
  285. logging.Error(err)
  286. return err
  287. }
  288. fmt.Println(dataList)
  289. dataByte, _ := json.Marshal(&dataList)
  290. // 发料数据里 uploaddiliverdata 这个需要变更为 uploadnewdiliverdata ,传输参数需要变一下
  291. reqJson := `{
  292. "reqMethod": "PARTY",
  293. "param": {
  294. "code": "1",
  295. "method": "uploadnewdiliverdata",
  296. "resultData": %s,
  297. "farmId": "%s",
  298. "rowCount": %d,
  299. "errMessage": ""
  300. },
  301. "regCode": "cpt180511",
  302. "command": "3d6e4752",
  303. "apiId": "getCptData"
  304. }`
  305. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  306. fmt.Println(reqJson)
  307. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  308. postPush(reqJson, 0, tx, pastureId)
  309. return nil
  310. }
  311. func UdBarFeedRemainPush(pastureId, farmId, date string) error {
  312. tx := restful.Engine.NewSession()
  313. defer tx.Close()
  314. var now string
  315. if date != "" {
  316. now = date
  317. } else {
  318. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  319. }
  320. dataList, err := tx.SQL(`SELECT
  321. '' startTime,
  322. '' endTime,
  323. br.RemainDate AS overplusDate,
  324. ifnull(b.bcode,b.id) AS penId,
  325. b.BNAME AS penName,
  326. br.Remain AS actualWeight
  327. FROM
  328. barfeedremain br
  329. LEFT JOIN feedp fp ON br.barid = fp.barid
  330. left join bar b on b.id = fp.barid
  331. WHERE
  332. date_format( RemainDate, '%Y-%m-%d' ) =? `, now).Query().List()
  333. if err != nil {
  334. logging.Error(err)
  335. return err
  336. }
  337. dataByte, _ := json.Marshal(&dataList)
  338. reqJson := `{
  339. "reqMethod": "PARTY",
  340. "param": {
  341. "code": "1",
  342. "method": "uploadoverplusdata",
  343. "resultData": %s,
  344. "farmId":"%s",
  345. "rowCount": %d,
  346. "errMessage": ""
  347. },
  348. "regCode": "cpt180511",
  349. "command": "3d6e4752",
  350. "apiId": "getCptData"
  351. }`
  352. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  353. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  354. fmt.Println(reqJson)
  355. postPush(reqJson, 1, tx, pastureId)
  356. return nil
  357. }
  358. // method:
  359. // 配方 getfeedtempletinfo
  360. // 搅拌数据 uploadadddata
  361. // 撒料数据 uploaddiliverdata
  362. // 剩料 uploadoverplusdata
  363. func UdFeedtempletPush(pastureId, farmId, date string) error {
  364. tx := restful.Engine.NewSession()
  365. defer tx.Close()
  366. var now string
  367. if date != "" {
  368. now = date
  369. } else {
  370. now = time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  371. }
  372. dataList, err := tx.SQL(`SELECT
  373. ft.tcode AS recipeId,
  374. ft.TNAME AS recipeName,
  375. f.feedcode AS ingId,
  376. ifnull(f.udname,f.fname) AS ingName,
  377. round( f.dry * ftd.FWEIGHT, 2 ) AS dmQty,
  378. ftd.FWEIGHT AS afQty,
  379. ftd.SORT AS mixNo,
  380. round( f.Uprice * ftd.FWEIGHT, 2 ) AS recipeCost,
  381. fc.fcname AS ingType,
  382. f.AllowRatio AS allowableError ,fc.fcname ingType
  383. FROM
  384. feedtempletdate ft
  385. JOIN ftdetaildate ftd ON ft.id = ftd.FTID and ft.date = ftd.date
  386. JOIN feed f ON ftd.FID = f.id
  387. JOIN feedclass fc ON f.fclassid = fc.id
  388. WHERE
  389. ft.ENABLE = 1
  390. AND ft.isDelete != 1 and ft.date = ? `, now).Query().List()
  391. if err != nil {
  392. logging.Error(err)
  393. return err
  394. }
  395. dataByte, _ := json.Marshal(&dataList)
  396. reqJson := `{
  397. "reqMethod": "PARTY",
  398. "param": {
  399. "code": "1",
  400. "method": "getfeedtempletinfo",
  401. "resultData": %s,
  402. "farmId": "%s",
  403. "rowCount": %d,
  404. "errMessage": ""
  405. },
  406. "regCode": "cpt180511",
  407. "command": "3d6e4752",
  408. "apiId": "getCptData"
  409. }`
  410. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  411. fmt.Println(reqJson)
  412. postPush(reqJson, 4, tx, pastureId)
  413. return nil
  414. }
  415. type ForwardingReq struct {
  416. Body string `json:"body"`
  417. Headers []*Headers `json:"headers"`
  418. Url string `json:"url"`
  419. Method string `json:"method"`
  420. }
  421. type Headers struct {
  422. Key string `json:"key"`
  423. Value string `json:"value"`
  424. }
  425. func postPush(data string, msgtype int, tx *xorm.Session, pastureId string) {
  426. forwardingReq := new(ForwardingReq)
  427. forwardingReq.Url = "https://fnhbdairyfarmlive.fn.com.my:8380/copartner_uploads/"
  428. forwardingReq.Method = "POST"
  429. forwardingReq.Body = data
  430. jsonStr, _ := json.Marshal(forwardingReq)
  431. fmt.Println(setting.ServerSetting.UDForwardingSvc)
  432. req, err := http.NewRequest("POST", setting.ServerSetting.UDForwardingSvc+":8080/forwarding", bytes.NewBuffer(jsonStr))
  433. // req, err := http.NewRequest("POST", forwardingReq.Url, bytes.NewBuffer([]byte(data)))
  434. // if err != nil {
  435. // logs.Error(err)
  436. // // return nil
  437. // }
  438. req.Header.Set("Content-Type", "application/json")
  439. // client := &http.Client{}
  440. tr := &http.Transport{
  441. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  442. }
  443. client := &http.Client{Transport: tr}
  444. resp, err := client.Do(req)
  445. if err != nil {
  446. logs.Error(err)
  447. return
  448. }
  449. defer resp.Body.Close()
  450. body, _ := ioutil.ReadAll(resp.Body)
  451. fmt.Println(string(body))
  452. if strings.Index(resp.Status, "200") > -1 {
  453. bodyData := make(map[string]string)
  454. json.Unmarshal(body, &bodyData)
  455. if _, ok := bodyData["data"]; ok {
  456. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  457. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, bodyData["data"], "", "", msgtype, forwardingReq.Url)
  458. } else {
  459. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  460. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, forwardingReq.Url)
  461. }
  462. } else {
  463. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  464. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, forwardingReq.Url)
  465. }
  466. }