udservice.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. package gm
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "time"
  9. "tmr-watch/conf/setting"
  10. "tmr-watch/http/handle/restful"
  11. "tmr-watch/pkg/logging"
  12. "github.com/astaxie/beego/logs"
  13. "github.com/xormplus/xorm"
  14. )
  15. // "../../../pkg/setting"
  16. // "../../../routers/restful"
  17. func GmUdSync(pastureId, farmId string) {
  18. fmt.Println(111)
  19. }
  20. func UdBarSync(pastureId, farmId string) {
  21. url := fmt.Sprintf("http://172.16.86.95:8080/copartner_downloads?equipmentId=48ffa4de-7870-4b18-a052-9f8d3a46089a&farmId=%s&method=downloadpen", farmId)
  22. barByte := getPull(url)
  23. barMap := make(map[string]interface{})
  24. json.Unmarshal(barByte, &barMap)
  25. tx := restful.Engine.NewSession()
  26. defer tx.Close()
  27. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  28. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, "", string(barByte), "", "", 3, url)
  29. for _, item := range barMap["msg"].([]interface{}) {
  30. bar := item.(map[string]interface{})
  31. barname := bar["barname"].(string) + "_ud"
  32. barExist, _ := tx.SQL(` select count(1) from bar where bcode = ? `, bar["barcode"]).Exist()
  33. tx.Exec(`insert into bar(pastureid,bcode,bname)values(?,?,?) ON DUPLICATE KEY UPDATE bname = ? `, pastureId, bar["barcode"], barname, barname)
  34. _, _ = tx.Exec(`insert into feedp(pastureid,barid,barname,softccount,ccount)values(?,(select id from bar where bcode= ? and pastureId = ? ),?,?,?)
  35. ON DUPLICATE KEY UPDATE softccount = ? `,
  36. pastureId, bar["barcode"], pastureId, barname, bar["cowcount"], bar["cowcount"], bar["cowcount"])
  37. // fmt.Println(err)
  38. if !barExist {
  39. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  40. pastureId, bar["barcode"], 1, barname)
  41. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  42. pastureId, bar["barcode"], 2, barname)
  43. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  44. pastureId, bar["barcode"], 3, barname)
  45. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  46. pastureId, bar["barcode"], 4, barname)
  47. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  48. pastureId, bar["barcode"], 5, barname)
  49. tx.Exec(`insert into fpdetail(pastureId,barid,weight,ptsrate,times,barname) values(?,(select id from bar where bcode= ? and pastureId = ? ),0,0,?,?)`,
  50. pastureId, bar["barcode"], 6, barname)
  51. }
  52. }
  53. }
  54. func UdFeedSync(pastureId, farmId string) {
  55. url := fmt.Sprintf("http://172.16.86.95:8080/copartner_downloads?equipmentId=48ffa4de-7870-4b18-a052-9f8d3a46089a&farmId=%s&method=downloadmaterial", farmId)
  56. feedByte := getPull(url)
  57. tx := restful.Engine.NewSession()
  58. defer tx.Close()
  59. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  60. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, "", string(feedByte), "", "", 3, url)
  61. feedMap := make(map[string]interface{})
  62. json.Unmarshal(feedByte, &feedMap)
  63. for _, item := range feedMap["msg"].([]interface{}) {
  64. fmt.Println(item)
  65. feed := item.(map[string]interface{})
  66. feedname := feed["feedname"].(string) + "_ud"
  67. feedClassExist, _ := tx.SQL(` select count(1) from feedclass where fccode = ? and pastureId = ? `, feed["feedclass"], pastureId).Exist()
  68. if !feedClassExist {
  69. tx.Exec(`insert into feedclass(pastureId,fcname,fccode,bigfeedclassname,sort) values(?,?,?,?,(select max(sort) +1 from feedclass where pastureId = ? and fccode = ? ))`,
  70. pastureId, feed["feedclass"], feed["feedclass"], feed["feedclass"], pastureId, feed["feedclass"])
  71. }
  72. ids, err := setting.SnowIds.NextId()
  73. if err != nil {
  74. ids = time.Now().UnixNano()
  75. logging.Info("create SnowIds err", err)
  76. }
  77. _, err = tx.Exec(`insert into feed(id,pastureId,feedcode,fname,fclassid,fclass) values(?,?,?,?,(select id from feedclass where fccode = ? and pastureId = ? ),?)
  78. ON DUPLICATE KEY UPDATE fname = ? `,
  79. ids, pastureId, feed["feedcode"], feedname, feed["feedclass"], pastureId, feed["feedclass"], feedname)
  80. }
  81. }
  82. func getPull(url string) []byte {
  83. // 创建一个HTTP客户端
  84. client := &http.Client{}
  85. // 创建一个GET请求
  86. req, err := http.NewRequest("GET", url, nil)
  87. if err != nil {
  88. fmt.Println("创建请求时发生错误:", err)
  89. return nil
  90. }
  91. // 发送请求
  92. resp, err := client.Do(req)
  93. if err != nil {
  94. fmt.Println("发送请求时发生错误:", err)
  95. return nil
  96. }
  97. defer resp.Body.Close()
  98. // 读取响应内容
  99. body, err := ioutil.ReadAll(resp.Body)
  100. if err != nil {
  101. fmt.Println("读取响应时发生错误:", err)
  102. return nil
  103. }
  104. // 打印响应内容
  105. // fmt.Println(string(body))
  106. return body
  107. }
  108. //搅拌
  109. func UdUtirPush(pastureId, farmId string) error {
  110. tx := restful.Engine.NewSession()
  111. defer tx.Close()
  112. now := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  113. dataList, err := tx.SQL(`select d1.date loadDate,d.times loadShift,d.datacaptureno tmrNo,ft.id recipeId,ft.ccname,d1.feedcode,d1.fname,f.fclass,
  114. f.dry * d1.actualweightminus dmPct,d1.sort mixNo,d1.feedallowratio allowableError ,d1.lweight expWeight,d1.actualweightminus actualWeight,d1.begintime startTime,
  115. d1.intime endTime, d.tmrtname tmrName , d.pid id ,ftd.sort premixFeedSort ,
  116. (select feedcode from feed where id = ftd.fid) premixFeedId,ftd.fname premixFeedName,
  117. ftd.fweight / (select sum(fweight) from ftdetaildate where date = d1.date and ftid = d1.fid ) * d1.actualweightminus premixFeedWeight
  118. from downloadplandtl1 d1 join downloadedplan d on d.id = d1.pid
  119. left join feedtempletdate ft on ft.id = d.tempid and ft.date = d1.date
  120. left join feed f on f.feedcode = d1.feedcode
  121. left join ftdetaildate ftd on ftd.date = d1.date and ftd.ftid = d1.fid
  122. where d1.date = ?`, now).Query().List()
  123. if err != nil {
  124. logging.Error(err)
  125. return err
  126. }
  127. dataByte, _ := json.Marshal(&dataList)
  128. reqJson := `{
  129. "reqMethod": "PARTY",
  130. "param": {
  131. "code": "1",
  132. "method": "uploadadddata",
  133. "resultData": %s,
  134. "farmId": %s,
  135. "rowCount": %d,
  136. "errMessage": ""
  137. },
  138. "regCode": "cpt180511",
  139. "command": "3d6e4752",
  140. "apiId": "getCptData"
  141. }`
  142. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  143. postPush(reqJson, 0, tx, pastureId)
  144. fmt.Println(reqJson)
  145. return nil
  146. }
  147. func UdMaterialIssuePush(pastureId, farmId string) error {
  148. tx := restful.Engine.NewSession()
  149. defer tx.Close()
  150. now := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  151. dataList, err := tx.SQL(`SELECT dd.feedsort feedSort, dd.feedcode feedId,dd.fname feedName,
  152. d.id,IFNULL(ft.id,d2.feedtempletid ) recipeId,
  153. IFNULL(d.templetName,d2.feedtempletName ) recipeName,
  154. 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,
  155. d.Times as dropShift,b.bcode as penId,d2.Fname as penName,fp.CCOUNT as cowCount, d2.SORT as feedingNo,
  156. ifnull(ROUND(d2.lweight * (dd.actualweightminus/ (select sum(actualweightminus) from downloadplandtl1 where pid = dd.pid and type = 0) ),2) ,0)as expWeight,
  157. 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,
  158. ifnull(date_format(d2.InTime,'%Y-%m-%d %H:%i:%s'),d.mydate) as endTime,ifnull((SELECT dr.driver FROM dutyrecord dr
  159. WHERE dr.pastureid = d.pastureid AND dr.eqid = d.tmrid AND dr.times= d.times AND dr.operatetime <=d.mydate
  160. ORDER BY dr.operatetime DESC LIMIT 1),"") as tmrName ,d.tmrtname equipmentId ,
  161. dd.fname,
  162. 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
  163. ,ftd.sort premixFeedSort ,
  164. (select feedcode from feed where id = ftd.fid) premixFeedId,ftd.fname premixFeedName,
  165. ftd.fweight / (select sum(fweight) from ftdetaildate where date = dd.date and ftid = dd.fid ) * dd.actualweightminus premixFeedWeight
  166. from downloadedplan d
  167. LEFT JOIN downloadplandtl2 d2 on d.id=d2.PID
  168. LEFT JOIN (select dd.pid as lppid,dd1.* from downloadedplan dd join downloadplandtl1 dd1 on dd1.pid = dd.id and dd1.type = 0
  169. where dd.mydate= date_format(?,'%Y-%m-%d') and dd.lpplanType in (0,1) ) dd on dd.lppid = d.pid
  170. LEFT JOIN feedp fp on d2.FBarID=fp.barid
  171. left join bar b on fp.barid = b.id and d.pastureid = b.pastureid
  172. left JOIN feedtemplet ft on d.tempid=ft.id
  173. left join ftdetaildate ftd on ftd.date = dd.date and ftd.ftid = dd.fid
  174. 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()
  175. if err != nil {
  176. logging.Error(err)
  177. return err
  178. }
  179. dataByte, _ := json.Marshal(&dataList)
  180. reqJson := `{
  181. "reqMethod": "PARTY",
  182. "param": {
  183. "code": "1",
  184. "method": "uploaddiliverdata",
  185. "resultData": %s,
  186. "farmId": %s,
  187. "rowCount": %d,
  188. "errMessage": ""
  189. },
  190. "regCode": "cpt180511",
  191. "command": "3d6e4752",
  192. "apiId": "getCptData"
  193. }`
  194. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  195. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  196. postPush(reqJson, 0, tx, pastureId)
  197. return nil
  198. }
  199. func UdBarFeedRemainPush(pastureId, farmId string) error {
  200. tx := restful.Engine.NewSession()
  201. defer tx.Close()
  202. now := time.Now().AddDate(0, 0, 0).Format("2006-01-02")
  203. dataList, err := tx.SQL(`SELECT
  204. '' startTime,
  205. '' endTime,
  206. br.RemainDate AS overplusDate,
  207. b.bcode AS penId,
  208. b.BNAME AS penName,
  209. br.Remain AS actualWeight
  210. FROM
  211. barfeedremain br
  212. LEFT JOIN feedp fp ON br.barid = fp.id
  213. left join bar b on b.id = fp.barid
  214. WHERE
  215. date_format( RemainDate, '%Y-%m-%d' ) =? `, now).Query().List()
  216. if err != nil {
  217. logging.Error(err)
  218. return err
  219. }
  220. dataByte, _ := json.Marshal(&dataList)
  221. reqJson := `{
  222. "reqMethod": "PARTY",
  223. "param": {
  224. "code": "1",
  225. "method": "uploadoverplusdata",
  226. "resultData": %s,
  227. "farmId": %s,
  228. "rowCount": %d,
  229. "errMessage": ""
  230. },
  231. "regCode": "cpt180511",
  232. "command": "3d6e4752",
  233. "apiId": "getCptData"
  234. }`
  235. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  236. // '0饲喂 1剩料 2原料 3栏舍 4配方 5栏舍牛头数 6库存',
  237. postPush(reqJson, 1, tx, pastureId)
  238. return nil
  239. }
  240. // method:
  241. // 配方 getfeedtempletinfo
  242. // 搅拌数据 uploadadddata
  243. // 撒料数据 uploaddiliverdata
  244. // 剩料 uploadoverplusdata
  245. func UdFeedtempletPush(pastureId, farmId string) error {
  246. tx := restful.Engine.NewSession()
  247. defer tx.Close()
  248. dataList, err := tx.SQL(`SELECT
  249. ft.ID AS recipeId,
  250. ft.TNAME AS recipeName,
  251. ifnull( f.feedcode, f.id ) AS ingId,
  252. f.FNAME AS ingName,
  253. round( f.dry * ftd.FWEIGHT, 2 ) AS dmQty,
  254. ftd.FWEIGHT AS afQty,
  255. ftd.SORT AS mixNo,
  256. round( f.Uprice * ftd.FWEIGHT, 2 ) AS recipeCost,
  257. fc.FCNAME AS ingType,
  258. f.AllowRatio AS allowableError
  259. FROM
  260. feedtemplet ft
  261. LEFT JOIN ftdetail ftd ON ft.id = ftd.FTID
  262. LEFT JOIN feed f ON ftd.FID = f.id
  263. LEFT JOIN feedclass fc ON f.FCLASS = fc.id
  264. WHERE
  265. ft.ENABLE = 1
  266. AND ft.isDelete != 1 `).Query().List()
  267. if err != nil {
  268. logging.Error(err)
  269. return err
  270. }
  271. dataByte, _ := json.Marshal(&dataList)
  272. reqJson := `{
  273. "reqMethod": "PARTY",
  274. "param": {
  275. "code": "1",
  276. "method": "getfeedtempletinfo",
  277. "resultData": %s,
  278. "farmId": %s,
  279. "rowCount": %d,
  280. "errMessage": ""
  281. },
  282. "regCode": "cpt180511",
  283. "command": "3d6e4752",
  284. "apiId": "getCptData"
  285. }`
  286. reqJson = fmt.Sprintf(reqJson, string(dataByte), farmId, len(dataList))
  287. postPush(reqJson, 4, tx, pastureId)
  288. return nil
  289. }
  290. func postPush(data string, msgtype int, tx *xorm.Session, pastureId string) {
  291. url := "http://dev.unidairy.cn:8011/copartner_uploads/"
  292. var jsonStr = []byte(data)
  293. req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
  294. if err != nil {
  295. logs.Error(err)
  296. // return nil
  297. }
  298. // req.SetBasicAuth("zinf_TMR", "zinf_TMR@1234") 测试线密码
  299. // req.SetBasicAuth("zinf_TMR", "$C2Cj$\\Uv#")
  300. req.Header.Set("Content-Type", "application/json")
  301. client := &http.Client{}
  302. resp, err := client.Do(req)
  303. if err != nil {
  304. logs.Error(err)
  305. return
  306. }
  307. defer resp.Body.Close()
  308. body, _ := ioutil.ReadAll(resp.Body)
  309. fmt.Println(string(body))
  310. fmt.Println("11111111111111", time.Now())
  311. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  312. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
  313. }