package sap import ( "bytes" "context" "encoding/json" "fmt" "io/ioutil" "net/http" "time" "tmr-watch/conf/setting" "tmr-watch/http/handle/restful" "tmr-watch/pkg/app" "tmr-watch/pkg/e" "github.com/astaxie/beego/logs" "github.com/gin-gonic/gin" ) func SyncSapBar(ctx context.Context) { tx := restful.Engine.NewSession() defer tx.Close() year := time.Now().Year() data := `{ "DEST": { "DEST_ID": "TMRWATCH", "BUSS_TP": "CO005" }, "DATA": { "DIDAT": "%d0101", "DITIM": "%d1231", "WERKS": "M001", "TCHSNO": [ ], "TFCWTS": [ ], "TCHSTY": [ ] } }` url := "http://192.168.61.117/SAPP0/Feed/CO005/QueryCowsheds" data = fmt.Sprintf(data, year, year) respmap := postPush(url, data) if respmap != nil { if _, ok := respmap.(map[string]interface{})["ZTCO_001"]; ok { for _, item := range respmap.(map[string]interface{})["ZTCO_001"].([]interface{}) { barMap := item.(map[string]interface{}) _, err := tx.SQL(` insert into bar(pastureid,bcode,bname,sort,sapid,class,classid,scopeherd,scopeherdid) values(?,?,?,(select max(sort)+1 from bar b where b.pastureid = ? ),?,( select name from barclass where pastureid = ? and code = ?),( select id from barclass where pastureid = ? and code = ?),(select name from scopeherd where code = ? ), (select id from scopeherd where code = ? )) ON DUPLICATE KEY UPDATE bname = ? ,bcode = ? `, 1, barMap["CHSTX"], barMap["CHSTX"], 1, barMap["CHSNO"], 1, barMap["CHSTX"], 1, barMap["CHSTX"], barMap["FCWTS"], barMap["FCWTS"], barMap["CHSTX"], barMap["CHSTX"]).Execute() if err != nil { logs.Error(err) return } } } } } type udPastureInfo struct { Token string `xorm:"token"` Pastureid string `xorm:"pastureid"` } func MaterialOutbound(c *gin.Context) { appG := app.Gin{C: c} tx := restful.Engine.NewSession() defer tx.Close() pastureinfo := new(udPastureInfo) err := tx.SQL(`select column_default as pastureid from information_schema.COLUMNS WHERE table_name = 'recweight' AND table_schema = ? AND column_name = 'pastureid'`, setting.DatabaseSetting.Name).GetFirst(pastureinfo).Error if err != nil { logs.Error(err) return } dataList, err := tx.SQL(` select d1.fname as MAKTX,d2.fname as CHSTX, round( d1.actualweightminus * (d2.lweight / (select sum(lweight) from downloadplandtl2 where pid = d2.pid )),2) as MENGE,b.sapid ,bc.code as FCWTS from downloadedplan d JOIN downloadplandtl2 d2 on d2.pid in ( select id from downloadedplan where pid = d.pid and mydate = d.mydate) and d2.type = 0 join downloadplandtl1 d1 on d1.pid = d.id -- join feed f on f.feedcode = d1.feedcode and f.pastureid = d.pastureid join bar b on b.id = d2.fbarid and b.pastureid = d.pastureid left join barclass bc on bc.id = b.classid where d.mydate = ? and d.lpplantype <> 2 and d.pastureid = ? order by d.id `, "2022-06-24", pastureinfo.Pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } data := `{ "DEST": { "DEST_ID": "DFEED", "BUSS_TP": "MM016" }, "DATA": { "BUDAT": "%s", "WERKS": "%s", "ITEMS": %s } }` databyte, _ := json.Marshal(dataList) data = fmt.Sprintf(data, time.Now().Format("20060102"), "0001", string(databyte)) url := "http://192.168.61.117/SAPP0/Feed/MM016/StockOut" postPush(url, data) appG.Response(http.StatusOK, e.SUCCESS, true) } func postPush(url, data string) interface{} { var jsonStr = []byte(data) req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) if err != nil { logs.Error(err) return nil } req.SetBasicAuth("zinf_TMR", "zinf_TMR@1234") req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { logs.Error(err) return nil } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) var respData map[string]interface{} err = json.Unmarshal(body, &respData) if err != nil { logs.Error(err) return nil } if _, ok := respData["DATA"]; ok { return respData["DATA"] } else { return nil } } func SyncSapFeed(ctx context.Context) { tx := restful.Engine.NewSession() defer tx.Close() data := `{ "DEST": { "DEST_ID": "TMRWATCH", "BUSS_TP": "MM002" }, "DATA": { "BUDAT_B": "20220819", "BUDAT_E": "20220819", "TMTART": { "MATNR": "XD01" }, "TMATKL": [] } }` url := "http://192.168.61.117/SAPP0/Common/MM002/QueryMaterial/" respmap := postPush(url, data) for _, item := range respmap.(map[string]interface{})["TMARA"].([]interface{}) { sapMap := item.(map[string]interface{}) fmt.Println(sapMap) _, err := tx.SQL(` replace into feed_sap(MATNR,MTART,MATKL,MAKTX,MEINS,UMREZ,MEINH,UMREN,ZMINC,ZGUIG,LVORM,LAEDA)values(?,?,?,?,?,?,?,?,?,?,?,?)`, sapMap["MATNR"], sapMap["MTART"], sapMap["MATKL"], sapMap["MAKTX"], sapMap["MEINS"], sapMap["UMREZ"], sapMap["MEINH"], sapMap["UMREN"], sapMap["ZMINC"], sapMap["ZGUIG"], sapMap["LVORM"], sapMap["LAEDA"]).Execute() if err != nil { logs.Error(err) return } } }