Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
杨树贤
/
liexin_scm_wms_sync
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
07f9e654
authored
Apr 23, 2020
by
mushishixian
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
对接接口
parent
ed352464
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
582 additions
and
78 deletions
back/customer_back.go
back/supplier_back.go
cmd/main.go
cmd/queue/sync_customer/main.go
cmd/queue/sync_goods/main.go
cmd/queue/sync_goods/product.go
cmd/queue/sync_status/main.go
cmd/queue/sync_status/product.go
cmd/queue/sync_supplier/main.go
cmd/source/goods/goods.go
cmd/source/main.go
cmd/test.wsdl
go.mod
go.sum
internal/logic/goods.go
internal/model/goods.go
back/customer_back.go
View file @
07f9e654
...
...
@@ -58,8 +58,8 @@ func SyncCustomerData(customer model.Customer) bool {
"erp_client_sn"
:
customer
.
ErpClientCode
,
"customer_name"
:
customer
.
Name
,
"erp_customer_id"
:
customer
.
ErpId
,
"admin_name"
:
"
admin@ichunt.com
"
,
"admin_id"
:
1
000
,
"admin_name"
:
"
系统
"
,
"admin_id"
:
1
,
}
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiInsertCustomerInfo"
req
.
Debug
=
true
...
...
back/supplier_back.go
View file @
07f9e654
...
...
@@ -58,8 +58,8 @@ func SyncSupplierData(supplier model.Supplier) bool {
"erp_supplier_sn"
:
supplier
.
ErpSupplierCode
,
"supplier_name"
:
supplier
.
Name
,
"erp_supplier_id"
:
supplier
.
ErpId
,
"admin_name"
:
"
admin@ichunt.com
"
,
"admin_id"
:
1
000
,
"admin_name"
:
"
系统
"
,
"admin_id"
:
1
,
}
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiInsertSupplierInfo"
req
.
Debug
=
true
...
...
cmd/main.go
View file @
07f9e654
package
main
import
(
"scm_server/internal/dao"
"scm_server/internal/model"
"fmt"
"github.com/tiaguinho/gosoap"
"log"
)
func
main
()
{
fmt
.
Println
(
1
)
//测试数据库连接
var
user_info
model
.
UserInfo
var
user_company
model
.
UserCompany
//查找公司名称
err
:=
dao
.
GetDb
()
.
QueryRowx
(
"select com_name from lie_user_company where user_id = ?"
,
1
)
.
StructScan
(
&
user_company
)
//soap, err := gosoap.SoapClient("http://192.168.2.253:6888/ormrpc/services/EASLogin?wsdl")
soap
,
err
:=
gosoap
.
SoapClient
(
"http://192.168.2.253:6888/ormrpc/services/WSInventoryManagementFacade?wsdl"
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
log
.
Fatalf
(
"SoapClient error: %s"
,
err
)
}
//(userName, password, slnName, dcName, language, dbType, authPattern)
//("WBYH", "123456", "eas", "demo", "L2", 1, "BaseDB")
//params := gosoap.Params{
// "userName": "WBYH",
// "password": "123456",
// "slnName": "eas",
// "dcName": "demo",
// "language": "L2",
// "dbType": 1,
// "authPattern": "BaseDB",
//}
params
:=
gosoap
.
Params
{
"json"
:
`{"FType":"material", "FID":"ET9WHFzYagYZf0="}`
,
}
fmt
.
Println
(
user_company
.
Com_name
)
//查找手机号
err
=
dao
.
GetCmsDb
()
.
QueryRowx
(
"select mobile from user_info where userId = ?"
,
1599
)
.
StructScan
(
&
user_info
)
err
=
soap
.
Call
(
"synRewriteErpBaseDataStatus"
,
params
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
log
.
Fatalf
(
"Call error: %s"
,
err
)
}
fmt
.
Println
(
user_info
.
Mobile
)
fmt
.
Println
(
string
(
soap
.
Body
))
}
cmd/queue/sync_customer/main.go
View file @
07f9e654
...
...
@@ -126,8 +126,8 @@ func SyncCustomerData(operate string, customer model.Customer) (err error) {
"erp_client_sn"
:
customer
.
ErpClientCode
,
"customer_name"
:
customer
.
Name
,
"erp_customer_id"
:
customer
.
ErpId
,
"admin_name"
:
"
admin@ichunt.com
"
,
"admin_id"
:
1
000
,
"admin_name"
:
"
系统
"
,
"admin_id"
:
1
,
}
//更新和插入接口不同
...
...
cmd/queue/sync_goods/main.go
View file @
07f9e654
...
...
@@ -18,12 +18,13 @@ import (
type
RecvPro
struct
{
}
type
Supplier
QueueMessage
struct
{
type
Goods
QueueMessage
struct
{
Type
string
Data
struct
{
FID
string
FNUMBER
string
CFNAME
string
FGoods
string
FBrand
string
FModel
string
}
}
...
...
@@ -33,9 +34,9 @@ func init() {
func
(
t
*
RecvPro
)
Consumer
(
dataByte
[]
byte
)
error
{
var
(
message
Supplier
QueueMessage
message
Goods
QueueMessage
err
error
supplier
model
.
Supplier
goods
model
.
Goods
operateType
string
syncLog
model
.
SyncLog
)
...
...
@@ -45,29 +46,31 @@ func (t *RecvPro) Consumer(dataByte []byte) error {
}
//转换成supplier数据
supplier
.
ErpId
=
message
.
Data
.
FID
supplier
.
ErpSupplierCode
=
message
.
Data
.
FNUMBER
supplier
.
Name
=
message
.
Data
.
CFNAME
goods
.
ErpId
=
message
.
Data
.
FID
goods
.
BrandName
=
message
.
Data
.
FBrand
goods
.
GoodsCnName
=
message
.
Data
.
FGoods
goods
.
GoodsName
=
message
.
Data
.
FModel
//判断操作类型
switch
message
.
Type
{
case
"save"
:
//先去查询是否存在,不存在才去插入,已经存在即是修改
if
logic
.
CheckSupplierExist
(
supplier
.
ErpId
)
{
fmt
.
Println
(
goods
.
ErpId
)
if
logic
.
CheckGoodsExist
(
goods
.
ErpId
)
{
operateType
=
"update"
if
err
=
logic
.
Update
Supplier
(
supplier
);
err
!=
nil
{
if
err
=
logic
.
Update
Goods
(
goods
);
err
!=
nil
{
goto
ERR
}
}
else
{
operateType
=
"insert"
if
err
=
logic
.
Insert
Supplier
(
supplier
);
err
!=
nil
{
if
err
=
logic
.
Insert
Goods
(
goods
);
err
!=
nil
{
goto
ERR
}
}
case
"delete"
:
operateType
=
"delete"
if
logic
.
Check
SupplierExist
(
supplier
.
ErpId
)
{
if
logic
.
Check
GoodsExist
(
goods
.
ErpId
)
{
//如果存在,才进行删除
if
err
=
logic
.
Delete
Supplier
(
supplier
.
ErpId
);
err
!=
nil
{
if
err
=
logic
.
Delete
Goods
(
goods
.
ErpId
);
err
!=
nil
{
goto
ERR
}
}
else
{
...
...
@@ -79,15 +82,15 @@ func (t *RecvPro) Consumer(dataByte []byte) error {
goto
ERR
}
//操作成功后还要去请求后端接口同步数据
if
err
=
Sync
SupplierData
(
operateType
,
supplier
);
err
!=
nil
{
if
err
=
Sync
GoodsData
(
operateType
,
goods
);
err
!=
nil
{
goto
ERR
}
fmt
.
Println
(
"同步成功"
)
return
nil
ERR
:
//不存在的erp_id不去操作对应的数据库
if
supplier
.
ErpId
!=
""
{
logSyncErrorTo
Supplier
(
supplier
.
ErpId
,
err
.
Error
())
if
goods
.
ErpId
!=
""
{
logSyncErrorTo
Goods
(
goods
.
ErpId
,
err
.
Error
())
}
//还要存到一个统一错误表
...
...
@@ -95,9 +98,9 @@ ERR:
AddTime
:
time
.
Now
()
.
Unix
(),
SyncTime
:
time
.
Now
()
.
Unix
(),
QueueMessage
:
string
(
dataByte
),
UniqueId
:
supplier
.
ErpId
,
//有可能为
UniqueId
:
goods
.
ErpId
,
//有可能为
SyncError
:
err
.
Error
(),
SyncName
:
"
supplier
"
,
SyncName
:
"
goods
"
,
}
logic
.
InsertSyncLog
(
syncLog
)
...
...
@@ -116,27 +119,28 @@ func (t *RecvPro) FailAction(dataByte []byte) error {
}
//同步数据
func
Sync
SupplierData
(
operate
string
,
supplier
model
.
Supplier
)
(
err
error
)
{
func
Sync
GoodsData
(
operate
string
,
goods
model
.
Goods
)
(
err
error
)
{
var
(
resp
*
req
.
Resp
url
string
respData
common
.
Response
)
param
:=
req
.
Param
{
"erp_supplier_sn"
:
supplier
.
ErpSupplierCode
,
"supplier_name"
:
supplier
.
Name
,
"erp_supplier_id"
:
supplier
.
ErpId
,
"admin_name"
:
"admin@ichunt.com"
,
"admin_id"
:
1000
,
"goods_name"
:
goods
.
GoodsName
,
"goods_cn_name"
:
goods
.
GoodsCnName
,
"brand_name"
:
goods
.
BrandName
,
"erp_goods_id"
:
goods
.
ErpId
,
"admin_name"
:
"系统"
,
"admin_id"
:
1
,
}
//更新和插入接口不同
if
operate
==
"update"
{
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiUpdate
Supplier
Info"
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiUpdate
Goods
Info"
}
else
if
operate
==
"insert"
{
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiInsert
Supplier
Info"
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiInsert
Goods
Info"
}
else
{
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiDelete
Supplier
Info"
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiDelete
Goods
Info"
}
req
.
Debug
=
false
if
operate
==
"update"
||
operate
==
"insert"
{
...
...
@@ -151,20 +155,41 @@ func SyncSupplierData(operate string, supplier model.Supplier) (err error) {
return
errors
.
New
(
respData
.
Errmsg
)
}
//都没问题,代表后端那边已经成功修改,修改同步表的状态
if
err
=
logic
.
Sync
SupplierSuccess
(
supplier
.
ErpId
);
err
!=
nil
{
if
err
=
logic
.
Sync
GoodsSuccess
(
goods
.
ErpId
,
false
);
err
!=
nil
{
return
}
}
else
{
//删除
url
=
configs
.
BasicApiUrl
+
"/basic/api/ApiUpdateGoodsStatus"
//删除,软删除
param
:=
req
.
Param
{
"status"
:
0
,
"erp_goods_id"
:
goods
.
ErpId
,
"admin_name"
:
"系统"
,
"admin_id"
:
1
,
}
resp
,
err
=
req
.
Post
(
url
,
param
)
if
err
!=
nil
{
return
}
if
err
=
resp
.
ToJSON
(
&
respData
);
err
!=
nil
{
return
}
if
respData
.
Errcode
!=
101100
{
return
errors
.
New
(
respData
.
Errmsg
)
}
//都没问题,代表后端那边已经成功修改,修改同步表的状态
if
err
=
logic
.
SyncGoodsSuccess
(
goods
.
ErpId
,
true
);
err
!=
nil
{
return
}
}
return
}
func
logSyncErrorTo
Supplier
(
erpId
,
syncError
string
)
{
func
logSyncErrorTo
Goods
(
erpId
,
syncError
string
)
{
var
err
error
//请求失败的话,将原因存起来
if
err
=
logic
.
Write
Supplier
SyncError
(
erpId
,
syncError
);
err
!=
nil
{
if
err
=
logic
.
Write
Goods
SyncError
(
erpId
,
syncError
);
err
!=
nil
{
//数据库错误,发送警告
service
.
SendMessage
(
common
.
ErrorSendPhone
,
err
.
Error
())
}
...
...
@@ -173,8 +198,8 @@ func logSyncErrorToSupplier(erpId, syncError string) {
func
main
()
{
t
:=
&
RecvPro
{}
rabbitmq
.
Recv
(
rabbitmq
.
QueueExchange
{
"store_
supplier
"
,
"store_
supplier
"
,
"store_
goods
"
,
"store_
goods
"
,
"store"
,
"direct"
,
"amqp://huntadmin:jy2y2900@192.168.1.237:5672/"
,
...
...
cmd/queue/sync_goods/product.go
View file @
07f9e654
...
...
@@ -12,18 +12,19 @@ func main() {
"type"
:
"save"
,
"data"
:
map
[
string
]
string
{
"FID"
:
"Z8eVSzSLRXKa7ET9WHFzYagYZf0171="
,
"FNUMBER"
:
"WT0050333"
,
"CFNAME"
:
"深圳市鼎驰达电子有限公司"
,
"FGoods"
:
"WT0050333"
,
"FBrand"
:
"深圳市鼎驰达电子有限公司"
,
"FModel"
:
""
,
},
}
data
,
err
:=
json
.
Marshal
(
message
)
if
err
!=
nil
{
data
,
err
:=
json
.
Marshal
(
message
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
body
:=
string
(
data
)
queueExchange
:=
rabbitmq
.
QueueExchange
{
"store_
supplier
"
,
"store_
supplier
"
,
"store_
goods
"
,
"store_
goods
"
,
"store"
,
"direct"
,
"amqp://huntadmin:jy2y2900@192.168.1.237:5672/"
,
...
...
cmd/queue/sync_status/main.go
0 → 100644
View file @
07f9e654
package
main
import
(
"encoding/json"
"fmt"
"github.com/go-kratos/kratos/pkg/log"
"github.com/ichunt2019/go-rabbitmq/utils/rabbitmq"
)
type
RecvPro
struct
{
}
type
QueueStatus
struct
{
SyncName
string
Status
int
ErpId
string
}
func
init
()
{
log
.
Init
(
nil
)
}
func
(
t
*
RecvPro
)
Consumer
(
dataByte
[]
byte
)
error
{
var
(
err
error
message
QueueStatus
)
//先去转换队列消息的json
if
err
=
json
.
Unmarshal
(
dataByte
,
&
message
);
err
!=
nil
{
goto
ERR
}
//得到message以后,去请求金蝶的接口
//如果失败了,记录到表,并且发送钉钉消息
ERR
:
fmt
.
Println
(
err
)
return
nil
}
func
(
t
*
RecvPro
)
FailAction
(
dataByte
[]
byte
)
error
{
fmt
.
Println
(
"任务处理失败了,发送钉钉消息通知主人"
)
return
nil
}
func
main
()
{
t
:=
&
RecvPro
{}
rabbitmq
.
Recv
(
rabbitmq
.
QueueExchange
{
"store_sync_status"
,
"store_sync_status"
,
"store"
,
"direct"
,
"amqp://huntadmin:jy2y2900@192.168.1.237:5672/"
,
},
t
,
3
)
}
cmd/queue/sync_status/product.go
0 → 100644
View file @
07f9e654
package
main
import
(
"encoding/json"
"fmt"
"github.com/ichunt2019/go-rabbitmq/utils/rabbitmq"
)
func
main
()
{
message
:=
make
(
map
[
string
]
interface
{})
message
=
map
[
string
]
interface
{}{
"SyncName"
:
"supplier"
,
"Status"
:
1
,
"ErpId"
:
"test123456"
,
}
data
,
err
:=
json
.
Marshal
(
message
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
body
:=
string
(
data
)
queueExchange
:=
rabbitmq
.
QueueExchange
{
"store_sync_status"
,
"store_sync_status"
,
"store"
,
"direct"
,
"amqp://huntadmin:jy2y2900@192.168.1.237:5672/"
,
}
rabbitmq
.
Send
(
queueExchange
,
body
)
}
cmd/queue/sync_supplier/main.go
View file @
07f9e654
...
...
@@ -125,8 +125,8 @@ func SyncSupplierData(operate string, supplier model.Supplier) (err error) {
"erp_supplier_sn"
:
supplier
.
ErpSupplierCode
,
"supplier_name"
:
supplier
.
Name
,
"erp_supplier_id"
:
supplier
.
ErpId
,
"admin_name"
:
"
admin@ichunt.com
"
,
"admin_id"
:
1
000
,
"admin_name"
:
"
系统
"
,
"admin_id"
:
1
,
}
//更新和插入接口不同
...
...
cmd/source/goods/goods.go
View file @
07f9e654
package
goods
import
(
"encoding/json"
"fmt"
"github.com/ichunt2019/go-rabbitmq/utils/rabbitmq"
"github.com/tealeg/xlsx"
"scm_server/internal/logic"
"scm_server/internal/model"
)
var
Exchange
rabbitmq
.
QueueExchange
//导入委托方的信息(excel导入)
func
init
()
{
Exchange
=
rabbitmq
.
QueueExchange
{
"store_goods"
,
"store_goods"
,
"store"
,
"direct"
,
"amqp://huntadmin:jy2y2900@192.168.1.237:5672/"
,
}
}
//导入委托方的信息(excel导入)
func
Import
()
{
var
(
...
...
@@ -25,16 +40,35 @@ func Import() {
if
key
==
0
{
continue
}
goods
.
Erp
Goods
Id
=
row
.
Cells
[
0
]
.
String
()
goods
.
ErpId
=
row
.
Cells
[
0
]
.
String
()
goods
.
GoodsName
=
row
.
Cells
[
1
]
.
String
()
goods
.
BrandName
=
row
.
Cells
[
2
]
.
String
()
goods
.
GoodsCnName
=
row
.
Cells
[
3
]
.
String
()
if
logic
.
CheckGoodsExist
(
goods
.
ErpGoodsId
)
{
//如果品牌名称为空,跳过
if
goods
.
BrandName
==
""
{
continue
}
if
err
=
logic
.
InsertGoods
(
goods
);
err
!=
nil
{
if
logic
.
CheckGoodsExist
(
goods
.
ErpId
)
{
fmt
.
Println
(
"已存在,跳过"
)
continue
}
message
:=
make
(
map
[
string
]
interface
{})
message
=
map
[
string
]
interface
{}{
"type"
:
"save"
,
"data"
:
map
[
string
]
string
{
"FID"
:
goods
.
ErpId
,
"FGoods"
:
goods
.
GoodsCnName
,
"FBrand"
:
goods
.
BrandName
,
"FModel"
:
goods
.
GoodsName
,
},
}
fmt
.
Println
(
message
)
data
,
err
:=
json
.
Marshal
(
message
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
body
:=
string
(
data
)
rabbitmq
.
Send
(
Exchange
,
body
)
}
}
}
cmd/source/main.go
View file @
07f9e654
package
main
import
"scm_server/cmd/source/
supplier
"
import
"scm_server/cmd/source/
goods
"
func
main
()
{
//forever := make(chan bool)
//go supplier.Import()
supplier
.
Import
()
//
supplier.Import()
//<-forever
//customer.Import()
//
goods.Import()
goods
.
Import
()
}
cmd/test.wsdl
0 → 100644
View file @
07f9e654
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
xmlns:apachesoap=
"http://xml.apache.org/xml-soap"
xmlns:impl=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
xmlns:intf=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
xmlns:soapenc=
"http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns1=
"urn:client"
xmlns:wsdl=
"http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap=
"http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
>
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema
targetNamespace=
"urn:client"
xmlns=
"http://www.w3.org/2001/XMLSchema"
>
<import
namespace=
"http://schemas.xmlsoap.org/soap/encoding/"
/>
<complexType
name=
"WSContext"
>
<sequence>
<element
name=
"slnName"
nillable=
"true"
type=
"xsd:string"
/>
<element
name=
"password"
nillable=
"true"
type=
"xsd:string"
/>
<element
name=
"dbType"
type=
"xsd:int"
/>
<element
name=
"userName"
nillable=
"true"
type=
"xsd:string"
/>
<element
name=
"sessionId"
nillable=
"true"
type=
"xsd:string"
/>
<element
name=
"dcName"
nillable=
"true"
type=
"xsd:string"
/>
</sequence>
</complexType>
</schema>
</wsdl:types>
<wsdl:message
name=
"logoutResponse"
>
<wsdl:part
name=
"logoutReturn"
type=
"xsd:boolean"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"logoutRequest"
>
<wsdl:part
name=
"userName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"slnName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dcName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"language"
type=
"xsd:string"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"loginResponse2"
>
<wsdl:part
name=
"loginReturn"
type=
"tns1:WSContext"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"loginRequest"
>
<wsdl:part
name=
"userName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"password"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"slnName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dcName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"language"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dbType"
type=
"xsd:int"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"loginRequest1"
>
<wsdl:part
name=
"userName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"password"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"slnName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dcName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"language"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dbType"
type=
"xsd:int"
>
</wsdl:part>
<wsdl:part
name=
"authPattern"
type=
"xsd:string"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"loginResponse"
>
<wsdl:part
name=
"loginReturn"
type=
"tns1:WSContext"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"loginRequest2"
>
<wsdl:part
name=
"userName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"password"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"slnName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dcName"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"language"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"dbType"
type=
"xsd:int"
>
</wsdl:part>
<wsdl:part
name=
"authPattern"
type=
"xsd:string"
>
</wsdl:part>
<wsdl:part
name=
"isEncodePwd"
type=
"xsd:int"
>
</wsdl:part>
</wsdl:message>
<wsdl:message
name=
"loginResponse1"
>
<wsdl:part
name=
"loginReturn"
type=
"tns1:WSContext"
>
</wsdl:part>
</wsdl:message>
<wsdl:portType
name=
"EASLoginProxy"
>
<wsdl:operation
name=
"login"
parameterOrder=
"userName password slnName dcName language dbType"
>
<wsdl:input
message=
"intf:loginRequest"
name=
"loginRequest"
>
</wsdl:input>
<wsdl:output
message=
"intf:loginResponse"
name=
"loginResponse"
>
</wsdl:output>
</wsdl:operation>
<wsdl:operation
name=
"login"
parameterOrder=
"userName password slnName dcName language dbType authPattern"
>
<wsdl:input
message=
"intf:loginRequest1"
name=
"loginRequest1"
>
</wsdl:input>
<wsdl:output
message=
"intf:loginResponse1"
name=
"loginResponse1"
>
</wsdl:output>
</wsdl:operation>
<wsdl:operation
name=
"login"
parameterOrder=
"userName password slnName dcName language dbType authPattern isEncodePwd"
>
<wsdl:input
message=
"intf:loginRequest2"
name=
"loginRequest2"
>
</wsdl:input>
<wsdl:output
message=
"intf:loginResponse2"
name=
"loginResponse2"
>
</wsdl:output>
</wsdl:operation>
<wsdl:operation
name=
"logout"
parameterOrder=
"userName slnName dcName language"
>
<wsdl:input
message=
"intf:logoutRequest"
name=
"logoutRequest"
>
</wsdl:input>
<wsdl:output
message=
"intf:logoutResponse"
name=
"logoutResponse"
>
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding
name=
"EASLoginSoapBinding"
type=
"intf:EASLoginProxy"
>
<wsdlsoap:binding
style=
"rpc"
transport=
"http://schemas.xmlsoap.org/soap/http"
/>
<wsdl:operation
name=
"login"
>
<wsdlsoap:operation
soapAction=
""
/>
<wsdl:input
name=
"loginRequest"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://login.webservice.bos.kingdee.com"
use=
"encoded"
/>
</wsdl:input>
<wsdl:output
name=
"loginResponse"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
use=
"encoded"
/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation
name=
"login"
>
<wsdlsoap:operation
soapAction=
""
/>
<wsdl:input
name=
"loginRequest1"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://login.webservice.bos.kingdee.com"
use=
"encoded"
/>
</wsdl:input>
<wsdl:output
name=
"loginResponse1"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
use=
"encoded"
/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation
name=
"login"
>
<wsdlsoap:operation
soapAction=
""
/>
<wsdl:input
name=
"loginRequest2"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://login.webservice.bos.kingdee.com"
use=
"encoded"
/>
</wsdl:input>
<wsdl:output
name=
"loginResponse2"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
use=
"encoded"
/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation
name=
"logout"
>
<wsdlsoap:operation
soapAction=
""
/>
<wsdl:input
name=
"logoutRequest"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://login.webservice.bos.kingdee.com"
use=
"encoded"
/>
</wsdl:input>
<wsdl:output
name=
"logoutResponse"
>
<wsdlsoap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
namespace=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
use=
"encoded"
/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service
name=
"EASLoginProxyService"
>
<wsdl:port
binding=
"intf:EASLoginSoapBinding"
name=
"EASLogin"
>
<wsdlsoap:address
location=
"http://192.168.2.253:6888/ormrpc/services/EASLogin"
/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
go.mod
View file @
07f9e654
...
...
@@ -4,10 +4,12 @@ go 1.13
require (
github.com/go-kratos/kratos v0.4.2
github.com/hooklift/gowsdl v0.3.1
github.com/ichunt2019/go-rabbitmq v1.0.1
github.com/imroc/req v0.3.0
github.com/jmoiron/sqlx v1.2.0
github.com/pkg/errors v0.9.1
github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71
github.com/tealeg/xlsx v1.0.5
github.com/tiaguinho/gosoap v1.2.0
)
go.sum
View file @
07f9e654
...
...
@@ -101,6 +101,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hooklift/gowsdl v0.3.1 h1:tpc8hTwY3HjyucyB2W1qfQRcfMiStWQJE/CNQSqHM9c=
github.com/hooklift/gowsdl v0.3.1/go.mod h1:TYmt7jpe3F5zLlMtKGetjHLwUBIAF5JCd+NYq+mQ/Zk=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ichunt2019/go-rabbitmq v1.0.1 h1:qHhpGm9v7jnhSBo3f3viX+BSky9yugp9lCSV03eYsF4=
github.com/ichunt2019/go-rabbitmq v1.0.1/go.mod h1:TQsZ1XWULyvm4UwpYHwNPtOXYbuVvLLI0GM7g/BRy68=
...
...
@@ -233,6 +235,8 @@ github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU=
github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4=
github.com/tiaguinho/gosoap v1.2.0 h1:K3L29Wk6PkgGob/u24bd4G/rDy5QGnsnDxljAGRRuUM=
github.com/tiaguinho/gosoap v1.2.0/go.mod h1:m/W/ocE01n6v6UkXstKa3ltZvsZLEaxJ9BIs5pRCrZA=
github.com/tjfoc/gmsm v1.0.1/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
...
...
@@ -277,6 +281,7 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191011234655-491137f69257 h1:ry8e2D+cwaV6hk7lb3aRTjjZo24shrbK0e11QEOkTIg=
golang.org/x/net v0.0.0-20191011234655-491137f69257/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
...
...
@@ -304,6 +309,7 @@ golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd h1:3x5uuvBgE6oaXJjCOvpCC1IpgJogqQ+PqGGU3ZxAgII=
golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
...
...
internal/logic/goods.go
View file @
07f9e654
...
...
@@ -6,28 +6,62 @@ import (
"time"
)
const
CheckGoodsExistSql
=
"SELECT goods_id FROM lie_goods WHERE erp_
goods_id = ?
"
const
CheckGoodsExistSql
=
"SELECT goods_id FROM lie_goods WHERE erp_
id = ? AND sync_status = 1
"
const
InsertGoodsSql
=
"INSERT INTO `lie_goods` (`goods_name`,`goods_cn_name`,`brand_name`,`erp_
goods_
id`,`add_time`,`sync_status`) VALUES (?,?,?,?,?,?)"
const
InsertGoodsSql
=
"INSERT INTO `lie_goods` (`goods_name`,`goods_cn_name`,`brand_name`,`erp_id`,`add_time`,`sync_status`) VALUES (?,?,?,?,?,?)"
const
WriteSyncErrorSql
=
"UPDATE `lie_goods` SET sync_error = ? WHERE goods_id = ?"
const
UpdateGoodsSql
=
"UPDATE `lie_goods` SET `goods_name` = ? , `goods_cn_name` = ? , `brand_name` = ? , `update_time` = ? WHERE `erp_id` = ?"
const
DeleteGoodsSql
=
"DELETE FROM `lie_goods` WHERE `erp_id` = ?"
const
WriteGoodsSyncErrorSql
=
"UPDATE `lie_goods` SET sync_error = ? WHERE goods_id = ?"
const
SyncGoodsSuccessSql
=
"UPDATE `lie_goods` SET sync_status = 1 , sync_time = ? WHERE erp_id = ?"
const
SyncGoodsSuccessSqlWithStatus
=
"UPDATE `lie_goods` SET sync_status = 1 , sync_time = ? , status = ? WHERE erp_id = ?"
//检查物料是否存在
func
CheckGoodsExist
(
erpId
string
)
(
exist
bool
)
{
var
customer
Id
int
dao
.
GetDb
()
.
QueryRowx
(
CheckGoodsExistSql
,
erpId
)
.
Scan
(
&
customer
Id
)
return
customer
Id
>
0
var
goods
Id
int
dao
.
GetDb
()
.
QueryRowx
(
CheckGoodsExistSql
,
erpId
)
.
Scan
(
&
goods
Id
)
return
goods
Id
>
0
}
//插入物料
func
InsertGoods
(
goods
model
.
Goods
)
(
err
error
)
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
InsertGoodsSql
,
goods
.
GoodsName
,
goods
.
GoodsCnName
,
goods
.
BrandName
,
goods
.
ErpGoodsId
,
time
.
Now
()
.
Unix
(),
0
)
goods
.
BrandName
,
goods
.
ErpId
,
time
.
Now
()
.
Unix
(),
0
)
return
}
//更新供应商
func
UpdateGoods
(
goods
model
.
Goods
)
(
err
error
)
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
UpdateGoodsSql
,
goods
.
GoodsName
,
goods
.
GoodsCnName
,
goods
.
BrandName
,
time
.
Now
()
.
Unix
(),
goods
.
ErpId
)
if
err
!=
nil
{
return
}
return
nil
}
//删除供应商
func
DeleteGoods
(
erpId
string
)
(
err
error
)
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
DeleteGoodsSql
,
erpId
)
return
}
//写入同步失败的原因
func
WriteSyncError
(
goodsId
int
,
syncError
string
)
(
err
error
)
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
WriteSyncErrorSql
,
syncError
,
goodsId
)
func
WriteGoodsSyncError
(
erpId
string
,
syncError
string
)
(
err
error
)
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
WriteGoodsSyncErrorSql
,
syncError
,
erpId
)
return
}
//修改成功的同步状态
func
SyncGoodsSuccess
(
erpId
string
,
isDelete
bool
)
(
err
error
)
{
//不是删除,不需要修改状态
if
!
isDelete
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
SyncGoodsSuccessSql
,
time
.
Now
()
.
Unix
(),
erpId
)
}
else
{
_
,
err
=
dao
.
GetDb
()
.
Exec
(
SyncGoodsSuccessSqlWithStatus
,
time
.
Now
()
.
Unix
(),
0
,
erpId
)
}
return
}
internal/model/goods.go
View file @
07f9e654
...
...
@@ -4,7 +4,7 @@ type Goods struct {
GoodsName
string
GoodsCnName
string
BrandName
string
Erp
Goods
Id
string
ErpId
string
AddTime
int
SyncTime
int
SyncStatus
int
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment