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.feedname
  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(&dataList)
  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. if newWeight < 0 {
  279. wasteUse.Weight = wasteUse.Weight - data.MENGE
  280. data.MENGE = 0
  281. } else {
  282. data.MENGE = newWeight
  283. wasteUse.Weight = 0
  284. }
  285. }
  286. if wasteUse.Weight <= 0 {
  287. break
  288. }
  289. }
  290. }
  291. for _, w := range wasteUseDataList {
  292. dataList = append(dataList, w)
  293. }
  294. data := `{
  295. "DEST": {
  296. "DEST_ID": "TMRWATCH",
  297. "BUSS_TP": "MM016"
  298. },
  299. "DATA": {
  300. "BUDAT": "%s",
  301. "WERKS": "%s",
  302. "ITEMS": %s
  303. }
  304. }`
  305. databyte, _ := json.Marshal(dataList)
  306. now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  307. data = fmt.Sprintf(data, now.Format("20060102"), pastureinfo.Werks, string(databyte))
  308. url := "http://192.168.61.117/SAPP0/Feed/MM016/StockOut"
  309. postPush(url, data, 0, tx, pastureId)
  310. return nil
  311. }
  312. func postPush(url, data string, msgtype int, tx *xorm.Session, pastureId string) (interface{}, bool) {
  313. var jsonStr = []byte(data)
  314. fmt.Println(string(jsonStr))
  315. req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
  316. if err != nil {
  317. logs.Error(err)
  318. // return nil
  319. }
  320. // req.SetBasicAuth("zinf_TMR", "zinf_TMR@1234") //测试线密码
  321. req.SetBasicAuth("zinf_TMR", "$C2Cj$\\Uv#")
  322. req.Header.Set("Content-Type", "application/json")
  323. client := &http.Client{}
  324. resp, err := client.Do(req)
  325. if err != nil {
  326. logs.Error(err)
  327. // return nil
  328. }
  329. fmt.Println(resp.Body)
  330. defer resp.Body.Close()
  331. body, _ := ioutil.ReadAll(resp.Body)
  332. var respData map[string]interface{}
  333. tx.Exec(` insert into saplog(pastureId,request,response,status,msgtext,createTime,msgtype,dataDate,url)
  334. values(?,?,?,?,?,now(),?,now(),?)`, pastureId, data, string(body), "", "", msgtype, url)
  335. fmt.Println(string(body))
  336. err = json.Unmarshal(body, &respData)
  337. if err != nil {
  338. logs.Error(err)
  339. // return nil
  340. }
  341. if _, ok := respData["DATA"]; ok {
  342. if msgtype == 3 {
  343. if _, ok := respData["ZTCO_001"]; !ok {
  344. return respData["DATA"], false
  345. }
  346. return respData["DATA"], true
  347. }
  348. if _, ok := respData["DATA"]; !ok {
  349. return respData["DATA"], false
  350. }
  351. return respData["DATA"], true
  352. } else {
  353. return respData["DATA"], false
  354. }
  355. }
  356. func SyncSapFeed(c *gin.Context) {
  357. appG := app.Gin{C: c}
  358. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  359. fsion := gofasion.NewFasion(string(dataByte))
  360. start := fsion.Get("startTime").ValueStr()
  361. end := fsion.Get("endTime").ValueStr()
  362. mtart := fsion.Get("mtart").ValueStr()
  363. pastureId := fsion.Get("pastureId").ValueStr()
  364. tx := restful.Engine.NewSession()
  365. defer tx.Close()
  366. data := `{
  367. "DEST": {
  368. "DEST_ID": "TMRWATCH",
  369. "BUSS_TP": "MM002"
  370. },
  371. "DATA": {
  372. "BUDAT_B": "%s",
  373. "BUDAT_E": "%s",
  374. "TMTART": {
  375. "MTART": "%s"
  376. },
  377. "TMATKL": []
  378. }
  379. }`
  380. startTime, _ := time.ParseInLocation("2006-01-02", start, time.Local)
  381. endTime, _ := time.ParseInLocation("2006-01-02", end, time.Local)
  382. data = fmt.Sprintf(data, startTime.Format("20060102"), endTime.Format("20060102"), mtart)
  383. // "https://app.modernfarming.cn:7443/sap/Common/MM002/QueryMaterial/"
  384. // http://192.168.61.117/SAPP0/Common/MM002/QueryMaterial
  385. url := "http://192.168.61.117/SAPP0/Common/MM002/QueryMaterial"
  386. respmap, success := postPush(url, data, 2, tx, pastureId)
  387. // var a interface{} = nil
  388. fmt.Println(respmap, success)
  389. if success == false {
  390. appG.Response(http.StatusOK, e.SUCCESS, true)
  391. } else {
  392. for _, item := range respmap.(map[string]interface{})["TMARA"].([]interface{}) {
  393. sapMap := item.(map[string]interface{})
  394. // fmt.Println(item)
  395. _, err := tx.SQL(` replace into feed_sap(MATNR,MTART,MATKL,MAKTX,MEINS,UMREZ,MEINH,UMREN,ZMINC,ZGUIG,LVORM,LAEDA)values(?,?,?,?,?,?,?,?,?,?,?,?)`,
  396. sapMap["MATNR"], sapMap["MTART"], sapMap["MATKL"], sapMap["MAKTX"], sapMap["MEINS"], sapMap["UMREZ"], sapMap["MEINH"],
  397. sapMap["UMREN"], sapMap["ZMINC"], sapMap["ZGUIG"], sapMap["LVORM"], sapMap["LAEDA"]).Execute()
  398. if err != nil {
  399. logs.Error(err)
  400. return
  401. }
  402. }
  403. appG.Response(http.StatusOK, e.SUCCESS, true)
  404. }
  405. // return
  406. }
  407. func surplusOutbound(pastureId, date string) error {
  408. tx := restful.Engine.NewSession()
  409. defer tx.Close()
  410. pastureinfo := new(udPastureInfo)
  411. err := tx.SQL(`select * from pasture where pastureid = ?`, pastureId).GetFirst(pastureinfo).Error
  412. if err != nil {
  413. logs.Error(err)
  414. return err
  415. }
  416. now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  417. dataList, err := tx.SQL(` SELECT
  418. tem.sort ZEILE,
  419. tem.feedname MAKTX,
  420. sum(ifnull(ROUND(if(tem.lweight<0,0,tem.lweight),(select inforvalue from sysopt where inforname="decimalPlaces" and pastureid =? )),0))lweight,
  421. sum(ifnull(ROUND(tem.actualweightminus,(select inforvalue from sysopt where inforname="decimalPlaces" and pastureid = ?)),0)) MENGE
  422. ,tem.bname CHSTX,tem.sapcode CHSNO,tem.cattle FCWTS,(select inforvalue from sysopt where inforname="excess" and pastureid = ?) MATNR,tem.sapGoods LGORT,
  423. ? WERKS , ? BUDAT
  424. FROM (
  425. (SELECT
  426. d2.type,d2.fbarid,
  427. d2.fname,IFNULL(ftd.fname,d1.fname ) feedname,
  428. SUM(
  429. 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)*
  430. 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 ))
  431. )lweight,
  432. d1.sort sort,
  433. SUM(
  434. 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 ,
  435. 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)*
  436. 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 )),
  437. 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)*
  438. 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 ))
  439. )
  440. )actualweightminus,b.sort as d2sort,b.bname,b.sapcode, b.cattlecode ,f.sapGoods ,(select cattle from feedtemplet where id = d.tempid) cattle
  441. FROM
  442. downloadedplan d
  443. JOIN downloadplandtl2 d2
  444. ON d.pastureid = d2.pastureid AND d2.pid = d.id and d2.type = 0
  445. JOIN downloadplandtl1 d1
  446. ON d.pastureid = d1.pastureid AND d1.flpid = d2.flpid AND d1.type = 0 AND d2.date = d1.date
  447. 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
  448. left join bar b on b.pastureid =d1.pastureid and b.id = d2.fbarid
  449. left join feed f on f.id = d1.fid
  450. left join feedtempletdate ftp on ftp.id = d.tempid AND ftp.date = ftd.date
  451. WHERE d.pastureid = ? AND d.mydate = ? and d1.feedcode != -1 and b.sapCode is not null and d1.fname like concat('%','_剩料','%')
  452. GROUP BY d2.fbarid,IFNULL(ftd.fname,d1.fname )
  453. HAVING d2.type = 0 order by b.sort,d2.fbarid)
  454. UNION
  455. (SELECT
  456. d2.type,d2.fbarid,
  457. d2.fname,IFNULL(ftd.fname,d1.fname ) feedname,
  458. SUM(
  459. 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)*
  460. 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 ))
  461. )lweight,
  462. d1.sort sort,
  463. SUM(
  464. 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 ,
  465. 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)*
  466. 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 )),
  467. 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)*
  468. 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 ))
  469. )
  470. )actualweightminus,b.sort as d2sort,b.bname,b.sapcode, b.cattlecode ,f.sapGoods ,(select cattle from feedtemplet where id = d.tempid) cattle
  471. FROM
  472. downloadedplan d
  473. JOIN downloadplandtl2 d2
  474. ON d.pastureid = d2.pastureid AND d2.pid = d.id and d2.type = 0
  475. JOIN downloadplandtl1 d1
  476. ON d.pastureid = d1.pastureid AND d1.flpid = d2.flpid AND d1.type = 0 AND d2.date = d1.date
  477. left join bar b on b.pastureid =d1.pastureid and b.id = d2.fbarid
  478. left join feedtempletdate ftd1 on d1.feedcode = '-1' and ftd1.date = d1.date and ftd1.id = d1.fid
  479. 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
  480. left join feed f on f.id = ftd.fid
  481. WHERE d.pastureid = ? AND d.mydate = ? and d1.feedcode = -1 and b.sapCode is not null and d1.fname like concat('%','_剩料','%')
  482. GROUP BY d2.fbarid,IFNULL(ftd.fname,d1.fname )
  483. HAVING d2.type = 0 order by b.sort,d2.fbarid)
  484. ) tem
  485. GROUP BY tem.fbarid,tem.feedname
  486. ORDER BY tem.d2sort,tem.feedname `, pastureId, pastureId, pastureId, pastureinfo.Werks, now.Format("20060102"), pastureId, date, pastureId, date).Query().List()
  487. if err != nil {
  488. logs.Error(err)
  489. return err
  490. }
  491. data := `{
  492. "DEST": {
  493. "DEST_ID": "TMRWATCH",
  494. "BUSS_TP": "MM016"
  495. },
  496. "DATA": %s
  497. }`
  498. databyte, _ := json.Marshal(dataList)
  499. data = fmt.Sprintf(data, now.Format("20060102"), pastureinfo.Werks, string(databyte))
  500. url := "https://app.modernfarming.cn:7443/sap/QAS/Feed/MM032/LeftoverEntry"
  501. postPush(url, data, 0, tx, pastureId)
  502. return nil
  503. }
  504. //剩料使用
  505. func Wasteuse(c *gin.Context) {
  506. appG := app.Gin{C: c}
  507. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  508. fsion := gofasion.NewFasion(string(dataByte))
  509. pastureId := fsion.Get("pastureId").ValueStr()
  510. date := fsion.Get("date").ValueStr()
  511. wasteuse(pastureId, date)
  512. appG.Response(http.StatusOK, e.SUCCESS, true)
  513. }
  514. func LeftoverEntry(c *gin.Context) {
  515. appG := app.Gin{C: c}
  516. dataByte, _ := ioutil.ReadAll(c.Request.Body)
  517. fsion := gofasion.NewFasion(string(dataByte))
  518. pastureId := fsion.Get("pastureId").ValueStr()
  519. date := fsion.Get("date").ValueStr()
  520. leftoverEntry(pastureId, date)
  521. appG.Response(http.StatusOK, e.SUCCESS, true)
  522. }
  523. //剩料使用
  524. func wasteuse(pastureId, date string) error {
  525. tx := restful.Engine.NewSession()
  526. defer tx.Close()
  527. pastureinfo := new(udPastureInfo)
  528. err := tx.SQL(`select * from pasture where pastureid = ?`, pastureId).GetFirst(pastureinfo).Error
  529. if err != nil {
  530. logs.Error(err)
  531. return err
  532. }
  533. now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  534. // dataList, err := tx.SQL(`select ftd.cattle FCWTS,
  535. // b.sapCode CHSNO ,b.bname CHSTX, '11.01.01.01.000094' MATNR,'系统剩料' MAKTX,w.weight MENGE,'' MEINS
  536. // from wasteuse w join feedtemplet ftd on ftd.id = w.ftid join bar b on b.id = w.barid
  537. // where w.date = ? and b.pastureid = ? `, date, pastureId).Query().List()
  538. dataList, err := tx.SQL(` SELECT
  539. p.werks WERKS,
  540. DATE_FORMAT( b.date, '%Y%m%d' ) BUDAT,
  541. ft.cattle FCWTS,
  542. bar.sapCode CHSNO,
  543. bar.bname CHSTX,
  544. '11.01.01.01.000094' MATNR,
  545. '系统剩料' MAKTX,
  546. b.weight MENGE ,"KG" MEINS,ztbar.sapCode ZCHSNO,ztbar.bname ZCHSTX
  547. FROM
  548. wasteuse b
  549. JOIN pasture p ON b.pastureid = p.pastureid
  550. JOIN feedpdate fp ON fp.date = b.date
  551. AND fp.barid = b.barid
  552. JOIN bar ON bar.id = b.barid
  553. JOIN feedtemplet ft ON ft.id = fp.ftid
  554. left join bar ztbar on ztbar.id = b.barid
  555. where DATE_FORMAT( b.date, '%Y-%m-%d' ) = ? and b.pastureid = ? `, date, pastureId).Query().List()
  556. if err != nil {
  557. logs.Error(err)
  558. return err
  559. }
  560. data := `{
  561. "DEST": {
  562. "DEST_ID": "TMRWATCH",
  563. "BUSS_TP": "MM016"
  564. },
  565. "DATA": {
  566. "BUDAT": "%s",
  567. "WERKS": "%s",
  568. "ITEMS": %s
  569. }
  570. }`
  571. for i, data := range dataList {
  572. data["ZEILE"] = i
  573. }
  574. databyte, _ := json.Marshal(dataList)
  575. // now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  576. data = fmt.Sprintf(data, now.Format("20060102"), pastureinfo.Werks, string(databyte))
  577. url := "http://192.168.61.117/SAPP0/Feed/MM016/StockOut"
  578. postPush(url, data, 0, tx, pastureId)
  579. return nil
  580. }
  581. func leftoverEntry(pastureId, date string) error {
  582. tx := restful.Engine.NewSession()
  583. defer tx.Close()
  584. pastureinfo := new(udPastureInfo)
  585. err := tx.SQL(`select * from pasture where pastureid = ?`, pastureId).GetFirst(pastureinfo).Error
  586. if err != nil {
  587. logs.Error(err)
  588. return err
  589. }
  590. // now, _ := time.ParseInLocation("2006-01-02", date, time.Local)
  591. dataList, err := tx.SQL(` SELECT
  592. p.werks WERKS,
  593. DATE_FORMAT( b.date, '%Y%m%d' ) BUDAT,
  594. ft.cattle FCWTS,
  595. bar.sapCode CHSNO,
  596. bar.bname CHSTX,
  597. '11.01.01.01.000094' MATNR,
  598. '系统剩料' MAKTX,
  599. b.weight MENGE ,"KG" MEINS,ztbar.sapCode ZCHSNO,ztbar.bname ZCHSTX
  600. FROM
  601. wasteuse b
  602. JOIN pasture p ON b.pastureid = p.pastureid
  603. JOIN feedpdate fp ON fp.date = b.date
  604. AND fp.barid = b.barid
  605. JOIN bar ON bar.id = b.barid
  606. JOIN feedtemplet ft ON ft.id = fp.ftid
  607. left join bar ztbar on ztbar.id = b.barid
  608. where DATE_FORMAT( b.date, '%Y-%m-%d' ) = ? and b.pastureid = ? `, date, pastureId).Query().List()
  609. if err != nil {
  610. logs.Error(err)
  611. return err
  612. }
  613. for i, data := range dataList {
  614. data["ZEILE"] = i
  615. }
  616. data := `{"DEST": {"DEST_ID": "TMRWATCH","BUSS_TP": "MM032"},"DATA": %s} `
  617. databyte, _ := json.Marshal(dataList)
  618. data = fmt.Sprintf(data, string(databyte))
  619. url := "http://192.168.61.117/SAPP0/Feed/MM032/LeftoverEntry"
  620. postPush(url, data, 0, tx, pastureId)
  621. return nil
  622. }