123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500 |
- 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 = `<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:log="http://login.webservice.bos.kingdee.com">
- <soapenv:Header/>
- <soapenv:Body>
- <log:login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <userName xsi:type="xsd:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">userName?</userName>
- <password xsi:type="xsd:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">password?</password>
- <slnName xsi:type="xsd:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">slnName?</slnName>
- <dcName xsi:type="xsd:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">dcName?</dcName>
- <language xsi:type="xsd:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">language?</language>
- <dbType xsi:type="xsd:int">dbType?</dbType>
- </log:login>
- </soapenv:Body>
- </soapenv:Envelope>
- `
- LogoutStr = `<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:log="http://login.webservice.bos.kingdee.com">
- <soapenv:Header/>
- <soapenv:Body>
- <log:logout soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <userName xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">userName?</userName>
- <slnName xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">slnName?</slnName>
- <dcName xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">dcName?</dcName>
- <language xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">language?</language>
- </log:logout>
- </soapenv:Body>
- </soapenv:Envelope>
- `
- InsertPartsStr = `<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.synfacade.modernfarming.eas.kingdee.com">
- <soapenv:Header>
- <ns1:SessionId
- xmlns:ns1="http://login.webservice.bos.kingdee.com">SessionId?
- </ns1:SessionId>
- </soapenv:Header>
- <soapenv:Body>
- <web:synMaterial soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <request xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">strJson?</request>
- </web:synMaterial>
- </soapenv:Body>
- </soapenv:Envelope>
- `
- QureyPartsStr = `<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.synfacade.modernfarming.eas.kingdee.com">
- <soapenv:Header>
- <ns1:SessionId
- xmlns:ns1="http://login.webservice.bos.kingdee.com">SessionId?
- </ns1:SessionId>
- </soapenv:Header>
- <soapenv:Body>
- <web:queryMaterialData soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <request xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">{"number":"strJson?"}</request>
- </web:queryMaterialData>
- </soapenv:Body>
- </soapenv:Envelope>`
- InsertPartsuselaidStr = `<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:app="http://app.ws.scm.eas.kingdee.com">
- <soapenv:Header>
- <ns1:SessionId
- xmlns:ns1="http://login.webservice.bos.kingdee.com">SessionId?
- </ns1:SessionId>
- </soapenv:Header>
- <soapenv:Body>
- <app:importBill soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <billType xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">billType?</billType>
- <billDataJSON xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">strJson?</billDataJSON>
- <billStatus xsi:type="xsd:int">2</billStatus>
- </app:importBill>
- </soapenv:Body>
- </soapenv:Envelope>
- `
- QureyBill = `<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:app="http://app.ws.scm.eas.kingdee.com">
- <soapenv:Header>
- <ns1:SessionId
- xmlns:ns1="http://login.webservice.bos.kingdee.com">SessionId?
- </ns1:SessionId>
- </soapenv:Header>
- <soapenv:Body>
- <app:queryScmBillData soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <billType xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">billType?</billType>
- <request xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">{"number":"strJson?"}</request>
- </app:queryScmBillData>
- </soapenv:Body>
- </soapenv:Envelope>`
- )
- var user EASLoginInfo
- type BillLaid struct { // 销售出库&其它出库 &采购入库 & 其他入库
- BizType BillNumber `json:"bizType"` //业务类型
- BizDate string `json:"bizDate"` //业务日期
- Description string `json:"description"` //摘要
- PaymentType BillNumber `json:"paymentType"` // 付款方式
- TransactionType BillNumber `json:"transactionType"` // 事务类型
- Number string `json:"number"` // 单据编号
- Entry []BillEntry `json:"entry"` //
- StorageOrgUnit BillNumber `json:"storageOrgUnit"` //库存组织
- Supplier BillNumber `json:"supplier"` //供应商
- Currency BillNumber `json:"currency"` // 币别
- }
- type BillNumber struct {
- Number string `json:"number"`
- }
- type BillEntry struct {
- ActualPrice string `json:"actualPrice"` //实际单价
- ActualTaxPrice string `json:"actualTaxPrice"` //实际含税单价
- UnitActualCost string `json:"unitActualCost"` //单位实际成本
- UnitPurchaseCost string `json:"unitPurchaseCost"` //单位采购成本
- TaxPrice string `json:"taxPrice"` //含税单价
- BalanceSupplier BillNumber `json:"balanceSupplier"` //结算供应商
- Price string `json:"price"` //单价
- ActualCost string `json:"actualCost"` //实际成本
- PurchaseCost string `json:"purchaseCost"` //采购成本
- Amount string `json:"amount"` // 金额
- TaxAmount string `json:"taxAmount"` // 价税合计
- ContractNumber string `json:"contractNumber"` // 合同号
- Warehouse BillNumber `json:"warehouse"` // 仓库
- Unit BillNumber `json:"unit"` // 单位
- Material BillNumber `json:"material"` //物料
- Qty string `json:"qty"` //数量
- }
- type BillUse struct { //领料出库&生产入库
- Head BillUseHead `json:"head"`
- Entrys []BillUseEntrys `json:"entrys"`
- }
- type BillUseHead struct {
- BillNumber string `json:"billNumber"` //单据编号
- BizDate string `json:"bizDate"` //业务日期
- BizTypeNumber string `json:"bizTypeNumber"` //业务类型
- TransactionType string `json:"transactionType"` //事务类型
- Department string `json:"department"` //部门
- SupplyStorageOrg string `json:"supplyStorageOrg"` //供方库存组织
- StorageOrg string `json:"storageOrg"` //需方库存组织
- CostCenter string `json:"costCenter"` //成本中心
- Remark string `json:"remark"` //摘要
- Creator string `json:"creator"` //创建者
- }
- type BillUseEntrys struct {
- MaterielNumber string `json:"materielNumber"` // 物料
- Lot string `json:"lot"` //批次
- Amount string `json:"amount"` //数量
- MeteredUnit string `json:"meteredUnit"` //单位
- WareHouse string `json:"wareHouse"` //需方仓库
- Location string `json:"location"` //需方库位
- Picker string `json:"picker"` // 领料员
- EntryRemark string `json:"entryRemark"` //备注
- MasterDepartment string `json:"masterDepartment"` //主制部门
- EntryCostCenter string `json:"entryCostCenter"` //成本中心
- }
- // 备件
- 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 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
- }
- func eastest() {
- sessionid, _ := EASWebServiceLogin()
- //EASWebServicInsertParts(sessionid,"{}")
- EASWebServicInsertPartsuselaid(sessionid, "{}", "007")
- //EASWebServiceLogout()
- }
- 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"`
- QueryMaterialDataResponse QureyParts `xml:"queryMaterialDataResponse" json:"queryMaterialDataResponse"`
- QueryScmBillDataResponse QureyBills `xml:"queryScmBillDataResponse" json:"queryScmBillDataResponse"`
- }
- type ImportBillResponse struct {
- ImportBillReturn string `xml:"importBillReturn" json:"importBillReturn"`
- }
- type QureyParts struct {
- QueryMaterialDataReturn string `xml:"queryMaterialDataReturn" json:"queryMaterialDataReturn"`
- }
- type QureyBills struct {
- QueryScmBillDataReturn string `xml:"queryScmBillDataReturn" json:"queryScmBillDataReturn"`
- }
- 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)
- 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 EASWebServiceQureyParts(SessionId, PartCode string) error {
- client := &http.Client{}
- resstr := ReplaceStrWebSevice("QureyPartsStr", "", "", "", "", "", "", SessionId, PartCode, "")
- body := bytes.NewBuffer([]byte(resstr))
- req, err := http.NewRequest("POST",
- user.Url+"/ormrpc/services/WSReadEASDataFacade?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()
- result_body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return err
- }
- v := Response{}
- err = xml.Unmarshal(result_body, &v)
- if err != nil {
- fmt.Println(err.Error())
- }
- resmap := make(map[string]interface{}, 0)
- err = json.Unmarshal([]byte(v.Body.QueryMaterialDataResponse.QueryMaterialDataReturn), &resmap)
- //fmt.Println("resmap===============", resmap,len(resmap["data"].([]interface{})))
- switch resmap["data"].(type) {
- case []interface{}:
- if resmap["success"] != "1" || len(resmap["data"].([]interface{})) == 0 {
- return errors.New("单据未查询到")
- }
- default:
- return errors.New("单据未查询到")
- }
- return nil
- }
- func EASWebServiceQureyBill(SessionId, BillCode,billType string) error {
- client := &http.Client{}
- resstr := ReplaceStrWebSevice("QureyBill", "", "", "", "", "", "", SessionId, BillCode, billType)
- body := bytes.NewBuffer([]byte(resstr))
- req, err := http.NewRequest("POST",
- user.Url+"/ormrpc/services/WSReadEASDataFacade?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 {
- return err
- }
- defer resp.Body.Close()
- result_body, err := ioutil.ReadAll(resp.Body)
- fmt.Println(string(result_body))
- if err != nil {
- fmt.Println(err)
- return err
- }
- v := Response{}
- err = xml.Unmarshal(result_body, &v)
- if err != nil {
- fmt.Println(err.Error())
- }
- resmap := make(map[string]interface{}, 0)
- err = json.Unmarshal([]byte(v.Body.QueryScmBillDataResponse.QueryScmBillDataReturn), &resmap)
- //fmt.Println("resmap===============", resmap,len(resmap["data"].([]interface{})))
- switch resmap["data"].(type) {
- case []interface{}:
- if resmap["success"] != "1" || len(resmap["data"].([]interface{})) == 0 {
- return errors.New("单据未查询到")
- }
- default:
- return errors.New("单据未查询到")
- }
- return nil
- }
- 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(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["message"])
- }
- fmt.Println("resmap success", resmap["message"], resmap["success"])
- return err
- }
- func EASWebServicInsertPartsuselaid(SessionId, strJson, billType string) error { //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 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(result_body, &v)
- if err != nil {
- fmt.Println(err.Error())
- }
- println(string(result_body))
- 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)
- //if len(resmap["billErrors"].([]interface{})) > 0 || resmap["status"] != "1" {
- //if resmap["status"] != "1" {
- // return errors.New(v.Body.ImportBillResponse.ImportBillReturn)
- //}
- }
- return nil
- }
- 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 "QureyPartsStr":
- res = QureyPartsStr
- 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)
- case "QureyBill":
- res = QureyBill
- res = strings.ReplaceAll(res, "SessionId?", SessionId)
- res = strings.ReplaceAll(res, "strJson?", strJson)
- res = strings.ReplaceAll(res, "billType?", billType)
- }
- return res
- }
|