sap.go 23 KB

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