Skip to content

Commit

Permalink
pangpanglabs#3 从csv文件中读取legcay系统测试数据
Browse files Browse the repository at this point in the history
  • Loading branch information
JY01095902 committed Jul 24, 2019
1 parent 2b2ffc3 commit 2d57423
Show file tree
Hide file tree
Showing 10 changed files with 489 additions and 70 deletions.
35 changes: 17 additions & 18 deletions assign.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package goetl
package main

import (
"context"
Expand Down Expand Up @@ -41,7 +41,7 @@ type AssignETL struct{}
func (etl AssignETL) Extract(ctx context.Context) (interface{}, error) {
engine := factory.GetCSLEngine()
masters := make([]models.RecvSuppMst, 0)
if err := engine.Where("BrandCode = ? AND ShopCode = ?", "EE", "CDVQ").Find(&masters); err != nil {
if err := engine.Where("BrandCode = ? AND ShopCode = ?", "SA", "CFW5").Find(&masters); err != nil {
return nil, err
}

Expand All @@ -54,15 +54,14 @@ func (etl AssignETL) Transform(ctx context.Context, source interface{}) (interfa
if !ok {
return nil, errors.New("Convert Failed")
}
mslMasters := make([]models.TransactionMaster, 0)
mslMasters := make([]models.Transaction, 0)
for _, mst := range cslMasters {
mslMasters = append(mslMasters, models.TransactionMaster{
Date: mst.Dates,
PlantCode: mst.BrandCode + "-" + mst.ShopCode,
WaybillNo: mst.WayBillNo,
OrderNo: mst.RecvSuppNo,
TransactionCode: "OS100",
Channel: "CLEARANCE",
mslMasters = append(mslMasters, models.Transaction{
TransactionID: mst.WayBillNo,
WaybillNo: mst.WayBillNo,
BoxNo: mst.BoxNo,
SkuCode: "",
Qty: 0,
})
}

Expand All @@ -71,19 +70,19 @@ func (etl AssignETL) Transform(ctx context.Context, source interface{}) (interfa

// ReadyToLoad ...
func (etl AssignETL) ReadyToLoad(ctx context.Context, source interface{}) error {
masters, ok := source.([]models.TransactionMaster)
masters, ok := source.([]models.Transaction)
if !ok {
return errors.New("Convert Failed")
}
savedMasters := make([]models.TransactionMaster, 0)
savedMasters := make([]models.Transaction, 0)
for _, mst := range masters {
sql := `SELECT id
FROM transaction_masters
WHERE order_no = ?
FROM transactions
WHERE transaction_id = ?
`

engine := factory.GetINVEngine()
result, err := engine.Query(sql, mst.OrderNo)
engine := factory.GetClrEngine()
result, err := engine.Query(sql, mst.TransactionID)
if err != nil {
return err
}
Expand All @@ -101,11 +100,11 @@ func (etl AssignETL) Load(ctx context.Context, source interface{}) error {
if source == nil {
return errors.New("source is nil")
}
mslMasters, ok := source.([]models.TransactionMaster)
mslMasters, ok := source.([]models.Transaction)
if !ok {
return errors.New("Convert Failed")
}
engine := factory.GetINVEngine()
engine := factory.GetClrEngine()

if _, err := engine.Insert(&mslMasters); err != nil {
return err
Expand Down
7 changes: 4 additions & 3 deletions assign_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package goetl
package main

import (
"clearance-adapter/models"
Expand All @@ -8,6 +8,7 @@ import (

_ "github.com/denisenkom/go-mssqldb"
_ "github.com/go-sql-driver/mysql"
"github.com/pangpanglabs/goetl"
. "github.com/smartystreets/goconvey/convey"
)

Expand Down Expand Up @@ -42,8 +43,8 @@ func TestTransform(t *testing.T) {
func TestAssignETL(t *testing.T) {
Convey("测试AssignETL的Run方法", t, func() {
Convey("可以把入库预约从CSL导入到MSL", func() {
etl := New(AssignETL{})
etl.AfterTransform(AssignETL{}.ReadyToLoad)
etl := goetl.New(AssignETL{})
etl.After(AssignETL{}.ReadyToLoad)
err := etl.Run(context.Background())
So(err, ShouldBeNil)
})
Expand Down
4 changes: 3 additions & 1 deletion config.dev.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@

cslConnString: "server=localhost;user id=SA;password=yourStrong(!)Password;database=CSL;connection timeout=30"

invConnString: "root:1111@tcp(localhost:3306)/inventories?charset=utf8&parseTime=True&loc=UTC"
invConnString: "root:1111@tcp(localhost:3306)/inventories?charset=utf8&parseTime=True&loc=UTC"

clrConnString: "root:1111@tcp(localhost:3306)/clearance?charset=utf8&parseTime=True&loc=UTC"
10 changes: 10 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,13 @@ func GetINVConnString() string {
readConfig(*congfigEnv)
return viper.Get("invConnString").(string)
}

// GetClrConnString Clearance 数据库连接字符串
func GetClrConnString() string {
if *congfigEnv == "" {
defaultAppEnv := "dev"
congfigEnv = &defaultAppEnv
}
readConfig(*congfigEnv)
return viper.Get("clrConnString").(string)
}
41 changes: 29 additions & 12 deletions factory/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ var (
cslEngine *xorm.Engine
// invEngine MSL v1.0 数据库
invEngine *xorm.Engine
// clrEngine Clearance 数据库
clrEngine *xorm.Engine
once sync.Once
)

Expand All @@ -27,6 +29,14 @@ func Init() {

invEngine = CreateMySQLEngine(config.GetINVConnString())
SetINVEngine(invEngine)

clrEngine = CreateMySQLEngine(config.GetClrConnString())
SetClrEngine(clrEngine)
}

// GetCSLEngine 获取CSL数据库引擎
func GetCSLEngine() *xorm.Engine {
return cslEngine
}

// SetCSLEngine 设置CSL数据库引擎
Expand All @@ -36,18 +46,35 @@ func SetCSLEngine(engine *xorm.Engine) {
})
}

// GetINVEngine 获取MSL v1.0数据库引擎
func GetINVEngine() *xorm.Engine {
return invEngine
}

// SetINVEngine 设置INV数据库引擎
func SetINVEngine(engine *xorm.Engine) {
once.Do(func() {
invEngine = engine
})
}

// GetClrEngine 获取Clearance数据库引擎
func GetClrEngine() *xorm.Engine {
return clrEngine
}

// SetClrEngine 设置Clearance数据库引擎
func SetClrEngine(engine *xorm.Engine) {
once.Do(func() {
clrEngine = engine
})
}

// CreateMSSQLEngine 创建SQLServer数据库引擎
func CreateMSSQLEngine(connString string) *xorm.Engine {
engine, err := xorm.NewEngine("mssql", connString)
if err != nil {
fmt.Println("createCSLEngine error")
fmt.Println("createMSSQLEngine error")
}
engine.TZLocation, _ = time.LoadLocation("UTC")
engine.SetTableMapper(core.SameMapper{})
Expand All @@ -56,25 +83,15 @@ func CreateMSSQLEngine(connString string) *xorm.Engine {
return engine
}

// GetCSLEngine 获取CSL数据库引擎
func GetCSLEngine() *xorm.Engine {
return cslEngine
}

// CreateMySQLEngine 创建MySQL数据库引擎
func CreateMySQLEngine(connString string) *xorm.Engine {
var err error
engine, err := xorm.NewEngine("mysql", connString)
if err != nil {
fmt.Println("createINVEngine error")
fmt.Println("createMySQLEngine error")
}
engine.SetTableMapper(core.SnakeMapper{})
engine.SetColumnMapper(core.SnakeMapper{})

return engine
}

// GetINVEngine 获取MSL v1.0数据库引擎
func GetINVEngine() *xorm.Engine {
return invEngine
}
5 changes: 5 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package main

func main() {

}
70 changes: 62 additions & 8 deletions models/recvsupp.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,69 @@
package models

import "time"

// RecvSuppMst ...
type RecvSuppMst struct {
RecvSuppNo string `xorm:"char(14) not null pk "`
BrandCode string `xorm:"varchar(4) null default null"`
ShopCode string `xorm:"char(4) null default null"`
Dates string `xorm:"char(8) not null"`
RecvSuppType string `xorm:"char(1) null default null"`
ShippingTypeCode string `xorm:"char(2) null default null"`
WayBillNo string `xorm:"varchar(50) not null"`
RecvSuppStatusCode string `xorm:"char(1) not null"`
RecvSuppNo string `xorm:"char(14) not null pk "`
BrandCode string `xorm:"varchar(4)"`
ShopCode string `xorm:"char(4)"`
Dates string `xorm:"char(8) not null"`
RecvSuppType string `xorm:"char(1)"`
ShippingTypeCode string `xorm:"char(2)"`
WayBillNo string `xorm:"varchar(50) not null"`
RecvSuppStatusCode string `xorm:"char(1) not null"`
SeqNo int `xorm:"int not null"`
BoxAmount int `xorm:"int"`
SAPDeliveryNo string `xorm:"char(10)"`
SAPDeliveryDate string `xorm:"char(8)"`
NormalProductType string `xorm:"char"`
ShopSuppRecvDate string `xorm:"char(8)"`
TransTypeCode string `xorm:"char"`
RequestNo string `xorm:"char(14)"`
BoxNo string `xorm:"char(20)"`
PlantCode string `xorm:"char(4)"`
RoundRecvSuppNo string `xorm:"char(14)"`
RoundSAPDeliveryNo string `xorm:"char(10)"`
TargetShopCode string `xorm:"char(4)"`
RecvEmpID string `xorm:"char(10)"`
SuppEmpID string `xorm:"char(10)"`
SAPMenuType string `xorm:"char"`
OrderControlNo string `xorm:"char(12)"`
SendFlag string `xorm:"char not null default 'R'"`
InvtBaseDate string `xorm:"char(8)"`
ProvinceCode string `xorm:"char(3)"`
CityCode string `xorm:"char(5)"`
DistrictCode string `xorm:"char(8)"`
BoxType string `xorm:"char(2)"`
ShippingCompanyCode string `xorm:"char(2)"`
RecvChk bool `xorm:"bit"`
DelChk bool `xorm:"bit not null default 0"`
ShopDesc string `xorm:"nvarchar(400)"`
BrandDesc string `xorm:"nvarchar(400)"`
RecvEmpName string `xorm:"nvarchar(100)"`
SuppEmpName string `xorm:"nvarchar(200)"`
VolumeType string `xorm:"nvarchar(20)"`
VolumesUnit string `xorm:"nvarchar(10)"`
Area string `xorm:"nvarchar(100)"`
ShopManagerName string `xorm:"nvarchar(10)"`
BrandSuppRecvDate string `xorm:"varchar(8)"`
InUserID string `xorm:"varchar(20) NOT NULL"`
ModiUserID string `xorm:"varchar(20) NOT NULL"`
SendState string `xorm:"varchar(2) DEFAULT '' NOT NULL"`
ExpressNo string `xorm:"varchar(13)"`
DeliveryID string `xorm:"varchar(250)"`
DeliveryOrderNo string `xorm:"varchar(250)"`
VolumesSize string `xorm:"varchar(20)"`
Channel string `xorm:"varchar(20)"`
MobilePhone string `xorm:"varchar(25)"`
ModiDateTime time.Time `xorm:"datetime"`
SendDateTime time.Time `xorm:"datetime"`
InDateTime time.Time `xorm:"datetime"`
DeliverySendTime time.Time `xorm:"datetime"`
DeliveryReceiveTime time.Time `xorm:"datetime"`
StockOutUseAmt float64 `xorm:"decimal(9,2)"`
BoxGram float64 `xorm:"decimal(18,3)"`
// SendSeqNo int `xorm:"bigint not null"` 这个字段是自增的,数据库会自动插入
}

// // RecvSuppDtl ...
Expand Down
15 changes: 15 additions & 0 deletions models/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,18 @@ type TransactionDetail struct {
func (TransactionDetail) TableName() string {
return "transaction_details"
}

// Transaction ...
type Transaction struct {
ID int64 `xorm:"bigint not null autoincr pk 'id'"`
TransactionID string `xorm:"varchar(14) not null 'transaction_id'"`
WaybillNo string `xorm:"varchar(13) not null"`
BoxNo string `xorm:"varchar(20) not null"`
SkuCode string `xorm:"varchar(18) not null"`
Qty int `xorm:"int not null"`
}

// TableName 设置对应的表名
func (Transaction) TableName() string {
return "transactions"
}
Loading

0 comments on commit 2d57423

Please sign in to comment.