sap.go 27 KB

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