package util import ( "bytes" "encoding/xml" "fmt" "github.com/pkg/errors" "io/ioutil" "net/http" "strings" ) type EASLoginInfo struct{ UserName string `json:"userName"` Password string `json:"password"` SlnName string `json:"slnName"` DcName string `json:"dcName"` Language string `json:"language"` DbType string `json:"dbType"` Url string `json:"dbType"` } var( LoginStr = ` userName? password? slnName? dcName? language? dbType? ` LogoutStr = ` userName? slnName? dcName? language? ` InsertPartsStr = ` SessionId? strJson? ` InsertPartsuselaidStr = ` SessionId? billType? strJson? 1 ` ) var user EASLoginInfo // 备件 type Parts struct{ MaterialNumber string `json:"materialNumber"` MaterialName string `json:"materialName"` MaterialGroup string `json:"materialGroup"` Model string `json:"model"` BaseUnit string `json:"baseUnit"` Status int `json:"status"` //kaClass int32 `json:"kaClass"` //planningMode int32 `json:"planningMode"` } func eastest(){ sessionid,_ := EASWebServiceLogin() //EASWebServicInsertParts(sessionid,"{}") EASWebServicInsertPartsuselaid(sessionid,"{}","007") //EASWebServiceLogout() } func InitWebS(use,pass,url string){ user.Password = pass user.UserName = use user.DbType = "1" user.DcName = "MASM" user.Language = "L2" user.SlnName = "eas" user.Url = url } type Response struct { Body rspBody `xml:"Body" json:"body"` } type rspBody struct { Record []rqRecord `xml:"multiRef" json:"multiRef"` SynMaterialResponse SMReturn `xml:"synMaterialResponse" json:"SynMaterialResponse"` ImportBillResponse ImportBillResponse `xml:"importBillResponse" json:"importBillResponse"` } type ImportBillResponse struct { ImportBillReturn string `xml:"importBillReturn" json:"importBillReturn"` } type SMReturn struct { SynMaterialReturn string `xml:"synMaterialReturn" json:"synMaterialReturn"` } type rqRecord struct { SessionId string `xml:"sessionId" json:"sessionId"` } func EASWebServiceLogin()(string,error){ client := &http.Client{} resstr := ReplaceStrWebSevice("login",user.UserName,user.Password,user.SlnName,user.DcName,user.Language,user.DbType,"","","") body := bytes.NewBuffer([]byte(resstr)) req, err := http.NewRequest("POST", user.Url +"/ormrpc/services/EASLogin?wsdl", body, ) req.Header.Set("Content-Type", "text/xml") req.Header.Set("SOAPAction", "application/soap+xml") if err != nil { return "",err } resp, err := client.Do(req) if err != nil { fmt.Println(err) return "",err } defer resp.Body.Close() result_body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return "",err } v := Response {} err = xml.Unmarshal([]byte(string(result_body)), &v) println(string(result_body)) if err != nil { fmt.Println(err.Error()) } if len(v.Body.Record)>0{ return v.Body.Record[0].SessionId,nil } return "",err } func EASWebServiceLogout()error{ client := &http.Client{} resstr := ReplaceStrWebSevice("logout",user.UserName,"",user.SlnName,user.DcName,user.Language,"","","","") body := bytes.NewBuffer([]byte(resstr)) req, err := http.NewRequest("POST", user.Url +"/ormrpc/services/EASLogin?wsdl", body, ) req.Header.Set("Content-Type", "text/xml") req.Header.Set("SOAPAction", "application/soap+xml") if err != nil { // handle error } resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() _, err = ioutil.ReadAll(resp.Body) if err != nil { return err } return nil //fmt.Println(string(result_body)) } func EASWebServicInsertParts(SessionId string,parts Parts)error{ client := &http.Client{} soapencJson,err := json.Marshal(parts) if err != nil { return err } println(string(soapencJson)) resstr := ReplaceStrWebSevice("InsertParts","","","","","","",SessionId,string(soapencJson),"") body := bytes.NewBuffer([]byte(resstr)) req, err := http.NewRequest("POST", user.Url +"/ormrpc/services/WSSynMasterDataFacade?wsdl", body, ) req.Header.Set("Content-Type", "text/xml") req.Header.Set("SOAPAction", "application/soap+xml") if err != nil { // handle error } resp, err := client.Do(req) if err != nil { fmt.Println(err) return err } defer resp.Body.Close() result_body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return err } v := Response {} err = xml.Unmarshal([]byte(string(result_body)), &v) if err != nil { fmt.Println(err.Error()) } resmap := make(map[string]string,0) err = json.Unmarshal([]byte(v.Body.SynMaterialResponse.SynMaterialReturn),&resmap) if resmap["success"] == "0"{ fmt.Println("resmap",resmap["message"]) return errors.New(resmap["success"]) } fmt.Println("resmap success",resmap["message"],resmap["success"]) return err } func EASWebServicInsertPartsuselaid(SessionId,strJson,billType string){ //billType采购入库单:006 销售出库单:007 其他入库单:008 其他出库单:009 领料出库单:100 生产入库单:101 client := &http.Client{} resstr := ReplaceStrWebSevice("InsertPartsuselaidStr","","","","","","",SessionId,strJson,billType) body := bytes.NewBuffer([]byte(resstr)) req, err := http.NewRequest("POST", user.Url +"/ormrpc/services/WSSCMWebServiceFacade?wsdl", body, ) req.Header.Set("Content-Type", "text/xml") req.Header.Set("SOAPAction", "application/soap+xml") if err != nil { // handle error } resp, err := client.Do(req) if err != nil { fmt.Println(err) return } defer resp.Body.Close() result_body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return } v := Response {} err = xml.Unmarshal([]byte(string(result_body)), &v) if err != nil { fmt.Println(err.Error()) } resmap := make(map[string]interface{},0) if v.Body.ImportBillResponse.ImportBillReturn != "" { err = json.Unmarshal([]byte(v.Body.ImportBillResponse.ImportBillReturn),&resmap) fmt.Println(v.Body.ImportBillResponse.ImportBillReturn) fmt.Println(len(resmap["billErrors"].([]interface {}))) if resmap["status"] == "2"{ fmt.Println(resmap["msg"]) } } } func ReplaceStrWebSevice(typeIn,userName,password,slnName,dcName,language,dbType,SessionId,strJson,billType string)string{ res := "" switch typeIn { case "login": res = LoginStr res = strings.ReplaceAll(res,"userName?",userName) res = strings.ReplaceAll(res,"password?",password) res = strings.ReplaceAll(res,"slnName?",slnName) res = strings.ReplaceAll(res,"dcName?",dcName) res = strings.ReplaceAll(res,"language?",language) res = strings.ReplaceAll(res,"dbType?",dbType) case "logout": res = LogoutStr res = strings.ReplaceAll(res,"userName?",userName) res = strings.ReplaceAll(res,"slnName?",slnName) res = strings.ReplaceAll(res,"dcName?",dcName) res = strings.ReplaceAll(res,"language?",language) case "InsertParts": res = InsertPartsStr res = strings.ReplaceAll(res,"SessionId?",SessionId) res = strings.ReplaceAll(res,"strJson?",strJson) case "InsertPartsuselaidStr": res = InsertPartsuselaidStr res = strings.ReplaceAll(res,"SessionId?",SessionId) res = strings.ReplaceAll(res,"strJson?",strJson) res = strings.ReplaceAll(res,"billType?",billType) } return res }