sap.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. package sap
  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/app"
  12. "tmr-watch/pkg/e"
  13. "github.com/Anderson-Lu/gofasion/gofasion"
  14. "github.com/astaxie/beego/logs"
  15. "github.com/gin-gonic/gin"
  16. "github.com/xormplus/xorm"
  17. )
  18. func SyncMaterialOutbound() error {
  19. tx := restful.Engine.NewSession()
  20. defer tx.Close()
  21. pastureinfo := new(udPastureInfo)
  22. err := tx.SQL(`select column_default as pastureid from information_schema.COLUMNS
  23. WHERE table_name = 'recweight' AND table_schema = ? AND column_name = 'pastureid'`, setting.DatabaseSetting.Name).GetFirst(pastureinfo).Error
  24. if err != nil {
  25. logs.Error(err)
  26. return err
  27. }
  28. materialOutbound(pastureinfo.Pastureid, time.Now().AddDate(0, 0, -1).Format("2006-01-02"))
  29. return nil
  30. }
  31. func SyncSurplusOutbound() error {
  32. tx := restful.Engine.NewSession()
  33. defer tx.Close()
  34. pastureinfo := new(udPastureInfo)
  35. err := tx.SQL(`select column_default as pastureid from information_schema.COLUMNS
  36. WHERE table_name = 'recweight' AND table_schema = ? AND column_name = 'pastureid'`, setting.DatabaseSetting.Name).GetFirst(pastureinfo).Error
  37. if err != nil {
  38. logs.Error(err)
  39. return err
  40. }
  41. surplusOutbound(pastureinfo.Pastureid, time.Now().Format("2006-01-02"))
  42. return nil
  43. }
  44. func SyncSapBar(c *gin.Context) {
  45. appG := app.Gin{C: c}
  46. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  47. fsion := gofasion.NewFasion(string(dataByte))
  48. start := fsion.Get("startTime").ValueStr()
  49. end := fsion.Get("endTime").ValueStr()
  50. pastureId := fsion.Get("pastureId").ValueStr()
  51. tx := restful.Engine.NewSession()
  52. defer tx.Close()
  53. pastureinfo := new(udPastureInfo)
  54. err := tx.SQL(`select * from pasture where pastureid = ?`, pastureId).GetFirst(pastureinfo).Error
  55. if err != nil {
  56. logs.Error(err)
  57. return
  58. }
  59. // year := time.Now().Year()
  60. data := `{
  61. "DATA": {
  62. "DIDAT": "%s",
  63. "DITIM": "%s",
  64. "WERKS": "%s"
  65. },
  66. "DEST": {
  67. "DEST_ID": "TMRWATCH",
  68. "BUSS_TP": "CO005"
  69. }
  70. }`
  71. startTime, _ := time.ParseInLocation("2006-01-02", start, time.Local)
  72. endTime, _ := time.ParseInLocation("2006-01-02", end, time.Local)
  73. url := "http://192.168.61.117/SAPP0/Feed/CO005/QueryCowsheds"
  74. data = fmt.Sprintf(data, startTime.Format("20060102"), endTime.Format("20060102"), pastureinfo.Werks)
  75. respmap, _ := postPush(url, data, 3, tx, pastureId)
  76. if respmap != nil {
  77. if _, ok := respmap.(map[string]interface{})["ZTCO_001"]; ok {
  78. for _, item := range respmap.(map[string]interface{})["ZTCO_001"].([]interface{}) {
  79. barMap := item.(map[string]interface{})
  80. _, err := tx.SQL(` insert into bar(pastureid,bcode,bname,sort,class,classcode,cattle,cattlecode,sapcode)
  81. values(?,?,?,(select max(sort)+1 from bar b where b.pastureid = ? ),
  82. (select distName from dist where distCode = ? and distType = '牛舍类型' ),?,
  83. (select distName from dist where distCode = ? and distType = '牛群类别'),?,?)
  84. ON DUPLICATE KEY UPDATE bname = ? ,
  85. class = (select distName from dist where distCode = ? and distType = '牛舍类型' ) ,classcode = ?,
  86. cattle = (select distName from dist where distCode = ? and distType = '牛群类别' ) ,cattlecode = ?
  87. `,
  88. pastureId, barMap["CHSNO"], fmt.Sprintf("%v_sap", barMap["CHSTX"]), pastureId, barMap["CHSTY"], barMap["CHSTY"],
  89. barMap["FCWTS"], barMap["FCWTS"], barMap["CHSNO"],
  90. fmt.Sprintf("%v_sap", barMap["CHSTX"]), barMap["CHSTY"], barMap["CHSTY"], barMap["FCWTS"], barMap["FCWTS"]).Execute()
  91. if err != nil {
  92. logs.Error(err)
  93. return
  94. }
  95. }
  96. }
  97. }
  98. appG.Response(http.StatusOK, e.SUCCESS, true)
  99. }
  100. type udPastureInfo struct {
  101. Werks string `xorm:"werks"`
  102. Pastureid string `xorm:"pastureid"`
  103. }
  104. func MaterialOutbound(c *gin.Context) {
  105. appG := app.Gin{C: c}
  106. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  107. fsion := gofasion.NewFasion(string(dataByte))
  108. pastureId := fsion.Get("pastureid").ValueStr()
  109. date := fsion.Get("date").ValueStr()
  110. materialOutbound(pastureId, date)
  111. appG.Response(http.StatusOK, e.SUCCESS, true)
  112. }
  113. func SurplusOutbound(c *gin.Context) {
  114. appG := app.Gin{C: c}
  115. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  116. fsion := gofasion.NewFasion(string(dataByte))
  117. pastureId := fsion.Get("pastureid").ValueStr()
  118. date := fsion.Get("date").ValueStr()
  119. surplusOutbound(pastureId, date)
  120. appG.Response(http.StatusOK, e.SUCCESS, true)
  121. }
  122. func materialOutbound(pastureId, date string) error {
  123. tx := restful.Engine.NewSession()
  124. defer tx.Close()
  125. pastureinfo := new(udPastureInfo)
  126. err := tx.SQL(`select * from pasture where pastureid = ?`, pastureId).GetFirst(pastureinfo).Error
  127. if err != nil {
  128. logs.Error(err)
  129. return err
  130. }
  131. dataList, err := tx.SQL(` SELECT
  132. tem.sort ZEILE,
  133. tem.feedname MAKTX,
  134. ifnull(ROUND(if(tem.lweight<0,0,tem.lweight),(select inforvalue from sysopt where inforname="decimalPlaces" and pastureid =? )),0)lweight,
  135. ifnull(ROUND(tem.actualweightminus,(select inforvalue from sysopt where inforname="decimalPlaces" and pastureid = ?)),0) MENGE
  136. ,tem.bname CHSTX,tem.sapcode CHSNO,tem.cattle FCWTS,tem.MATNR,tem.sapGoods LGORT
  137. FROM (
  138. (SELECT
  139. d2.type,
  140. d2.fname,IFNULL(ftd.fname,d1.fname ) feedname,
  141. SUM(
  142. 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)*
  143. d1.lweight*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetaildate ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid and ftd2.date= ftp.date ))
  144. )lweight,
  145. d1.sort sort,
  146. SUM(
  147. 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 ,
  148. 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)*
  149. d1.actualweightminus*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetaildate ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid and ftd2.date= ftp.date )),
  150. 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)*
  151. d1.actualweightminus*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetail ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid ))
  152. )
  153. )actualweightminus,b.sort as d2sort,b.bname,b.sapcode, b.cattlecode ,f.sapCode MATNR,f.sapGoods ,(select cattle from feedtemplet where id = d.tempid) cattle
  154. FROM
  155. downloadedplan d
  156. JOIN downloadplandtl2 d2
  157. ON d.pastureid = d2.pastureid AND d2.pid = d.id and d2.type = 0
  158. JOIN downloadplandtl1 d1
  159. ON d.pastureid = d1.pastureid AND d1.flpid = d2.flpid AND d1.type = 0 AND d2.date = d1.date
  160. LEFT JOIN ftdetaildate ftd ON ftd.pastureid =d1.pastureid AND ftd.ftid = d1.fid AND d1.feedcode = '-1' AND ftd.date = d.mydate AND ftd.version = d.tversion
  161. left join bar b on b.pastureid =d1.pastureid and b.id = d2.fbarid
  162. left join feed f on f.id = d1.fid
  163. left join feedtempletdate ftp on ftp.id = d.tempid AND ftp.date = ftd.date
  164. WHERE d.pastureid = ? AND d.mydate = ? and d1.feedcode != -1 and b.sapCode is not null and f.sapCode is not null
  165. GROUP BY d2.fbarid,IFNULL(ftd.fname,d1.fname )
  166. HAVING d2.type = 0 order by b.sort,d2.fbarid)
  167. UNION
  168. (SELECT
  169. d2.type,
  170. d2.fname,IFNULL(ftd.fname,d1.fname ) feedname,
  171. SUM(
  172. 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)*
  173. d1.lweight*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetaildate ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid and ftd2.date= ftd1.date ))
  174. )lweight,
  175. d1.sort sort,
  176. SUM(
  177. 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 ,
  178. 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)*
  179. d1.actualweightminus*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetail ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid )),
  180. 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)*
  181. 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 = ftd1.version and ftd1.id = ftd2.ftid ))
  182. )
  183. )actualweightminus,b.sort as d2sort,b.bname,b.sapcode, b.cattlecode ,f.sapCode MATNR,f.sapGoods ,(select cattle from feedtemplet where id = d.tempid) cattle
  184. FROM
  185. downloadedplan d
  186. JOIN downloadplandtl2 d2
  187. ON d.pastureid = d2.pastureid AND d2.pid = d.id and d2.type = 0
  188. JOIN downloadplandtl1 d1
  189. ON d.pastureid = d1.pastureid AND d1.flpid = d2.flpid AND d1.type = 0 AND d2.date = d1.date
  190. left join bar b on b.pastureid =d1.pastureid and b.id = d2.fbarid
  191. left join feedtempletdate ftd1 on d1.feedcode = '-1' and ftd1.date = d1.date and ftd1.id = d1.fid
  192. LEFT JOIN ftdetaildate ftd ON ftd.pastureid =d1.pastureid AND ftd.ftid = ftd1.id AND d1.feedcode = '-1' AND ftd.date =d1.date AND ftd.version = ftd1.version
  193. left join feed f on f.id = ftd.fid
  194. WHERE d.pastureid = ? AND d.mydate = ? and d1.feedcode = -1 and b.sapCode is not null and f.sapCode is not null
  195. GROUP BY d2.fbarid,IFNULL(ftd.fname,d1.fname )
  196. HAVING d2.type = 0 order by b.sort,d2.fbarid)
  197. ) tem
  198. ORDER BY tem.d2sort,tem.feedname `, pastureId, pastureId, pastureId, date, pastureId, date).Query().List()
  199. if err != nil {
  200. logs.Error(err)
  201. return err
  202. }
  203. data := `{
  204. "DEST": {
  205. "DEST_ID": "DFEED",
  206. "BUSS_TP": "MM016"
  207. },
  208. "DATA": {
  209. "BUDAT": "%s",
  210. "WERKS": "%s",
  211. "ITEMS": %s
  212. }
  213. }`
  214. databyte, _ := json.Marshal(dataList)
  215. now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  216. data = fmt.Sprintf(data, now.Format("20060102"), pastureinfo.Werks, string(databyte))
  217. url := "http://192.168.61.117/SAPP0/Feed/MM016/StockOut"
  218. postPush(url, data, 0, tx, pastureId)
  219. return nil
  220. }
  221. func postPush(url, data string, msgtype int, tx *xorm.Session, pastureId string) (interface{}, bool) {
  222. var jsonStr = []byte(data)
  223. req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
  224. if err != nil {
  225. logs.Error(err)
  226. // return nil
  227. }
  228. // req.SetBasicAuth("zinf_TMR", "zinf_TMR@1234") 测试线密码
  229. req.SetBasicAuth("zinf_TMR", "$C2Cj$\\Uv#")
  230. req.Header.Set("Content-Type", "application/json")
  231. client := &http.Client{}
  232. resp, err := client.Do(req)
  233. if err != nil {
  234. logs.Error(err)
  235. // return nil
  236. }
  237. fmt.Println(resp.Body)
  238. defer resp.Body.Close()
  239. body, _ := ioutil.ReadAll(resp.Body)
  240. var respData map[string]interface{}
  241. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  242. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
  243. err = json.Unmarshal(body, &respData)
  244. if err != nil {
  245. logs.Error(err)
  246. // return nil
  247. }
  248. if _, ok := respData["DATA"]; ok {
  249. if msgtype == 3 {
  250. if _, ok := respData["ZTCO_001"]; !ok {
  251. return respData["DATA"], false
  252. }
  253. return respData["DATA"], true
  254. }
  255. if _, ok := respData["DATA"]; !ok {
  256. return respData["DATA"], false
  257. }
  258. return respData["DATA"], true
  259. } else {
  260. return respData["DATA"], false
  261. }
  262. }
  263. func SyncSapFeed(c *gin.Context) {
  264. appG := app.Gin{C: c}
  265. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  266. fsion := gofasion.NewFasion(string(dataByte))
  267. start := fsion.Get("startTime").ValueStr()
  268. end := fsion.Get("endTime").ValueStr()
  269. mtart := fsion.Get("mtart").ValueStr()
  270. pastureId := fsion.Get("pastureId").ValueStr()
  271. tx := restful.Engine.NewSession()
  272. defer tx.Close()
  273. data := `{
  274. "DEST": {
  275. "DEST_ID": "TMRWATCH",
  276. "BUSS_TP": "MM002"
  277. },
  278. "DATA": {
  279. "BUDAT_B": "%s",
  280. "BUDAT_E": "%s",
  281. "TMTART": {
  282. "MTART": "%s"
  283. },
  284. "TMATKL": []
  285. }
  286. }`
  287. startTime, _ := time.ParseInLocation("2006-01-02", start, time.Local)
  288. endTime, _ := time.ParseInLocation("2006-01-02", end, time.Local)
  289. data = fmt.Sprintf(data, startTime.Format("20060102"), endTime.Format("20060102"), mtart)
  290. // "https://app.modernfarming.cn:7443/sap/Common/MM002/QueryMaterial/"
  291. // http://192.168.61.117/SAPP0/Common/MM002/QueryMaterial
  292. url := "http://192.168.61.117/SAPP0/Common/MM002/QueryMaterial"
  293. respmap, success := postPush(url, data, 2, tx, pastureId)
  294. // var a interface{} = nil
  295. fmt.Println(respmap, success)
  296. if success == false {
  297. appG.Response(http.StatusOK, e.SUCCESS, true)
  298. } else {
  299. for _, item := range respmap.(map[string]interface{})["TMARA"].([]interface{}) {
  300. sapMap := item.(map[string]interface{})
  301. // fmt.Println(item)
  302. _, err := tx.SQL(` replace into feed_sap(MATNR,MTART,MATKL,MAKTX,MEINS,UMREZ,MEINH,UMREN,ZMINC,ZGUIG,LVORM,LAEDA)values(?,?,?,?,?,?,?,?,?,?,?,?)`,
  303. sapMap["MATNR"], sapMap["MTART"], sapMap["MATKL"], sapMap["MAKTX"], sapMap["MEINS"], sapMap["UMREZ"], sapMap["MEINH"],
  304. sapMap["UMREN"], sapMap["ZMINC"], sapMap["ZGUIG"], sapMap["LVORM"], sapMap["LAEDA"]).Execute()
  305. if err != nil {
  306. logs.Error(err)
  307. return
  308. }
  309. }
  310. appG.Response(http.StatusOK, e.SUCCESS, true)
  311. }
  312. // return
  313. }
  314. func surplusOutbound(pastureId, date string) error {
  315. tx := restful.Engine.NewSession()
  316. defer tx.Close()
  317. pastureinfo := new(udPastureInfo)
  318. err := tx.SQL(`select * from pasture where pastureid = ?`, pastureId).GetFirst(pastureinfo).Error
  319. if err != nil {
  320. logs.Error(err)
  321. return err
  322. }
  323. now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  324. dataList, err := tx.SQL(`SELECT
  325. tem.sort ZEILE,
  326. tem.feedname MAKTX,
  327. ifnull(ROUND(if(tem.lweight<0,0,tem.lweight),(select inforvalue from sysopt where inforname="decimalPlaces" and pastureid =? )),0)lweight,
  328. ifnull(ROUND(tem.actualweightminus,(select inforvalue from sysopt where inforname="decimalPlaces" and pastureid = ?)),0) MENGE
  329. ,tem.bname CHSTX,tem.sapcode CHSNO,tem.cattle FCWTS,(select inforvalue from sysopt where inforname="excess" and pastureid = ?) MATNR,tem.sapGoods LGORT,
  330. ? WERKS , ? BUDAT
  331. FROM (
  332. (SELECT
  333. d2.type,
  334. d2.fname,IFNULL(ftd.fname,d1.fname ) feedname,
  335. SUM(
  336. 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)*
  337. d1.lweight*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetaildate ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid and ftd2.date= ftp.date ))
  338. )lweight,
  339. d1.sort sort,
  340. SUM(
  341. 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 ,
  342. 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)*
  343. d1.actualweightminus*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetaildate ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid and ftd2.date= ftp.date )),
  344. 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)*
  345. d1.actualweightminus*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetail ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid ))
  346. )
  347. )actualweightminus,b.sort as d2sort,b.bname,b.sapcode, b.cattlecode ,f.sapGoods ,(select cattle from feedtemplet where id = d.tempid) cattle
  348. FROM
  349. downloadedplan d
  350. JOIN downloadplandtl2 d2
  351. ON d.pastureid = d2.pastureid AND d2.pid = d.id and d2.type = 0
  352. JOIN downloadplandtl1 d1
  353. ON d.pastureid = d1.pastureid AND d1.flpid = d2.flpid AND d1.type = 0 AND d2.date = d1.date
  354. LEFT JOIN ftdetaildate ftd ON ftd.pastureid =d1.pastureid AND ftd.ftid = d1.fid AND d1.feedcode = '-1' AND ftd.date = d.mydate AND ftd.version = d.tversion
  355. left join bar b on b.pastureid =d1.pastureid and b.id = d2.fbarid
  356. left join feed f on f.id = d1.fid
  357. left join feedtempletdate ftp on ftp.id = d.tempid AND ftp.date = ftd.date
  358. WHERE d.pastureid = ? AND d.mydate = ? and d1.feedcode != -1 and b.sapCode is not null and d1.fname like concat('%','_剩料','%')
  359. GROUP BY d2.fbarid,IFNULL(ftd.fname,d1.fname )
  360. HAVING d2.type = 0 order by b.sort,d2.fbarid)
  361. UNION
  362. (SELECT
  363. d2.type,
  364. d2.fname,IFNULL(ftd.fname,d1.fname ) feedname,
  365. SUM(
  366. 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)*
  367. d1.lweight*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetaildate ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid and ftd2.date= ftd1.date ))
  368. )lweight,
  369. d1.sort sort,
  370. SUM(
  371. 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 ,
  372. 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)*
  373. d1.actualweightminus*IF(ftd.id IS NULL,1,ftd.fweight/(SELECT SUM(ftd2.fweight) FROM ftdetail ftd2 WHERE ftd2.pastureid =d1.pastureid AND ftd2.ftid = d1.fid )),
  374. 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)*
  375. 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 = ftd1.version and ftd1.id = ftd2.ftid ))
  376. )
  377. )actualweightminus,b.sort as d2sort,b.bname,b.sapcode, b.cattlecode ,f.sapGoods ,(select cattle from feedtemplet where id = d.tempid) cattle
  378. FROM
  379. downloadedplan d
  380. JOIN downloadplandtl2 d2
  381. ON d.pastureid = d2.pastureid AND d2.pid = d.id and d2.type = 0
  382. JOIN downloadplandtl1 d1
  383. ON d.pastureid = d1.pastureid AND d1.flpid = d2.flpid AND d1.type = 0 AND d2.date = d1.date
  384. left join bar b on b.pastureid =d1.pastureid and b.id = d2.fbarid
  385. left join feedtempletdate ftd1 on d1.feedcode = '-1' and ftd1.date = d1.date and ftd1.id = d1.fid
  386. LEFT JOIN ftdetaildate ftd ON ftd.pastureid =d1.pastureid AND ftd.ftid = ftd1.id AND d1.feedcode = '-1' AND ftd.date =d1.date AND ftd.version = ftd1.version
  387. left join feed f on f.id = ftd.fid
  388. WHERE d.pastureid = ? AND d.mydate = ? and d1.feedcode = -1 and b.sapCode is not null and d1.fname like concat('%','_剩料','%')
  389. GROUP BY d2.fbarid,IFNULL(ftd.fname,d1.fname )
  390. HAVING d2.type = 0 order by b.sort,d2.fbarid)
  391. ) tem
  392. ORDER BY tem.d2sort,tem.feedname `, pastureId, pastureId, pastureId, pastureinfo.Werks, now.Format("20060102"), pastureId, date, pastureId, date).Query().List()
  393. if err != nil {
  394. logs.Error(err)
  395. return err
  396. }
  397. data := `{
  398. "DEST": {
  399. "DEST_ID": "DFEED",
  400. "BUSS_TP": "MM016"
  401. },
  402. "DATA": {
  403. "BUDAT": "%s",
  404. "WERKS": "%s",
  405. "ITEMS": %s
  406. }
  407. }`
  408. databyte, _ := json.Marshal(dataList)
  409. data = fmt.Sprintf(data, now.Format("20060102"), pastureinfo.Werks, string(databyte))
  410. url := "https://app.modernfarming.cn:7443/sap/QAS/Feed/MM032/LeftoverEntry"
  411. postPush(url, data, 0, tx, pastureId)
  412. return nil
  413. }