正在显示
10 个修改的文件
包含
390 行增加
和
40 行删除
@@ -2,12 +2,14 @@ package main | @@ -2,12 +2,14 @@ package main | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
5 | + | ||
5 | "github.com/beego/beego/v2/server/web" | 6 | "github.com/beego/beego/v2/server/web" |
6 | "github.com/linmadan/egglib-go/log/logrus" | 7 | "github.com/linmadan/egglib-go/log/logrus" |
7 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | 8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" |
8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" | 9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" |
9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | 10 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" |
10 | 11 | ||
12 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/crontab" | ||
11 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | 13 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" |
12 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg" | 14 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg" |
13 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" | 15 | _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" |
@@ -30,7 +32,11 @@ func main() { | @@ -30,7 +32,11 @@ func main() { | ||
30 | }) | 32 | }) |
31 | log.Logger.AddHook(bw) | 33 | log.Logger.AddHook(bw) |
32 | redis.InitRedis() | 34 | redis.InitRedis() |
33 | - | 35 | + //设置定时任务 |
36 | + cron := crontab.NewCrontabService(nil) | ||
37 | + cron.StartCrontabTask() | ||
38 | + defer cron.StopCrontabTask() | ||
39 | + // | ||
34 | log.Logger.Info("server start!") | 40 | log.Logger.Info("server start!") |
35 | web.Run() | 41 | web.Run() |
36 | } | 42 | } |
pkg/application/crontab/crontab.go
0 → 100644
1 | +package crontab | ||
2 | + | ||
3 | +import ( | ||
4 | + "context" | ||
5 | + | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" | ||
7 | + | ||
8 | + "github.com/beego/beego/v2/task" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/syncdata" | ||
10 | +) | ||
11 | + | ||
12 | +type CrontabService struct { | ||
13 | +} | ||
14 | + | ||
15 | +func NewCrontabService(options map[string]interface{}) *CrontabService { | ||
16 | + newCrontabService := &CrontabService{} | ||
17 | + return newCrontabService | ||
18 | +} | ||
19 | + | ||
20 | +func (crontabService *CrontabService) initTask() { | ||
21 | + //PullDataK3Cloud 晚上0时10分执行 | ||
22 | + pullMaterialK3cloud := task.NewTask("pullMaterialK3cloud", "0 10 0 * * *", func(ctx context.Context) error { | ||
23 | + srv := syncdata.PullDataK3CloudService{} | ||
24 | + return srv.PullMaterialNewest() | ||
25 | + }) | ||
26 | + task.AddTask("pullMaterialK3cloud", pullMaterialK3cloud) | ||
27 | +} | ||
28 | + | ||
29 | +func (crontabService *CrontabService) StartCrontabTask() { | ||
30 | + crontabService.initTask() | ||
31 | + task.StartTask() | ||
32 | + log.Logger.Info("crontab start!") | ||
33 | +} | ||
34 | + | ||
35 | +func (crontabService *CrontabService) StopCrontabTask() { | ||
36 | + task.StopTask() | ||
37 | +} |
pkg/application/syncdata/k3cloud.go
0 → 100644
1 | +package syncdata | ||
2 | + | ||
3 | +import ( | ||
4 | + "strconv" | ||
5 | + "strings" | ||
6 | + "time" | ||
7 | + | ||
8 | + "github.com/linmadan/egglib-go/core/application" | ||
9 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" | ||
11 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/dao" | ||
12 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models" | ||
13 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils/k3cloud" | ||
14 | +) | ||
15 | + | ||
16 | +//拉取金蝶k3cloud的数据,并更新本地数据库 | ||
17 | + | ||
18 | +type PullDataK3CloudService struct { | ||
19 | +} | ||
20 | + | ||
21 | +func newK3cloudClient() (*k3cloud.Client, error) { | ||
22 | + // TODO 使用配置方式传入 | ||
23 | + var ( | ||
24 | + acctID = "20211118121754866" | ||
25 | + username = "18559023318" | ||
26 | + password = "stx@123456" | ||
27 | + hostUrl = "https://tianlian.test.ik3cloud.com/k3cloud" | ||
28 | + ) | ||
29 | + client, err := k3cloud.NewClient(hostUrl, acctID, username, password) | ||
30 | + return client, err | ||
31 | +} | ||
32 | + | ||
33 | +func (srv *PullDataK3CloudService) PullMaterialNewest() error { | ||
34 | + var ( | ||
35 | + err error | ||
36 | + materialDao *dao.MaterialK3cloudDao | ||
37 | + ) | ||
38 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
39 | + if err != nil { | ||
40 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
41 | + } | ||
42 | + if err := transactionContext.StartTransaction(); err != nil { | ||
43 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
44 | + } | ||
45 | + defer func() { | ||
46 | + transactionContext.RollbackTransaction() | ||
47 | + }() | ||
48 | + materialDao, err = dao.NewMaterialK3cloudDao(transactionContext.(*pgTransaction.TransactionContext)) | ||
49 | + if err != nil { | ||
50 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
51 | + } | ||
52 | + version, err := materialDao.GetLastVersion() | ||
53 | + if err != nil { | ||
54 | + return application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
55 | + } | ||
56 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
57 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
58 | + } | ||
59 | + var timeFilter time.Time | ||
60 | + if version > 0 { | ||
61 | + timeFilter = time.Unix(version, 0) | ||
62 | + } | ||
63 | + err = srv.PullMaterial(timeFilter) | ||
64 | + if err != nil { | ||
65 | + return err | ||
66 | + } | ||
67 | + return err | ||
68 | +} | ||
69 | + | ||
70 | +//PullMaterial 拉取物料数据 | ||
71 | +func (srv *PullDataK3CloudService) PullMaterial(timeFilter time.Time) error { | ||
72 | + //拉取数据 | ||
73 | + var filterString []string | ||
74 | + if !timeFilter.IsZero() { | ||
75 | + str := timeFilter.Format("2006-01-02T15:04:05") | ||
76 | + filterString = append(filterString, "FModifyDate>='"+str+"'") | ||
77 | + } | ||
78 | + client, err := newK3cloudClient() | ||
79 | + if err != nil { | ||
80 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
81 | + } | ||
82 | + fieldKeys := []string{ | ||
83 | + "FMATERIALID", "FSpecification", "FName", "FNumber", | ||
84 | + "FDocumentStatus", "FForbidStatus", "FErpClsID", | ||
85 | + "FBaseUnitId", "FBaseUnitId.FName", "FCreateDate", "FModifyDate", | ||
86 | + "FForbidDate", "FApproveDate", "FMaterialGroup", "FMaterialGroup.FName", | ||
87 | + "FRefStatus", "FMaterialGroup.FNumber", "FUseOrgId", | ||
88 | + } | ||
89 | + var ( | ||
90 | + startRow int | ||
91 | + allResult []map[string]string | ||
92 | + queryErr error | ||
93 | + ) | ||
94 | + for { | ||
95 | + result, err := client.ExecuteBillQuery(k3cloud.RequestExecuteBillQuery{ | ||
96 | + FormId: "BD_MATERIAL", | ||
97 | + Data: k3cloud.ExecuteBillQueryData{ | ||
98 | + FormId: "BD_MATERIAL", | ||
99 | + FieldKeys: strings.Join(fieldKeys, ","), //查询的字段 | ||
100 | + StartRow: startRow, | ||
101 | + Limit: 1000, | ||
102 | + FilterString: strings.Join(filterString, " and "), | ||
103 | + }, | ||
104 | + }) | ||
105 | + if err != nil { | ||
106 | + queryErr = err | ||
107 | + break | ||
108 | + } | ||
109 | + mp := result.ToMapString() | ||
110 | + if len(mp) == 0 { | ||
111 | + break | ||
112 | + } | ||
113 | + allResult = append(allResult, mp...) | ||
114 | + startRow += 1000 | ||
115 | + } | ||
116 | + if queryErr != nil { | ||
117 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
118 | + } | ||
119 | + var ( | ||
120 | + materialModels []models.MaterialK3cloud | ||
121 | + materialTemp models.MaterialK3cloud | ||
122 | + ) | ||
123 | + nowTime := time.Now() | ||
124 | + for _, item := range allResult { | ||
125 | + materialId, err := strconv.Atoi(item["FMATERIALID"]) | ||
126 | + if err != nil { | ||
127 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
128 | + } | ||
129 | + fErpClsID, _ := strconv.Atoi(item["FErpClsID"]) | ||
130 | + fBaseUnitId, _ := strconv.Atoi(item["FBaseUnitId"]) | ||
131 | + materialGroup, _ := strconv.Atoi(item["MaterialGroup"]) | ||
132 | + fUseOrgId, _ := strconv.Atoi(item["FUseOrgId"]) | ||
133 | + refStatus, _ := strconv.Atoi(item["RefStatus"]) | ||
134 | + fCreateDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FCreateDate"]) | ||
135 | + fModifyDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FModifyDate"]) | ||
136 | + fForbidDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FForbidDate"]) | ||
137 | + fApproveDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FApproveDate"]) | ||
138 | + materialTemp = models.MaterialK3cloud{ | ||
139 | + MaterialId: materialId, | ||
140 | + Name: item["FName"], | ||
141 | + Number: item["FNumber"], | ||
142 | + Specification: item["FSpecification"], | ||
143 | + ForbidStatus: item["FForbidStatus"], | ||
144 | + ErpClsId: fErpClsID, | ||
145 | + BaseUnitId: fBaseUnitId, | ||
146 | + BaseUnitName: item["FBaseUnitId.FName"], | ||
147 | + CreateDate: fCreateDate, | ||
148 | + ModifyDate: fModifyDate, | ||
149 | + ForbidDate: fForbidDate, | ||
150 | + ApproveDate: fApproveDate, | ||
151 | + MaterialGroup: materialGroup, | ||
152 | + MaterialGroupNumber: item["FMaterialGroup.FNumber"], | ||
153 | + MaterialGroupName: item["FMaterialGroup.FName"], | ||
154 | + RefStatus: refStatus, | ||
155 | + UseOrgId: fUseOrgId, | ||
156 | + JoinProductId: 0, | ||
157 | + DataVersion: nowTime.Unix(), | ||
158 | + } | ||
159 | + materialModels = append(materialModels, materialTemp) | ||
160 | + } | ||
161 | + var ( | ||
162 | + materialDao *dao.MaterialK3cloudDao | ||
163 | + ) | ||
164 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
165 | + if err != nil { | ||
166 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
167 | + } | ||
168 | + if err := transactionContext.StartTransaction(); err != nil { | ||
169 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
170 | + } | ||
171 | + defer func() { | ||
172 | + transactionContext.RollbackTransaction() | ||
173 | + }() | ||
174 | + materialDao, err = dao.NewMaterialK3cloudDao(transactionContext.(*pgTransaction.TransactionContext)) | ||
175 | + if err != nil { | ||
176 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
177 | + } | ||
178 | + //同步MaterialK3cloud表数据 | ||
179 | + err = materialDao.SyncDataMaterialK3cloud(materialModels) | ||
180 | + if err != nil { | ||
181 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
182 | + } | ||
183 | + //MaterialK3cloud表数据到Proudct表 | ||
184 | + err = materialDao.SyncDataProudct(nowTime.Unix()) | ||
185 | + if err != nil { | ||
186 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
187 | + } | ||
188 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
189 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
190 | + } | ||
191 | + return nil | ||
192 | +} |
pkg/constant/.gitignore
0 → 100644
1 | +/postgresql_local.go |
1 | +package dao |
1 | package dao | 1 | package dao |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "fmt" | ||
5 | + "strconv" | ||
6 | + "strings" | ||
7 | + | ||
4 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | 8 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" |
5 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models" | 9 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models" |
6 | ) | 10 | ) |
@@ -9,6 +13,16 @@ type MaterialK3cloudDao struct { | @@ -9,6 +13,16 @@ type MaterialK3cloudDao struct { | ||
9 | transactionContext *pgTransaction.TransactionContext | 13 | transactionContext *pgTransaction.TransactionContext |
10 | } | 14 | } |
11 | 15 | ||
16 | +func NewMaterialK3cloudDao(transactionContext *pgTransaction.TransactionContext) (*MaterialK3cloudDao, error) { | ||
17 | + if transactionContext == nil { | ||
18 | + return nil, fmt.Errorf("transactionContext参数不能为nil") | ||
19 | + } else { | ||
20 | + return &MaterialK3cloudDao{ | ||
21 | + transactionContext: transactionContext, | ||
22 | + }, nil | ||
23 | + } | ||
24 | +} | ||
25 | + | ||
12 | //SyncDataMaterialK3cloud 同步MaterialK3cloud表数据 | 26 | //SyncDataMaterialK3cloud 同步MaterialK3cloud表数据 |
13 | func (d *MaterialK3cloudDao) SyncDataMaterialK3cloud(data []models.MaterialK3cloud) error { | 27 | func (d *MaterialK3cloudDao) SyncDataMaterialK3cloud(data []models.MaterialK3cloud) error { |
14 | // -- 插入或者更新 | 28 | // -- 插入或者更新 |
@@ -35,25 +49,118 @@ func (d *MaterialK3cloudDao) SyncDataMaterialK3cloud(data []models.MaterialK3clo | @@ -35,25 +49,118 @@ func (d *MaterialK3cloudDao) SyncDataMaterialK3cloud(data []models.MaterialK3clo | ||
35 | // EXCLUDED."forbid_date",EXCLUDED."approve_date",EXCLUDED."material_group", | 49 | // EXCLUDED."forbid_date",EXCLUDED."approve_date",EXCLUDED."material_group", |
36 | // EXCLUDED."material_group_number",EXCLUDED."material_group_name", | 50 | // EXCLUDED."material_group_number",EXCLUDED."material_group_name", |
37 | // EXCLUDED."ref_status ",EXCLUDED."data_version" ) | 51 | // EXCLUDED."ref_status ",EXCLUDED."data_version" ) |
52 | + sqlValues := []string{} | ||
53 | + var strTemp []string | ||
54 | + for i := range data { | ||
55 | + strTemp = make([]string, 0, 18) | ||
56 | + strTemp = append(strTemp, strconv.Itoa(data[i].MaterialId)) | ||
57 | + strTemp = append(strTemp, `'`+data[i].Name+`'`) | ||
58 | + strTemp = append(strTemp, `'`+data[i].Number+`'`) | ||
59 | + strTemp = append(strTemp, `'`+data[i].Specification+`'`) | ||
60 | + strTemp = append(strTemp, `'`+data[i].ForbidStatus+`'`) | ||
61 | + strTemp = append(strTemp, strconv.Itoa(data[i].ErpClsId)) | ||
62 | + strTemp = append(strTemp, strconv.Itoa(data[i].BaseUnitId)) | ||
63 | + strTemp = append(strTemp, `'`+data[i].BaseUnitName+`'`) | ||
64 | + if data[i].CreateDate.IsZero() { | ||
65 | + strTemp = append(strTemp, `NULL`) | ||
66 | + } else { | ||
67 | + strTemp = append(strTemp, `'`+data[i].CreateDate.String()+`'`) | ||
68 | + } | ||
69 | + if data[i].ModifyDate.IsZero() { | ||
70 | + strTemp = append(strTemp, `NULL`) | ||
71 | + } else { | ||
72 | + strTemp = append(strTemp, `'`+data[i].ModifyDate.String()+`'`) | ||
73 | + } | ||
74 | + if data[i].ForbidDate.IsZero() { | ||
75 | + strTemp = append(strTemp, `NULL`) | ||
76 | + } else { | ||
77 | + strTemp = append(strTemp, `'`+data[i].ForbidDate.String()+`'`) | ||
78 | + } | ||
79 | + if data[i].ApproveDate.IsZero() { | ||
80 | + strTemp = append(strTemp, `NULL`) | ||
81 | + } else { | ||
82 | + strTemp = append(strTemp, `'`+data[i].ApproveDate.String()+`'`) | ||
83 | + } | ||
84 | + strTemp = append(strTemp, strconv.Itoa(data[i].MaterialGroup)) | ||
85 | + strTemp = append(strTemp, `'`+data[i].MaterialGroupNumber+`'`) | ||
86 | + strTemp = append(strTemp, `'`+data[i].MaterialGroupName+`'`) | ||
87 | + strTemp = append(strTemp, strconv.Itoa(data[i].RefStatus)) | ||
88 | + //关联的产品表id ,使用 product 产品表的自增序列表 | ||
89 | + strTemp = append(strTemp, "nextval('manufacture.product_product_id_seq'::regclass)") | ||
90 | + strTemp = append(strTemp, strconv.Itoa(int(data[i].DataVersion))) | ||
91 | + strTemp = append(strTemp, strconv.Itoa(data[i].UseOrgId)) | ||
92 | + sqlValues = append(sqlValues, "("+strings.Join(strTemp, ",")+")") | ||
93 | + | ||
94 | + } | ||
95 | + var valueTemp []string | ||
96 | + for i := 0; i < len(sqlValues); i += 100 { | ||
97 | + if i < len(sqlValues)-100 { | ||
98 | + valueTemp = sqlValues[i:100] | ||
99 | + } else { | ||
100 | + valueTemp = sqlValues[i:] | ||
101 | + } | ||
102 | + sql := `INSERT INTO "manufacture"."material_k3cloud" ( | ||
103 | + "material_id","name","number","specification","forbid_status", | ||
104 | + "erp_cls_id","base_unit_id","base_unit_name","create_date", | ||
105 | + "modify_date","forbid_date","approve_date","material_group", | ||
106 | + "material_group_number","material_group_name","ref_status ", | ||
107 | + "join_product_id","data_version","use_org_id" ) | ||
108 | + VALUES ` + strings.Join(valueTemp, ",") + | ||
109 | + ` ON conflict ( material_id ) DO | ||
110 | + UPDATE | ||
111 | + SET ( | ||
112 | + "name","number","specification","forbid_status","erp_cls_id", | ||
113 | + "base_unit_id","base_unit_name","create_date","modify_date", | ||
114 | + "forbid_date","approve_date","material_group","material_group_number", | ||
115 | + "material_group_name","ref_status ","data_version" ) = ( | ||
116 | + EXCLUDED."name",EXCLUDED."number",EXCLUDED."specification", | ||
117 | + EXCLUDED."forbid_status",EXCLUDED."erp_cls_id",EXCLUDED."base_unit_id", | ||
118 | + EXCLUDED."base_unit_name",EXCLUDED."create_date",EXCLUDED."modify_date", | ||
119 | + EXCLUDED."forbid_date",EXCLUDED."approve_date",EXCLUDED."material_group", | ||
120 | + EXCLUDED."material_group_number",EXCLUDED."material_group_name", | ||
121 | + EXCLUDED."ref_status ",EXCLUDED."data_version" )` | ||
122 | + _, err := d.transactionContext.PgTx.Exec(sql) | ||
123 | + if err != nil { | ||
124 | + return err | ||
125 | + } | ||
126 | + } | ||
127 | + | ||
38 | return nil | 128 | return nil |
39 | } | 129 | } |
40 | 130 | ||
41 | -//SyncDataProudct 同步Proudct表数据 | ||
42 | -func (d *MaterialK3cloudDao) SyncDataProudct(version int) error { | 131 | +//SyncDataProudct 同步MaterialK3cloud表数据到Proudct表 |
132 | +func (d *MaterialK3cloudDao) SyncDataProudct(version int64) error { | ||
43 | // -- 插入或者更新 | 133 | // -- 插入或者更新 |
44 | - // INSERT INTO "manufacture"."product"( | ||
45 | - // "company_id", "org_id", "product_id", "product_code", "product_name", | ||
46 | - // "product_category", "product_spec", "created_at", "updated_at" | ||
47 | - // ) | ||
48 | - // SELECT 0,0,"join_product_id","number","name","material_group_name",'{}',now(),now() | ||
49 | - // FROM "manufacture"."material_k3cloud" WHERE "data_version"=0000 | ||
50 | - // ON conflict ( product_id ) DO | ||
51 | - // UPDATE | ||
52 | - // SET ( | ||
53 | - // "company_id", "org_id", "product_id", "product_code", "product_name", | ||
54 | - // "product_category", "product_spec", "created_at", "updated_at")=( | ||
55 | - // EXCLUDED."company_id", EXCLUDED."org_id",EXCLUDED."product_id", | ||
56 | - // EXCLUDED."product_code",EXCLUDED."product_name",EXCLUDED."product_category", | ||
57 | - // EXCLUDED."product_spec", EXCLUDED."created_at", EXCLUDED."updated_at") | ||
58 | - return nil | 134 | + sql := `INSERT INTO "manufacture"."product"( |
135 | + "company_id", "org_id", "product_id", "product_code", "product_name", | ||
136 | + "product_category", "product_spec", "created_at", "updated_at" | ||
137 | + ) | ||
138 | + SELECT 0,use_org_id,"join_product_id","number","name","material_group_name", | ||
139 | + json_build_object('unit',specification),now(),now() | ||
140 | + FROM "manufacture"."material_k3cloud" WHERE "data_version"=? | ||
141 | + ON conflict ( product_id ) DO | ||
142 | + UPDATE | ||
143 | + SET ( | ||
144 | + "company_id", "org_id", "product_id", "product_code", "product_name", | ||
145 | + "product_category", "product_spec", "created_at", "updated_at")=( | ||
146 | + EXCLUDED."company_id", EXCLUDED."org_id",EXCLUDED."product_id", | ||
147 | + EXCLUDED."product_code",EXCLUDED."product_name",EXCLUDED."product_category", | ||
148 | + EXCLUDED."product_spec", EXCLUDED."updated_at") ` | ||
149 | + _, err := d.transactionContext.PgTx.Exec(sql, version) | ||
150 | + return err | ||
151 | +} | ||
152 | + | ||
153 | +func (d *MaterialK3cloudDao) GetLastVersion() (int64, error) { | ||
154 | + var materialData []models.MaterialK3cloud | ||
155 | + err := d.transactionContext.PgTx.Model(&materialData). | ||
156 | + Order("data_version DESC"). | ||
157 | + Limit(1). | ||
158 | + Select() | ||
159 | + if err != nil { | ||
160 | + return 0, err | ||
161 | + } | ||
162 | + if len(materialData) == 0 { | ||
163 | + return 0, nil | ||
164 | + } | ||
165 | + return materialData[0].DataVersion, nil | ||
59 | } | 166 | } |
@@ -8,7 +8,7 @@ type DataLogK3cloud struct { | @@ -8,7 +8,7 @@ type DataLogK3cloud struct { | ||
8 | FormId string `comment:"formId" pg:"form_id"` | 8 | FormId string `comment:"formId" pg:"form_id"` |
9 | RequestParam string `comment:"请求参数" pg:"request_param"` | 9 | RequestParam string `comment:"请求参数" pg:"request_param"` |
10 | BeginAt int64 `comment:"开始时间" pg:"begin_at"` | 10 | BeginAt int64 `comment:"开始时间" pg:"begin_at"` |
11 | - EndAt int64 `comment:"结束时间" pg:"begin_at"` | 11 | + EndAt int64 `comment:"结束时间" pg:"end_at"` |
12 | DataVersion int64 `comment:"数据版本" pg:"data_version"` | 12 | DataVersion int64 `comment:"数据版本" pg:"data_version"` |
13 | IsSuccess int `comment:"是否成功" pg:"is_success"` | 13 | IsSuccess int `comment:"是否成功" pg:"is_success"` |
14 | Error string `comment:"错误信息" pg:"error"` | 14 | Error string `comment:"错误信息" pg:"error"` |
1 | package models | 1 | package models |
2 | 2 | ||
3 | +import "time" | ||
4 | + | ||
3 | //MaterialK3cloud 采集自金蝶k3cloud物料数据 | 5 | //MaterialK3cloud 采集自金蝶k3cloud物料数据 |
4 | type MaterialK3cloud struct { | 6 | type MaterialK3cloud struct { |
5 | - tableName string `comment:"采集自金蝶k3cloud物料数据" pg:"manufacture.material_k3cloud,alias:material_k3cloud"` | ||
6 | - MaterialId int64 `pg:",pk"` | ||
7 | - Name string `comment:"物料名称" pg:"name"` | ||
8 | - Number string `comment:"物料编码" pg:"number"` | ||
9 | - Specification string `comment:"规格型号" pg:"specification"` | ||
10 | - ForbidStatus string `comment:"禁用状态,"A":否,"B":是" pg:"forbid_status"` | ||
11 | - ErpClsId int `comment:"物料属性" pg:"erp_cls_id"` | ||
12 | - BaseUnitId int `comment:"基本单位" pg:"base_unit_id"` | ||
13 | - BaseUnitName string `comment:"基本单位名称" pg:"base_unit_name"` | ||
14 | - CreateDate string `comment:"创建时间" pg:"create_date"` | ||
15 | - ModifyDate string `comment:"修改时间" pg:"modify_date"` | ||
16 | - ForbidDate string `comment:"禁用时间" pg:"forbid_date"` | ||
17 | - ApproveDate string `comment:"审核时间" pg:"approve_date"` | ||
18 | - MaterialGroup int `comment:"物料分组" pg:"material_group"` | ||
19 | - MaterialGroupNumber string `comment:"物料分组编码" pg:"material_group_number"` | ||
20 | - MaterialGroupName string `comment:"物料分组名称" pg:"material_group_name"` | ||
21 | - RefStatus int `comment:"是否使用" pg:"ref_status"` | ||
22 | - JoinProductId int64 `comment:"关联的product表id" pg:"join_product_id"` | ||
23 | - DataVersion int64 `comment:"数据版本" pg:"data_version"` | 7 | + tableName string `comment:"采集自金蝶k3cloud物料数据" pg:"manufacture.material_k3cloud,alias:material_k3cloud"` |
8 | + MaterialId int `pg:",pk"` | ||
9 | + Name string `comment:"物料名称" pg:"name"` | ||
10 | + Number string `comment:"物料编码" pg:"number"` | ||
11 | + Specification string `comment:"规格型号" pg:"specification"` | ||
12 | + ForbidStatus string `comment:"禁用状态,"A":否,"B":是" pg:"forbid_status"` | ||
13 | + ErpClsId int `comment:"物料属性" pg:"erp_cls_id"` | ||
14 | + BaseUnitId int `comment:"基本单位" pg:"base_unit_id"` | ||
15 | + BaseUnitName string `comment:"基本单位名称" pg:"base_unit_name"` | ||
16 | + CreateDate time.Time `comment:"创建时间" pg:"create_date,type:timestamp"` | ||
17 | + ModifyDate time.Time `comment:"修改时间" pg:"modify_date,type:timestamp"` | ||
18 | + ForbidDate time.Time `comment:"禁用时间" pg:"forbid_date,type:timestamp"` | ||
19 | + ApproveDate time.Time `comment:"审核时间" pg:"approve_date,type:timestamp"` | ||
20 | + MaterialGroup int `comment:"物料分组" pg:"material_group"` | ||
21 | + MaterialGroupNumber string `comment:"物料分组编码" pg:"material_group_number"` | ||
22 | + MaterialGroupName string `comment:"物料分组名称" pg:"material_group_name"` | ||
23 | + RefStatus int `comment:"是否使用" pg:"ref_status"` | ||
24 | + UseOrgId int `comment:"使用组织" pg:"use_org_id"` | ||
25 | + JoinProductId int64 `comment:"关联的product表id" pg:"join_product_id"` | ||
26 | + DataVersion int64 `comment:"数据版本" pg:"data_version"` | ||
24 | } | 27 | } |
25 | 28 | ||
26 | //批量处理sql脚本样例 | 29 | //批量处理sql脚本样例 |
@@ -34,12 +34,13 @@ func TestExecuteBillQuery(t *testing.T) { | @@ -34,12 +34,13 @@ func TestExecuteBillQuery(t *testing.T) { | ||
34 | // {"FApproveDate", "审核日期"}, {"FOldNumber", "旧物料编码"}, {"FMaterialGroup", "物料分组"}, {"FPLMMaterialId", "PLM物料内码"}, {"FMaterialSRC", "物料来源"}, | 34 | // {"FApproveDate", "审核日期"}, {"FOldNumber", "旧物料编码"}, {"FMaterialGroup", "物料分组"}, {"FPLMMaterialId", "PLM物料内码"}, {"FMaterialSRC", "物料来源"}, |
35 | // {"FIsSalseByNet", "是否网销"}, {"FIsAutoAllocate", "自动分配"}, {"FSPUID", "SPU信息"}, {"FPinYin", "拼音"}, {"FDSMatchByLot", "按批号匹配供需"}, | 35 | // {"FIsSalseByNet", "是否网销"}, {"FIsAutoAllocate", "自动分配"}, {"FSPUID", "SPU信息"}, {"FPinYin", "拼音"}, {"FDSMatchByLot", "按批号匹配供需"}, |
36 | // {"FForbidReson", "禁用原因"}, {"FRefStatus", "已使用"}} | 36 | // {"FForbidReson", "禁用原因"}, {"FRefStatus", "已使用"}} |
37 | + //FMATERIALID,FSpecification,FName,FNumber,FModifyDate,FBaseUnitId.FName,FUseOrgId.FName | ||
37 | result, err := client.ExecuteBillQuery(RequestExecuteBillQuery{ | 38 | result, err := client.ExecuteBillQuery(RequestExecuteBillQuery{ |
38 | FormId: "BD_MATERIAL", | 39 | FormId: "BD_MATERIAL", |
39 | Data: ExecuteBillQueryData{ | 40 | Data: ExecuteBillQueryData{ |
40 | FormId: "BD_MATERIAL", | 41 | FormId: "BD_MATERIAL", |
41 | - FieldKeys: "FMATERIALID,FSpecification,FName,FNumber,FModifyDate,FBaseUnitId.FName,FUseOrgId.FName", //查询的字段 | ||
42 | - TopRowCount: 5, | 42 | + FieldKeys: "FMATERIALID,FSpecification,FName,FNumber,FModifyDate,FBaseUnitId.FName,FUseOrgId,FUseOrgId.FName", //查询的字段 |
43 | + TopRowCount: 0, | ||
43 | FilterString: `FMaterialGroup.FNumber like '05%' and FModifyDate<'2022-01-08T19:36:06'`, | 44 | FilterString: `FMaterialGroup.FNumber like '05%' and FModifyDate<'2022-01-08T19:36:06'`, |
44 | }, | 45 | }, |
45 | }) | 46 | }) |
-
请 注册 或 登录 后发表评论