sap.go 19 KB

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