作者 yangfu

Merge branch 'feature_material' into test

正在显示 83 个修改的文件 包含 4123 行增加140 行删除

要显示太多修改。

为保证性能只显示 83 of 83+ 个文件。

  1 +select count(*) from manufacture.device_running_record where device_running_record_id <=2000000
  2 +select count(*) from manufacture.device_collections where created_at <'2022-6-01 16:00:00'
  3 +
  4 +--1.备份设备运行数据-按数量
  5 +-- 备份数据 2000000
  6 +select * into table manufacture.device_running_record_0_2000
  7 +from manufacture.device_running_record
  8 +where device_running_record_id <=2000000
  9 +-- 删除数据
  10 +delete from manufacture.device_running_record where device_running_record_id <=2000000;
  11 +-- 重建索引
  12 +reindex table manufacture.device_running_record;
  13 +
  14 +
  15 +
  16 +--2.备份设备采集数据-按时间
  17 +-- 备份数据 2000000
  18 +select * into table manufacture.device_collections_history
  19 +from manufacture.device_collections
  20 +where created_at <'2022-6-01 16:00:00'
  21 +-- 删除数据
  22 +delete from manufacture.device_collections where created_at <'2022-6-01 16:00:00';
  23 +-- 重建索引
  24 +reindex table manufacture.device_collections;
  25 +
  26 +
  27 +--3.查看备份情况
  28 +select count(*) from manufacture.device_running_record_0_2000
  29 +select count(*) from manufacture.device_collections_history
  30 +select count(*) from manufacture.device_collections where created_at <'2022-6-01 16:00:00'
  1 +delete FROM "dictionarys" where dictionary_id in (3812266576427090944);
  2 +
  3 +INSERT INTO "public"."dictionarys"("dictionary_id", "dict_code", "dict_name", "describe", "dict_items") VALUES (3972873532463383552, 'ACM-001', '天联共创-生产制造-物料属性', '', '[{"sort": 1, "isShow": 1, "itemCode": "1", "itemLabel": "", "itemValue": "外购"}, {"sort": 2, "isShow": 1, "itemCode": "2", "itemLabel": "", "itemValue": "自制"}, {"sort": 3, "isShow": 1, "itemCode": "3", "itemLabel": "", "itemValue": "委外"}]');
  4 +INSERT INTO "public"."dictionarys"("dictionary_id", "dict_code", "dict_name", "describe", "dict_items") VALUES (3972875981165167616, 'ACM-002', '天联共创-生产制造-物料管理-物料类别', '', '[{"sort": 1, "isShow": 1, "itemCode": "1", "itemLabel": "", "itemValue": "原材料"}, {"sort": 2, "isShow": 1, "itemCode": "2", "itemLabel": "", "itemValue": "半成品"}, {"sort": 3, "isShow": 1, "itemCode": "3", "itemLabel": "", "itemValue": "成品"}]');
  5 +INSERT INTO "public"."dictionarys"("dictionary_id", "dict_code", "dict_name", "describe", "dict_items") VALUES (3972882719129994240, 'ACM-003', '天联共创-生产制造-单位', '', '[{"sort": 1, "isShow": 1, "itemCode": "1", "itemLabel": "", "itemValue": "千克"}, {"sort": 2, "isShow": 1, "itemCode": "2", "itemLabel": "", "itemValue": "个"}, {"sort": 3, "isShow": 1, "itemCode": "3", "itemLabel": "", "itemValue": "包"}, {"sort": 4, "isShow": 1, "itemCode": "4", "itemLabel": "", "itemValue": "箱"}, {"sort": 5, "isShow": 1, "itemCode": "5", "itemLabel": "", "itemValue": "片"}, {"sort": 6, "isShow": 1, "itemCode": "6", "itemLabel": "", "itemValue": "套"}, {"sort": 7, "isShow": 1, "itemCode": "7", "itemLabel": "", "itemValue": "份"}, {"sort": 8, "isShow": 1, "itemCode": "8", "itemLabel": "", "itemValue": "台"}, {"sort": 9, "isShow": 1, "itemCode": "9", "itemLabel": "", "itemValue": "米"}, {"sort": 10, "isShow": 1, "itemCode": "10", "itemLabel": "", "itemValue": "升"}, {"sort": 11, "isShow": 1, "itemCode": "11", "itemLabel": "", "itemValue": "辆"}, {"sort": 12, "isShow": 1, "itemCode": "12", "itemLabel": "", "itemValue": "秒"}, {"sort": 13, "isShow": 1, "itemCode": "13", "itemLabel": "", "itemValue": "栋"}, {"sort": 14, "isShow": 1, "itemCode": "14", "itemLabel": "", "itemValue": "袋"}, {"sort": 15, "isShow": 1, "itemCode": "15", "itemLabel": "", "itemValue": "kg"}, {"sort": 16, "isShow": 1, "itemCode": "16", "itemLabel": "", "itemValue": "串"}, {"sort": 17, "isShow": 1, "itemCode": "17", "itemLabel": "", "itemValue": "件"}]');
  6 +INSERT INTO "public"."dictionarys"("dictionary_id", "dict_code", "dict_name", "describe", "dict_items") VALUES (3978995238135399424, 'ACM-004', '天联共创-生产制造-单位换算-物料类别', '', '[{"sort": 1, "isShow": 1, "itemCode": "1", "itemLabel": "", "itemValue": "南瓜饼串"}, {"sort": 2, "isShow": 1, "itemCode": "2", "itemLabel": "", "itemValue": "包装袋(空)"}, {"sort": 3, "isShow": 1, "itemCode": "3", "itemLabel": "", "itemValue": "包装袋(件数)"}, {"sort": 4, "isShow": 1, "itemCode": "4", "itemLabel": "", "itemValue": "装箱(件数)"}]');
  7 +INSERT INTO "public"."dictionarys"("dictionary_id", "dict_code", "dict_name", "describe", "dict_items") VALUES (3812266576427090944, 'XTZD-003', '生产制造-单位', '', '[{"sort": 1, "isShow": 1, "itemCode": "1", "itemLabel": "", "itemValue": "个"}, {"sort": 2, "isShow": 1, "itemCode": "2", "itemLabel": "", "itemValue": "袋"}, {"sort": 3, "isShow": 1, "itemCode": "3", "itemLabel": "", "itemValue": "kg"}, {"sort": 4, "isShow": 1, "itemCode": "4", "itemLabel": "", "itemValue": "串"}, {"sort": 5, "isShow": 1, "itemCode": "5", "itemLabel": "", "itemValue": "箱"}, {"sort": 6, "isShow": 1, "itemCode": "6", "itemLabel": "", "itemValue": "件"}]');
  1 +
  2 +-- 表product_material_group 增加唯一索引 idx_unq_product_material_group_company_id_org_id_material_group_number
  3 +
  4 +create UNIQUE INDEX idx_unq_product_material_group_company_id_org_id_material_group_number on manufacture.product_material_group using btree(company_id,org_id,material_group_number,deleted_at);
  5 +
  6 +-- 表product_material 增加唯一索引 idx_unq_product_material_company_id_material_number
  7 +create UNIQUE INDEX idx_unq_product_material_company_id_material_number on manufacture.product_material using btree(company_id,material_number,deleted_at);
@@ -3,6 +3,7 @@ package main @@ -3,6 +3,7 @@ package main
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 "github.com/beego/beego/v2/server/web" 5 "github.com/beego/beego/v2/server/web"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/crontab"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
@@ -10,7 +11,6 @@ import ( @@ -10,7 +11,6 @@ import (
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/task" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/task"
11 "time" 12 "time"
12 13
13 - "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/crontab"  
14 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" 14 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
15 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg" 15 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
16 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" 16 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis"
@@ -60,6 +60,12 @@ func (crontabService *CrontabService) initTask() { @@ -60,6 +60,12 @@ func (crontabService *CrontabService) initTask() {
60 60
61 syncProductPlan := task.NewTask("定时同步车间计划", "0 5 * * * *", SyncProductPlan) 61 syncProductPlan := task.NewTask("定时同步车间计划", "0 5 * * * *", SyncProductPlan)
62 task.AddTask("SyncProductPlan", syncProductPlan) 62 task.AddTask("SyncProductPlan", syncProductPlan)
  63 +
  64 + syncMaterialGroup := task.NewTask("定时同步物料分组", "0 0 0/2 * * *", SyncMaterialGroup)
  65 + task.AddTask("syncMaterialGroup", syncMaterialGroup)
  66 +
  67 + syncMaterial := task.NewTask("定时同步物料", "0 0 0/2 * * *", SyncMaterial)
  68 + task.AddTask("syncMaterial", syncMaterial)
63 } 69 }
64 70
65 func (crontabService *CrontabService) StartCrontabTask() { 71 func (crontabService *CrontabService) StartCrontabTask() {
  1 +package crontab
  2 +
  3 +import (
  4 + "context"
  5 + "fmt"
  6 + "github.com/linmadan/egglib-go/transaction/pg"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/syncdata"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
  10 + "runtime/debug"
  11 + "time"
  12 +)
  13 +
  14 +// SyncMaterial 定时同步物料
  15 +func SyncMaterial(ctx context.Context) error {
  16 + defer func() {
  17 + if r := recover(); r != nil {
  18 + log.Logger.Error(fmt.Sprintf("%v", r), map[string]interface{}{"task": "定时同步物料", "stack": string(debug.Stack())})
  19 + }
  20 + }()
  21 + transactionContext, err := factory.CreateTransactionContext(nil)
  22 + if err != nil {
  23 + return err
  24 + }
  25 + if err := transactionContext.StartTransaction(); err != nil {
  26 + return err
  27 + }
  28 + defer func() {
  29 + if err != nil {
  30 + log.Logger.Error("【定时同步物料】 失败:" + err.Error())
  31 + }
  32 + transactionContext.RollbackTransaction()
  33 + }()
  34 + var pullType string = ""
  35 + if val := ctx.Value("pullType"); val != nil {
  36 + pullType = val.(string)
  37 + }
  38 + log.Logger.Debug("【定时同步物料】 启动")
  39 + pullK3CloudService := syncdata.PullDataK3CloudService{}
  40 + if err := pullK3CloudService.SyncDataMaterial(transactionContext.(*pg.TransactionContext), pullType, time.Time{}); err != nil {
  41 + log.Logger.Error(err.Error(), map[string]interface{}{"task": "定时同步物料"})
  42 + return nil
  43 + }
  44 + if err = transactionContext.CommitTransaction(); err != nil {
  45 + return err
  46 + }
  47 + return nil
  48 +}
  1 +package crontab
  2 +
  3 +import (
  4 + "context"
  5 + "fmt"
  6 + "github.com/linmadan/egglib-go/transaction/pg"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/syncdata"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
  10 + "runtime/debug"
  11 +)
  12 +
  13 +// SyncMaterialGroup 定时同步物料分组
  14 +func SyncMaterialGroup(ctx context.Context) error {
  15 + defer func() {
  16 + if r := recover(); r != nil {
  17 + log.Logger.Error(fmt.Sprintf("%v", r), map[string]interface{}{"task": "定时同步物料分组", "stack": string(debug.Stack())})
  18 + }
  19 + }()
  20 + transactionContext, err := factory.CreateTransactionContext(nil)
  21 + if err != nil {
  22 + return err
  23 + }
  24 + if err := transactionContext.StartTransaction(); err != nil {
  25 + return err
  26 + }
  27 + defer func() {
  28 + if err != nil {
  29 + log.Logger.Error("【定时同步物料分组】 失败:" + err.Error())
  30 + }
  31 + transactionContext.RollbackTransaction()
  32 + }()
  33 +
  34 + log.Logger.Debug("【定时同步物料分组】 启动")
  35 + pullK3CloudService := syncdata.PullDataK3CloudService{}
  36 + if err := pullK3CloudService.SyncDataMaterialGroup(transactionContext.(*pg.TransactionContext)); err != nil {
  37 + log.Logger.Error(err.Error(), map[string]interface{}{"task": "定时同步物料分组"})
  38 + return nil
  39 + }
  40 + if err = transactionContext.CommitTransaction(); err != nil {
  41 + return err
  42 + }
  43 + return nil
  44 +}
@@ -413,6 +413,58 @@ func FastPgDeviceDailyRunningRecord(transactionContext application.TransactionCo @@ -413,6 +413,58 @@ func FastPgDeviceDailyRunningRecord(transactionContext application.TransactionCo
413 return rep, mod, err 413 return rep, mod, err
414 } 414 }
415 415
  416 +// FastProductMaterialGroup 快速返回物料
  417 +//
  418 +// transactionContext 事务
  419 +// id 对象唯一标识
  420 +func FastProductMaterialGroup(transactionContext application.TransactionContext, id int, options ...option) (domain.ProductMaterialGroupRepository, *domain.ProductMaterialGroup, error) {
  421 + var rep domain.ProductMaterialGroupRepository
  422 + var mod *domain.ProductMaterialGroup
  423 + var err error
  424 + if value, err := CreateProductMaterialGroupRepository(map[string]interface{}{
  425 + "transactionContext": transactionContext,
  426 + }); err != nil {
  427 + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  428 + } else {
  429 + rep = value
  430 + }
  431 + if id > 0 {
  432 + if mod, err = rep.FindOne(map[string]interface{}{"productMaterialGroupId": id}); err != nil {
  433 + if err == domain.ErrorNotFound {
  434 + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该物料分组不存在")
  435 + }
  436 + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  437 + }
  438 + }
  439 + return rep, mod, err
  440 +}
  441 +
  442 +// FastProductMaterialGroup 快速返回物料
  443 +//
  444 +// transactionContext 事务
  445 +// id 对象唯一标识
  446 +func FastProductMaterial(transactionContext application.TransactionContext, id int, options ...option) (domain.ProductMaterialRepository, *domain.ProductMaterial, error) {
  447 + var rep domain.ProductMaterialRepository
  448 + var mod *domain.ProductMaterial
  449 + var err error
  450 + if value, err := CreateProductMaterialRepository(map[string]interface{}{
  451 + "transactionContext": transactionContext,
  452 + }); err != nil {
  453 + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  454 + } else {
  455 + rep = value
  456 + }
  457 + if id > 0 {
  458 + if mod, err = rep.FindOne(map[string]interface{}{"productMaterialId": id}); err != nil {
  459 + if err == domain.ErrorNotFound {
  460 + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该物料分组不存在")
  461 + }
  462 + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  463 + }
  464 + }
  465 + return rep, mod, err
  466 +}
  467 +
416 /***** 2.配置 *****/ 468 /***** 2.配置 *****/
417 469
418 type FastOptions struct { 470 type FastOptions struct {
@@ -141,3 +141,19 @@ func CreateDeviceDailyRunningRecordRepository(options map[string]interface{}) (d @@ -141,3 +141,19 @@ func CreateDeviceDailyRunningRecordRepository(options map[string]interface{}) (d
141 } 141 }
142 return repository.NewDeviceDailyRunningRecordRepository(transactionContext) 142 return repository.NewDeviceDailyRunningRecordRepository(transactionContext)
143 } 143 }
  144 +
  145 +func CreateProductMaterialGroupRepository(options map[string]interface{}) (domain.ProductMaterialGroupRepository, error) {
  146 + var transactionContext *pg.TransactionContext
  147 + if value, ok := options["transactionContext"]; ok {
  148 + transactionContext = value.(*pg.TransactionContext)
  149 + }
  150 + return repository.NewProductMaterialGroupRepository(transactionContext)
  151 +}
  152 +
  153 +func CreateProductMaterialRepository(options map[string]interface{}) (domain.ProductMaterialRepository, error) {
  154 + var transactionContext *pg.TransactionContext
  155 + if value, ok := options["transactionContext"]; ok {
  156 + transactionContext = value.(*pg.TransactionContext)
  157 + }
  158 + return repository.NewProductMaterialRepository(transactionContext)
  159 +}
@@ -14,19 +14,15 @@ type CreateProductCommand struct { @@ -14,19 +14,15 @@ type CreateProductCommand struct {
14 // 组织ID 14 // 组织ID
15 OrgId int `cname:"组织ID" json:"orgId" valid:"Required"` 15 OrgId int `cname:"组织ID" json:"orgId" valid:"Required"`
16 // 产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001 16 // 产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001
17 - ProductCode string `cname:"产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001" json:"productCode"` 17 + ProductCode string `cname:"产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001" json:"productCode" valid:"Required"`
18 // 产品名称 18 // 产品名称
19 - ProductName string `cname:"产品名称" json:"productName" valid:"Required"` 19 + // ProductName string `cname:"产品名称" json:"productName" valid:"Required"`
20 // 产品类别 20 // 产品类别
21 - ProductCategory string `cname:"产品类别" json:"productCategory" valid:"Required"`  
22 - // 数量(保留两位小数)  
23 - //Quantity float64 `cname:"数量(保留两位小数)" json:"quantity" valid:"Required"` 21 + // ProductCategory string `cname:"产品类别" json:"productCategory" valid:"Required"`
24 // 单位 22 // 单位
25 - Unit string `cname:"单位" json:"unit" valid:"Required"` 23 + // Unit string `cname:"单位" json:"unit" valid:"Required"`
26 // 单份重量(原材料) 24 // 单份重量(原材料)
27 UnitWeight float64 `cname:"单份重量(原材料)" json:"unitWeight" valid:"Required"` 25 UnitWeight float64 `cname:"单份重量(原材料)" json:"unitWeight" valid:"Required"`
28 - // 重量  
29 - //Weight float64 `cname:"重量" json:"weight" valid:"Required"`  
30 } 26 }
31 27
32 func (createProductCommand *CreateProductCommand) Valid(validation *validation.Validation) { 28 func (createProductCommand *CreateProductCommand) Valid(validation *validation.Validation) {
@@ -12,19 +12,15 @@ type UpdateProductCommand struct { @@ -12,19 +12,15 @@ type UpdateProductCommand struct {
12 // 产品ID 12 // 产品ID
13 ProductId int `cname:"产品ID" json:"productId" valid:"Required"` 13 ProductId int `cname:"产品ID" json:"productId" valid:"Required"`
14 // 产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001 14 // 产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001
15 - ProductCode string `cname:"产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001" json:"productCode"` 15 + //ProductCode string `cname:"产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001" json:"productCode"`
16 // 产品名称 16 // 产品名称
17 - ProductName string `cname:"产品名称" json:"productName" valid:"Required"` 17 + ProductName string `cname:"产品名称" json:"productName" `
18 // 产品类别 18 // 产品类别
19 - ProductCategory string `cname:"产品类别" json:"productCategory" valid:"Required"`  
20 - // 数量(保留两位小数)  
21 - //Quantity float64 `cname:"数量(保留两位小数)" json:"quantity" valid:"Required"` 19 + ProductCategory string `cname:"产品类别" json:"productCategory"`
22 // 单位 20 // 单位
23 - Unit string `cname:"单位" json:"unit" valid:"Required"` 21 + Unit string `cname:"单位" json:"unit"`
24 // 单份重量(原材料) 22 // 单份重量(原材料)
25 UnitWeight float64 `cname:"单份重量(原材料)" json:"unitWeight" valid:"Required"` 23 UnitWeight float64 `cname:"单份重量(原材料)" json:"unitWeight" valid:"Required"`
26 - // 重量  
27 - //Weight float64 `cname:"重量" json:"weight" valid:"Required"`  
28 } 24 }
29 25
30 func (updateProductCommand *UpdateProductCommand) Valid(validation *validation.Validation) { 26 func (updateProductCommand *UpdateProductCommand) Valid(validation *validation.Validation) {
@@ -14,7 +14,6 @@ import ( @@ -14,7 +14,6 @@ import (
14 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis" 14 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis"
15 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" 15 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
16 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" 16 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
17 - "time"  
18 ) 17 )
19 18
20 // 产品服务 19 // 产品服务
@@ -22,7 +21,7 @@ type ProductService struct { @@ -22,7 +21,7 @@ type ProductService struct {
22 } 21 }
23 22
24 // 创建产品服务 23 // 创建产品服务
25 -func (productService *ProductService) CreateProduct(createProductCommand *command.CreateProductCommand) (interface{}, error) { 24 +func (productService *ProductService) CreateProduct(opt *domain.OperateInfo, createProductCommand *command.CreateProductCommand) (interface{}, error) {
26 if err := createProductCommand.ValidateCommand(); err != nil { 25 if err := createProductCommand.ValidateCommand(); err != nil {
27 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 26 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
28 } 27 }
@@ -37,50 +36,23 @@ func (productService *ProductService) CreateProduct(createProductCommand *comman @@ -37,50 +36,23 @@ func (productService *ProductService) CreateProduct(createProductCommand *comman
37 transactionContext.RollbackTransaction() 36 transactionContext.RollbackTransaction()
38 }() 37 }()
39 38
40 - if len(createProductCommand.ProductCode) == 0 {  
41 - generator := redis.NewProductCodeCache(createProductCommand.CompanyId)  
42 - code, err := redis.GenCode(generator)  
43 - if err != nil {  
44 - log.Logger.Error(err.Error())  
45 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "服务器异常")  
46 - }  
47 - createProductCommand.ProductCode = code 39 + batchAddProductService, _ := domainService.NewPGBatchAddProductService(transactionContext.(*pgTransaction.TransactionContext))
  40 + item := &domain.ImportProductItem{
  41 + ProductCode: createProductCommand.ProductCode,
  42 + UnitWeight: utils.AssertString(createProductCommand.UnitWeight),
48 } 43 }
49 - var userService = domainService.NewUserService()  
50 - var org *domain.Org  
51 - org, err = userService.Organization(createProductCommand.OrgId)  
52 - if err != nil {  
53 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 44 + if _, err = batchAddProductService.BatchAddProduct(opt, []*domain.ImportProductItem{
  45 + item,
  46 + }, false); err != nil {
  47 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
54 } 48 }
55 -  
56 - newProduct := &domain.Product{  
57 - CompanyId: createProductCommand.CompanyId,  
58 - OrgId: createProductCommand.OrgId,  
59 - ProductCode: createProductCommand.ProductCode,  
60 - ProductName: createProductCommand.ProductName,  
61 - ProductCategory: createProductCommand.ProductCategory,  
62 - ProductSpec: &domain.UnitQuantity{  
63 - Unit: createProductCommand.Unit,  
64 - UnitWeight: createProductCommand.UnitWeight,  
65 - },  
66 - CreatedAt: time.Now(),  
67 - UpdatedAt: time.Now(),  
68 - Ext: domain.NewExt(org.OrgName),  
69 - }  
70 - productRepository, _, _ := factory.FastPgProduct(transactionContext, 0)  
71 -  
72 - if item, err := productRepository.FindOne(map[string]interface{}{"companyId": createProductCommand.CompanyId, "productCode": createProductCommand.ProductCode}); err == nil && item != nil {  
73 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "产品编号重复,请重新提交") 49 + if len(item.FailReason) > 0 {
  50 + return nil, application.ThrowError(application.TRANSACTION_ERROR, item.FailReason)
74 } 51 }
75 -  
76 - if product, err := productRepository.Save(newProduct); err != nil {  
77 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
78 - } else {  
79 - if err := transactionContext.CommitTransaction(); err != nil {  
80 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
81 - }  
82 - return product, nil 52 + if err := transactionContext.CommitTransaction(); err != nil {
  53 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
83 } 54 }
  55 + return struct{}{}, nil
84 } 56 }
85 57
86 // 返回产品服务 58 // 返回产品服务
@@ -242,7 +214,7 @@ func (productService *ProductService) BatchRemoveProduct(cmd *command.BatchRemov @@ -242,7 +214,7 @@ func (productService *ProductService) BatchRemoveProduct(cmd *command.BatchRemov
242 } 214 }
243 215
244 // 更新产品服务 216 // 更新产品服务
245 -func (productService *ProductService) UpdateProduct(updateProductCommand *command.UpdateProductCommand) (interface{}, error) { 217 +func (productService *ProductService) UpdateProduct(opt *domain.OperateInfo, updateProductCommand *command.UpdateProductCommand) (interface{}, error) {
246 if err := updateProductCommand.ValidateCommand(); err != nil { 218 if err := updateProductCommand.ValidateCommand(); err != nil {
247 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 219 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
248 } 220 }
@@ -260,19 +232,11 @@ func (productService *ProductService) UpdateProduct(updateProductCommand *comman @@ -260,19 +232,11 @@ func (productService *ProductService) UpdateProduct(updateProductCommand *comman
260 if err != nil { 232 if err != nil {
261 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 233 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
262 } 234 }
263 - if len(updateProductCommand.ProductCode) == 0 {  
264 - generator := redis.NewProductCodeCache(product.CompanyId)  
265 - code, err := redis.GenCode(generator)  
266 - if err != nil {  
267 - log.Logger.Error(err.Error())  
268 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "服务器异常")  
269 - }  
270 - updateProductCommand.ProductCode = code  
271 - }  
272 - if updateProductCommand.ProductCode != product.ProductCode {  
273 - if item, err := productRepository.FindOne(map[string]interface{}{"companyId": product.CompanyId, "productCode": updateProductCommand.ProductCode}); err == nil && item != nil {  
274 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "产品编号重复,请重新提交")  
275 - } 235 +
  236 + var material *domain.ProductMaterial
  237 + productMaterialRepository, _, _ := factory.FastProductMaterial(transactionContext, 0)
  238 + if material, err = productMaterialRepository.FindOne(map[string]interface{}{"companyId": product.CompanyId, "materialNumber": product.ProductCode}); err != nil || material == nil {
  239 + return nil, application.ThrowError(application.BUSINESS_ERROR, "物料不存在")
276 } 240 }
277 241
278 var userService = domainService.NewUserService() 242 var userService = domainService.NewUserService()
@@ -281,8 +245,13 @@ func (productService *ProductService) UpdateProduct(updateProductCommand *comman @@ -281,8 +245,13 @@ func (productService *ProductService) UpdateProduct(updateProductCommand *comman
281 if err != nil { 245 if err != nil {
282 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 246 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
283 } 247 }
  248 +
  249 + updateProductCommand.ProductName = material.MaterialName
  250 + updateProductCommand.Unit = material.ProductMaterialExt.Unit
  251 + updateProductCommand.ProductCategory = material.MaterialCategory.Category
284 data := tool_funs.SimpleStructToMap(updateProductCommand) 252 data := tool_funs.SimpleStructToMap(updateProductCommand)
285 data["orgName"] = org.OrgName 253 data["orgName"] = org.OrgName
  254 +
286 if err := product.Update(data); err != nil { 255 if err := product.Update(data); err != nil {
287 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 256 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
288 } 257 }
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type BatchRemoveProductMaterialCommand struct {
  12 + // 物料ID们
  13 + ProductMaterialIds []int `cname:"物料ID" json:"productMaterialIds" valid:"Required"`
  14 +}
  15 +
  16 +func (batchRemoveProductMaterialCommand *BatchRemoveProductMaterialCommand) Valid(validation *validation.Validation) {
  17 + //validation.SetError("CustomValid", "未实现的自定义认证")
  18 +}
  19 +
  20 +func (batchRemoveProductMaterialCommand *BatchRemoveProductMaterialCommand) ValidateCommand() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(batchRemoveProductMaterialCommand)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + elem := reflect.TypeOf(batchRemoveProductMaterialCommand).Elem()
  28 + for _, validErr := range valid.Errors {
  29 + field, isExist := elem.FieldByName(validErr.Field)
  30 + if isExist {
  31 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  32 + } else {
  33 + return fmt.Errorf(validErr.Message)
  34 + }
  35 + }
  36 + }
  37 + return nil
  38 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/beego/beego/v2/core/validation"
  6 + "reflect"
  7 + "regexp"
  8 + "strings"
  9 +)
  10 +
  11 +type CreateProductMaterialCommand struct {
  12 + // 企业id
  13 + CompanyId int `cname:"企业id" json:"companyId"`
  14 + // 组织ID
  15 + OrgId int `cname:"组织ID" json:"orgId"`
  16 + // 物料分组ID
  17 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId" valid:"Required"`
  18 + // 物料编码
  19 + MaterialNumber string `cname:"物料编码" json:"materialNumber" valid:"Required"`
  20 + // 物料名称
  21 + MaterialName string `cname:"物料名称" json:"materialName" valid:"Required"`
  22 + // 物料属性
  23 + MaterialAttribute string `cname:"物料属性" json:"materialAttribute" valid:"Required"`
  24 + // 物料类别
  25 + MaterialCategory string `cname:"物料类别" json:"materialCategory" valid:"Required"`
  26 + // 规格
  27 + Specification string `cname:"规格" json:"specification" valid:"Required"`
  28 + // 单位
  29 + Unit string `cname:"单位" json:"unit" valid:"Required"`
  30 + // 保质期 单位:天
  31 + ExpiredDay int `cname:"保质期 单位:天" json:"expiredDay"`
  32 + // 备注
  33 + Remark string `cname:"备注" json:"remark"`
  34 +}
  35 +
  36 +func (createProductMaterialCommand *CreateProductMaterialCommand) Valid(validation *validation.Validation) {
  37 + createProductMaterialCommand.MaterialNumber = strings.ToUpper(createProductMaterialCommand.MaterialNumber)
  38 + match, err := regexp.MatchString("^[A-Z0-9]+$", createProductMaterialCommand.MaterialNumber)
  39 + if !match {
  40 + validation.Error("物料编码只允许数字加大写字母组合")
  41 + return
  42 + }
  43 + if err != nil {
  44 + validation.Error(err.Error())
  45 + return
  46 + }
  47 + if len([]rune(createProductMaterialCommand.Specification)) > 50 {
  48 + validation.Error("规格最多允许50个字符")
  49 + return
  50 + }
  51 +}
  52 +
  53 +func (createProductMaterialCommand *CreateProductMaterialCommand) ValidateCommand() error {
  54 + valid := validation.Validation{}
  55 + b, err := valid.Valid(createProductMaterialCommand)
  56 + if err != nil {
  57 + return err
  58 + }
  59 + if !b {
  60 + elem := reflect.TypeOf(createProductMaterialCommand).Elem()
  61 + for _, validErr := range valid.Errors {
  62 + field, isExist := elem.FieldByName(validErr.Field)
  63 + if isExist {
  64 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  65 + } else {
  66 + return fmt.Errorf(validErr.Message)
  67 + }
  68 + }
  69 + }
  70 + return nil
  71 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type RemoveProductMaterialCommand struct {
  12 + // 物料ID
  13 + ProductMaterialId int `cname:"物料ID" json:"productMaterialId" valid:"Required"`
  14 +}
  15 +
  16 +func (removeProductMaterialCommand *RemoveProductMaterialCommand) Valid(validation *validation.Validation) {
  17 + //validation.SetError("CustomValid", "未实现的自定义认证")
  18 +}
  19 +
  20 +func (removeProductMaterialCommand *RemoveProductMaterialCommand) ValidateCommand() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(removeProductMaterialCommand)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + elem := reflect.TypeOf(removeProductMaterialCommand).Elem()
  28 + for _, validErr := range valid.Errors {
  29 + field, isExist := elem.FieldByName(validErr.Field)
  30 + if isExist {
  31 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  32 + } else {
  33 + return fmt.Errorf(validErr.Message)
  34 + }
  35 + }
  36 + }
  37 + return nil
  38 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type UpdateProductMaterialCommand struct {
  12 + // 企业id
  13 + //CompanyId int `cname:"企业id" json:"companyId"`
  14 + // 组织ID
  15 + //OrgId int `cname:"组织ID" json:"orgId"`
  16 + // 物料ID
  17 + ProductMaterialId int `cname:"物料ID" json:"productMaterialId" valid:"Required"`
  18 + // 物料分组ID
  19 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId" valid:"Required"`
  20 + //// 物料编码
  21 + //MaterialNumber string `cname:"物料编码" json:"materialNumber" valid:"Required"`
  22 + // 物料名称
  23 + MaterialName string `cname:"物料名称" json:"materialName" valid:"Required"`
  24 + // 物料属性
  25 + MaterialAttribute string `cname:"物料属性" json:"materialAttribute" valid:"Required"`
  26 + // 物料类别
  27 + MaterialCategory string `cname:"物料类别" json:"materialCategory" valid:"Required"`
  28 + // 规格
  29 + Specification string `cname:"规格" json:"specification" valid:"Required"`
  30 + // 单位
  31 + Unit string `cname:"单位" json:"unit" valid:"Required"`
  32 + // 保质期 单位:天
  33 + ExpiredDay int `cname:"保质期 单位:天" json:"expiredDay"`
  34 + // 备注
  35 + Remark string `cname:"备注" json:"remark"`
  36 +}
  37 +
  38 +func (updateProductMaterialCommand *UpdateProductMaterialCommand) Valid(validation *validation.Validation) {
  39 + if len([]rune(updateProductMaterialCommand.Specification)) > 50 {
  40 + validation.Error("规格最多允许50个字符")
  41 + return
  42 + }
  43 +}
  44 +
  45 +func (updateProductMaterialCommand *UpdateProductMaterialCommand) ValidateCommand() error {
  46 + valid := validation.Validation{}
  47 + b, err := valid.Valid(updateProductMaterialCommand)
  48 + if err != nil {
  49 + return err
  50 + }
  51 + if !b {
  52 + elem := reflect.TypeOf(updateProductMaterialCommand).Elem()
  53 + for _, validErr := range valid.Errors {
  54 + field, isExist := elem.FieldByName(validErr.Field)
  55 + if isExist {
  56 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  57 + } else {
  58 + return fmt.Errorf(validErr.Message)
  59 + }
  60 + }
  61 + }
  62 + return nil
  63 +}
  1 +package dto
  2 +
  3 +type DtoMaterial struct {
  4 + ProductMaterialId int `json:"productMaterialId"` // 物料ID
  5 + MaterialNumber string `json:"materialNumber"` //物料编码
  6 + MaterialName string `json:"materialName"` //物料名称
  7 + Specification string `json:"specification"` //规格型号
  8 + MaterialCategory string `json:"materialCategory"` //物料类别
  9 + Unit string `json:"unit"` //单位
  10 + MaterialAttribute string `json:"materialAttribute"` //物料属性
  11 + ProductMaterialGroupId int `json:"productMaterialGroupId"` //物料分组 string/string/string
  12 + ExpiredDay int `json:"expiredDay"` //保质期
  13 + Remark string `json:"remark"` //备注
  14 + ProductMaterialGroups []int `json:"productMaterialGroups"`
  15 +}
  1 +package dto
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  5 +)
  6 +
  7 +func DtoProductMaterial(productMaterialModel *domain.ProductMaterial) *DtoMaterial {
  8 + return &DtoMaterial{
  9 + ProductMaterialId: productMaterialModel.ProductMaterialId,
  10 + ProductMaterialGroupId: productMaterialModel.ProductMaterialGroupId,
  11 + MaterialNumber: productMaterialModel.MaterialNumber,
  12 + MaterialName: productMaterialModel.MaterialName,
  13 + MaterialAttribute: productMaterialModel.MaterialAttribute.Attribute,
  14 + MaterialCategory: productMaterialModel.MaterialCategory.Category,
  15 + Specification: productMaterialModel.ProductMaterialExt.Specification,
  16 + Remark: productMaterialModel.ProductMaterialExt.Remark,
  17 + Unit: productMaterialModel.ProductMaterialExt.Unit,
  18 + ExpiredDay: productMaterialModel.ProductMaterialExt.ExpiredDay,
  19 + }
  20 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type GetProductMaterialQuery struct {
  12 + // 物料ID
  13 + ProductMaterialId int `cname:"物料ID" json:"productMaterialId" valid:"Required"`
  14 +}
  15 +
  16 +func (getProductMaterialQuery *GetProductMaterialQuery) Valid(validation *validation.Validation) {
  17 + //validation.SetError("CustomValid", "未实现的自定义认证")
  18 +}
  19 +
  20 +func (getProductMaterialQuery *GetProductMaterialQuery) ValidateQuery() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(getProductMaterialQuery)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + elem := reflect.TypeOf(getProductMaterialQuery).Elem()
  28 + for _, validErr := range valid.Errors {
  29 + field, isExist := elem.FieldByName(validErr.Field)
  30 + if isExist {
  31 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  32 + } else {
  33 + return fmt.Errorf(validErr.Message)
  34 + }
  35 + }
  36 + }
  37 + return nil
  38 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type ListProductMaterialQuery struct {
  12 + PageNumber int64 `json:"pageNumber"`
  13 + PageSize int64 `json:"pageSize"`
  14 + // 物料分组ID
  15 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId"`
  16 + // 物料分组ID数组
  17 + ProductMaterialGroupIds []int
  18 + // 物料名称
  19 + MaterialName string `cname:"物料名称" json:"materialName"`
  20 + // 物料类别
  21 + MaterialCategory string `cname:"物料类别" json:"materialCategory"`
  22 + CompanyId int
  23 +}
  24 +
  25 +func (listProductMaterialQuery *ListProductMaterialQuery) Valid(validation *validation.Validation) {
  26 + //validation.SetError("CustomValid", "未实现的自定义认证")
  27 +}
  28 +
  29 +func (listProductMaterialQuery *ListProductMaterialQuery) ValidateQuery() error {
  30 + valid := validation.Validation{}
  31 + b, err := valid.Valid(listProductMaterialQuery)
  32 + if err != nil {
  33 + return err
  34 + }
  35 + if !b {
  36 + elem := reflect.TypeOf(listProductMaterialQuery).Elem()
  37 + for _, validErr := range valid.Errors {
  38 + field, isExist := elem.FieldByName(validErr.Field)
  39 + if isExist {
  40 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  41 + } else {
  42 + return fmt.Errorf(validErr.Message)
  43 + }
  44 + }
  45 + }
  46 + return nil
  47 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type SearchProductMaterialQuery struct {
  12 + PageNumber int64 `json:"pageNumber"`
  13 + PageSize int64 `json:"pageSize"`
  14 + // 物料分组ID
  15 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId"`
  16 + // 物料分组ID数组
  17 + ProductMaterialGroupIds []int
  18 + // 物料名称
  19 + MaterialName string `cname:"物料名称" json:"materialName"`
  20 + // 物料类别
  21 + MaterialCategory string `cname:"物料类别" json:"materialCategory"`
  22 + CompanyId int
  23 +}
  24 +
  25 +func (listProductMaterialQuery *SearchProductMaterialQuery) Valid(validation *validation.Validation) {
  26 + //validation.SetError("CustomValid", "未实现的自定义认证")
  27 +}
  28 +
  29 +func (listProductMaterialQuery *SearchProductMaterialQuery) ValidateQuery() error {
  30 + valid := validation.Validation{}
  31 + b, err := valid.Valid(listProductMaterialQuery)
  32 + if err != nil {
  33 + return err
  34 + }
  35 + if !b {
  36 + elem := reflect.TypeOf(listProductMaterialQuery).Elem()
  37 + for _, validErr := range valid.Errors {
  38 + field, isExist := elem.FieldByName(validErr.Field)
  39 + if isExist {
  40 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  41 + } else {
  42 + return fmt.Errorf(validErr.Message)
  43 + }
  44 + }
  45 + }
  46 + return nil
  47 +}
  1 +package service
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/linmadan/egglib-go/core/application"
  6 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  7 + "github.com/linmadan/egglib-go/utils/tool_funs"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterial/command"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterial/dto"
  11 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterial/query"
  12 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  13 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService"
  14 + "time"
  15 +)
  16 +
  17 +// 生产物料服务
  18 +type ProductMaterialService struct {
  19 +}
  20 +
  21 +// 创建生产物料服务
  22 +func (productMaterialService *ProductMaterialService) CreateProductMaterial(operateInfo *domain.OperateInfo, cmd *command.CreateProductMaterialCommand) (interface{}, error) {
  23 + if err := cmd.ValidateCommand(); err != nil {
  24 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  25 + }
  26 + transactionContext, err := factory.CreateTransactionContext(nil)
  27 + if err != nil {
  28 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  29 + }
  30 + if err := transactionContext.StartTransaction(); err != nil {
  31 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  32 + }
  33 + defer func() {
  34 + transactionContext.RollbackTransaction()
  35 + }()
  36 +
  37 + newProductMaterial := &domain.ProductMaterial{
  38 + CompanyId: cmd.CompanyId,
  39 + OrgId: cmd.OrgId,
  40 + ProductMaterialGroupId: cmd.ProductMaterialGroupId,
  41 + MaterialNumber: cmd.MaterialNumber,
  42 + MaterialName: cmd.MaterialName,
  43 + MaterialAttribute: &domain.MaterialAttribute{Attribute: cmd.MaterialAttribute},
  44 + MaterialCategory: &domain.MaterialCategory{Category: cmd.MaterialCategory},
  45 + ProductMaterialExt: &domain.MaterialExt{
  46 + Specification: cmd.Specification,
  47 + Unit: cmd.Unit,
  48 + ExpiredDay: cmd.ExpiredDay,
  49 + Remark: cmd.Remark,
  50 + },
  51 + }
  52 + //var productMaterial *domain.ProductMaterial
  53 + materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  54 + if _, err := materialService.AddMaterial(operateInfo, newProductMaterial); err != nil {
  55 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  56 + }
  57 + if err := transactionContext.CommitTransaction(); err != nil {
  58 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  59 + }
  60 + return struct{}{}, nil
  61 +}
  62 +
  63 +// 返回生产物料服务单个
  64 +func (productMaterialService *ProductMaterialService) GetProductMaterial(operateInfo *domain.OperateInfo, getProductMaterialQuery *query.GetProductMaterialQuery) (interface{}, error) {
  65 + if err := getProductMaterialQuery.ValidateQuery(); err != nil {
  66 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  67 + }
  68 + transactionContext, err := factory.CreateTransactionContext(nil)
  69 + if err != nil {
  70 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  71 + }
  72 + if err := transactionContext.StartTransaction(); err != nil {
  73 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  74 + }
  75 + defer func() {
  76 + transactionContext.RollbackTransaction()
  77 + }()
  78 + var productMaterialRepository domain.ProductMaterialRepository
  79 + if value, err := factory.CreateProductMaterialRepository(map[string]interface{}{
  80 + "transactionContext": transactionContext,
  81 + }); err != nil {
  82 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  83 + } else {
  84 + productMaterialRepository = value
  85 + }
  86 + productMaterial, err := productMaterialRepository.FindOne(map[string]interface{}{"productMaterialId": getProductMaterialQuery.ProductMaterialId})
  87 + if err != nil {
  88 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  89 + }
  90 + if productMaterial == nil {
  91 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getProductMaterialQuery.ProductMaterialId)))
  92 + } else {
  93 + materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  94 + productMaterialGroupIdNames, _, err := materialService.AllMaterialGroupParentByBacktracking(operateInfo, productMaterial.ProductMaterialGroupId)
  95 + if err != nil {
  96 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  97 + }
  98 + if len(productMaterialGroupIdNames) == 0 {
  99 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  100 + }
  101 + var productMaterialGroups []int
  102 + for _, productMaterialGroupIdName := range productMaterialGroupIdNames {
  103 + productMaterialGroups = append(productMaterialGroups, productMaterialGroupIdName.ProductMaterialGroupId)
  104 + }
  105 + one := dto.DtoProductMaterial(productMaterial)
  106 + one.ProductMaterialGroups = productMaterialGroups
  107 + if err := transactionContext.CommitTransaction(); err != nil {
  108 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  109 + }
  110 + return one, nil
  111 + }
  112 +}
  113 +
  114 +// 返回生产物料服务列表,未用
  115 +func (productMaterialService *ProductMaterialService) ListProductMaterial(operateInfo *domain.OperateInfo, listProductMaterialQuery *query.ListProductMaterialQuery) (interface{}, error) {
  116 + if err := listProductMaterialQuery.ValidateQuery(); err != nil {
  117 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  118 + }
  119 + transactionContext, err := factory.CreateTransactionContext(nil)
  120 + if err != nil {
  121 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  122 + }
  123 + if err := transactionContext.StartTransaction(); err != nil {
  124 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  125 + }
  126 + defer func() {
  127 + transactionContext.RollbackTransaction()
  128 + }()
  129 + var productMaterialRepository domain.ProductMaterialRepository
  130 + if value, err := factory.CreateProductMaterialRepository(map[string]interface{}{
  131 + "transactionContext": transactionContext,
  132 + }); err != nil {
  133 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  134 + } else {
  135 + productMaterialRepository = value
  136 + }
  137 + var results []*dto.DtoMaterial
  138 + if listProductMaterialQuery.ProductMaterialGroupId != 0 {
  139 + materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  140 + _, ProductMaterialGroupIds, err := materialService.AllMaterialGroupChild(operateInfo, listProductMaterialQuery.ProductMaterialGroupId)
  141 + if err != nil {
  142 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  143 + }
  144 + listProductMaterialQuery.ProductMaterialGroupIds = ProductMaterialGroupIds
  145 + }
  146 + listProductMaterialQuery.CompanyId = operateInfo.CompanyId
  147 + if count, productMaterials, err := productMaterialRepository.Find(tool_funs.SimpleStructToMap(listProductMaterialQuery)); err != nil {
  148 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  149 + } else {
  150 + for _, productMaterial := range productMaterials {
  151 + results = append(results, dto.DtoProductMaterial(productMaterial))
  152 + }
  153 + if err := transactionContext.CommitTransaction(); err != nil {
  154 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  155 + }
  156 + return map[string]interface{}{
  157 + "count": count,
  158 + "productMaterials": results,
  159 + }, nil
  160 + }
  161 +}
  162 +
  163 +// 返回生产物料服务列表
  164 +func (productMaterialService *ProductMaterialService) SearchProductMaterial(operateInfo *domain.OperateInfo, listProductMaterialQuery *query.SearchProductMaterialQuery) (int64, []*dto.DtoMaterial, error) {
  165 + if err := listProductMaterialQuery.ValidateQuery(); err != nil {
  166 + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error())
  167 + }
  168 + transactionContext, err := factory.CreateTransactionContext(nil)
  169 + if err != nil {
  170 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  171 + }
  172 + if err := transactionContext.StartTransaction(); err != nil {
  173 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  174 + }
  175 + defer func() {
  176 + transactionContext.RollbackTransaction()
  177 + }()
  178 + var productMaterialRepository domain.ProductMaterialRepository
  179 + if value, err := factory.CreateProductMaterialRepository(map[string]interface{}{
  180 + "transactionContext": transactionContext,
  181 + }); err != nil {
  182 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  183 + } else {
  184 + productMaterialRepository = value
  185 + }
  186 + results := make([]*dto.DtoMaterial, 0)
  187 + if listProductMaterialQuery.ProductMaterialGroupId != 0 {
  188 + materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  189 + _, ProductMaterialGroupIds, err := materialService.AllMaterialGroupChild(operateInfo, listProductMaterialQuery.ProductMaterialGroupId)
  190 + if err != nil {
  191 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  192 + }
  193 + listProductMaterialQuery.ProductMaterialGroupIds = ProductMaterialGroupIds
  194 + }
  195 + listProductMaterialQuery.CompanyId = operateInfo.CompanyId
  196 + count, productMaterials, err := productMaterialRepository.Find(tool_funs.SimpleStructToMap(listProductMaterialQuery))
  197 + if err != nil {
  198 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  199 + }
  200 + for _, productMaterial := range productMaterials {
  201 + results = append(results, dto.DtoProductMaterial(productMaterial))
  202 + }
  203 + if err := transactionContext.CommitTransaction(); err != nil {
  204 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  205 + }
  206 + return count, results, err
  207 +}
  208 +
  209 +// 移除生产物料服务
  210 +func (productMaterialService *ProductMaterialService) RemoveProductMaterial(operateInfo *domain.OperateInfo, removeProductMaterialCommand *command.RemoveProductMaterialCommand) (interface{}, error) {
  211 + if err := removeProductMaterialCommand.ValidateCommand(); err != nil {
  212 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  213 + }
  214 + transactionContext, err := factory.CreateTransactionContext(nil)
  215 + if err != nil {
  216 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  217 + }
  218 + if err := transactionContext.StartTransaction(); err != nil {
  219 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  220 + }
  221 + defer func() {
  222 + transactionContext.RollbackTransaction()
  223 + }()
  224 + var productMaterialRepository domain.ProductMaterialRepository
  225 + if value, err := factory.CreateProductMaterialRepository(map[string]interface{}{
  226 + "transactionContext": transactionContext,
  227 + }); err != nil {
  228 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  229 + } else {
  230 + productMaterialRepository = value
  231 + }
  232 + productMaterial, err := productMaterialRepository.FindOne(map[string]interface{}{"companyId": operateInfo.CompanyId, "productMaterialId": removeProductMaterialCommand.ProductMaterialId})
  233 + if err != nil {
  234 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  235 + }
  236 + if productMaterial == nil {
  237 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeProductMaterialCommand.ProductMaterialId)))
  238 + }
  239 + if productMaterial, err := productMaterialRepository.Remove(productMaterial); err != nil {
  240 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  241 + } else {
  242 + if err := transactionContext.CommitTransaction(); err != nil {
  243 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  244 + }
  245 + return productMaterial, nil
  246 + }
  247 +}
  248 +
  249 +// 更新生产物料服务
  250 +func (productMaterialService *ProductMaterialService) UpdateProductMaterial(operateInfo *domain.OperateInfo, cmd *command.UpdateProductMaterialCommand) (interface{}, error) {
  251 + if err := cmd.ValidateCommand(); err != nil {
  252 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  253 + }
  254 + transactionContext, err := factory.CreateTransactionContext(nil)
  255 + if err != nil {
  256 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  257 + }
  258 + if err := transactionContext.StartTransaction(); err != nil {
  259 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  260 + }
  261 + defer func() {
  262 + transactionContext.RollbackTransaction()
  263 + }()
  264 +
  265 + var productMaterialRepository domain.ProductMaterialRepository
  266 + if value, err := factory.CreateProductMaterialRepository(map[string]interface{}{
  267 + "transactionContext": transactionContext,
  268 + }); err != nil {
  269 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  270 + } else {
  271 + productMaterialRepository = value
  272 + }
  273 + productMaterial, err := productMaterialRepository.FindOne(map[string]interface{}{"companyId": operateInfo.CompanyId, "productMaterialId": cmd.ProductMaterialId})
  274 + if err != nil {
  275 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  276 + }
  277 + productMaterial.ProductMaterialGroupId = cmd.ProductMaterialGroupId
  278 + productMaterial.MaterialName = cmd.MaterialName
  279 + productMaterial.MaterialAttribute.Attribute = cmd.MaterialAttribute
  280 + productMaterial.MaterialCategory.Category = cmd.MaterialCategory
  281 + productMaterial.ProductMaterialExt = &domain.MaterialExt{
  282 + Specification: cmd.Specification,
  283 + Unit: cmd.Unit,
  284 + ExpiredDay: cmd.ExpiredDay,
  285 + Remark: cmd.Remark,
  286 + }
  287 + productMaterial.UpdatedAt = time.Now()
  288 +
  289 + if _, err := productMaterialRepository.Save(productMaterial); err != nil {
  290 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  291 + }
  292 + if err := transactionContext.CommitTransaction(); err != nil {
  293 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  294 + }
  295 + return struct{}{}, nil
  296 +}
  297 +
  298 +// 批量移除生产物料服务
  299 +func (productMaterialService *ProductMaterialService) BatchRemoveProductMaterial(operateInfo *domain.OperateInfo, batchRemoveProductMaterialCommand *command.BatchRemoveProductMaterialCommand) (interface{}, error) {
  300 + if err := batchRemoveProductMaterialCommand.ValidateCommand(); err != nil {
  301 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  302 + }
  303 + transactionContext, err := factory.CreateTransactionContext(nil)
  304 + if err != nil {
  305 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  306 + }
  307 + if err := transactionContext.StartTransaction(); err != nil {
  308 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  309 + }
  310 + defer func() {
  311 + transactionContext.RollbackTransaction()
  312 + }()
  313 + var productMaterialRepository domain.ProductMaterialRepository
  314 + if value, err := factory.CreateProductMaterialRepository(map[string]interface{}{
  315 + "transactionContext": transactionContext,
  316 + }); err != nil {
  317 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  318 + } else {
  319 + productMaterialRepository = value
  320 + }
  321 + for i := range batchRemoveProductMaterialCommand.ProductMaterialIds {
  322 + ProductMaterialId := batchRemoveProductMaterialCommand.ProductMaterialIds[i]
  323 + productMaterial, err := productMaterialRepository.FindOne(map[string]interface{}{"companyId": operateInfo.CompanyId, "productMaterialId": ProductMaterialId})
  324 + if err != nil {
  325 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  326 + }
  327 + if productMaterial == nil {
  328 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(ProductMaterialId)))
  329 + }
  330 + if _, err := productMaterialRepository.Remove(productMaterial); err != nil {
  331 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  332 + }
  333 + }
  334 + if err := transactionContext.CommitTransaction(); err != nil {
  335 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  336 + }
  337 + return struct{}{}, nil
  338 +
  339 +}
  340 +
  341 +func NewProductMaterialService(options map[string]interface{}) *ProductMaterialService {
  342 + newProductMaterialService := &ProductMaterialService{}
  343 + return newProductMaterialService
  344 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type CreateProductMaterialGroupCommand struct {
  12 + // 企业id
  13 + CompanyId int `cname:"企业id" json:"companyId" valid:"Required"`
  14 + // 组织ID
  15 + OrgId int `cname:"组织ID" json:"orgId" valid:"Required"`
  16 + // 父级ID
  17 + Pid int `cname:"父级ID" json:"pid"`
  18 + // 物料分组名称
  19 + MaterialGroupName string `cname:"物料分组名称" json:"materialGroupName" valid:"Required"`
  20 + // 物料分组编码
  21 + MaterialGroupNumber string `cname:"物料分组编码" json:"materialGroupNumber,omitempty"`
  22 +}
  23 +
  24 +func (createProductMaterialGroupCommand *CreateProductMaterialGroupCommand) Valid(validation *validation.Validation) {
  25 +
  26 +}
  27 +
  28 +func (createProductMaterialGroupCommand *CreateProductMaterialGroupCommand) ValidateCommand() error {
  29 + valid := validation.Validation{}
  30 + b, err := valid.Valid(createProductMaterialGroupCommand)
  31 + if err != nil {
  32 + return err
  33 + }
  34 + if !b {
  35 + elem := reflect.TypeOf(createProductMaterialGroupCommand).Elem()
  36 + for _, validErr := range valid.Errors {
  37 + field, isExist := elem.FieldByName(validErr.Field)
  38 + if isExist {
  39 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  40 + } else {
  41 + return fmt.Errorf(validErr.Message)
  42 + }
  43 + }
  44 + }
  45 + return nil
  46 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type RemoveProductMaterialGroupCommand struct {
  12 + // 物料分组ID
  13 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId" valid:"Required"`
  14 +}
  15 +
  16 +func (removeProductMaterialGroupCommand *RemoveProductMaterialGroupCommand) Valid(validation *validation.Validation) {
  17 +
  18 +}
  19 +
  20 +func (removeProductMaterialGroupCommand *RemoveProductMaterialGroupCommand) ValidateCommand() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(removeProductMaterialGroupCommand)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + elem := reflect.TypeOf(removeProductMaterialGroupCommand).Elem()
  28 + for _, validErr := range valid.Errors {
  29 + field, isExist := elem.FieldByName(validErr.Field)
  30 + if isExist {
  31 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  32 + } else {
  33 + return fmt.Errorf(validErr.Message)
  34 + }
  35 + }
  36 + }
  37 + return nil
  38 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type UpdateProductMaterialGroupCommand struct {
  12 + // 物料分组ID
  13 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId" valid:"Required"`
  14 + // 物料分组名称
  15 + MaterialGroupName string `cname:"物料分组名称" json:"materialGroupName" valid:"Required"`
  16 + // 物料分组编码
  17 + MaterialGroupNumber string `cname:"物料分组编码" json:"materialGroupNumber"`
  18 +}
  19 +
  20 +func (updateProductMaterialGroupCommand *UpdateProductMaterialGroupCommand) Valid(validation *validation.Validation) {
  21 +
  22 +}
  23 +
  24 +func (updateProductMaterialGroupCommand *UpdateProductMaterialGroupCommand) ValidateCommand() error {
  25 + valid := validation.Validation{}
  26 + b, err := valid.Valid(updateProductMaterialGroupCommand)
  27 + if err != nil {
  28 + return err
  29 + }
  30 + if !b {
  31 + elem := reflect.TypeOf(updateProductMaterialGroupCommand).Elem()
  32 + for _, validErr := range valid.Errors {
  33 + field, isExist := elem.FieldByName(validErr.Field)
  34 + if isExist {
  35 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  36 + } else {
  37 + return fmt.Errorf(validErr.Message)
  38 + }
  39 + }
  40 + }
  41 + return nil
  42 +}
  1 +package dto
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  6 +)
  7 +
  8 +type MaterialGroupDto struct {
  9 + // 物料分组ID
  10 + ProductMaterialGroupId int `json:"id"`
  11 + // 企业id
  12 + //CompanyId int `json:"companyId"`
  13 + // 组织ID
  14 + //OrgId int `json:"orgId"`
  15 + // 父级ID
  16 + Pid int `json:"pid"`
  17 + // 路径 (不使用,如果父级改变的话,子级的Path要做更新)
  18 + //Path string `json:"path"`
  19 + // 物料分组名称
  20 + MaterialGroupName string `json:"materialGroupName"`
  21 + // 物料分组编码
  22 + MaterialGroupNumber string `json:"materialGroupNumber"`
  23 +}
  24 +
  25 +func (d *MaterialGroupDto) LoadDto(m *domain.ProductMaterialGroup, orgId int) *MaterialGroupDto {
  26 + d.ProductMaterialGroupId = m.ProductMaterialGroupId
  27 + d.Pid = m.Pid
  28 + d.MaterialGroupName = m.MaterialGroupName
  29 + d.MaterialGroupNumber = m.MaterialGroupNumber
  30 + return d
  31 +}
  32 +
  33 +func (productMaterialGroup *MaterialGroupDto) PID() string {
  34 + return fmt.Sprintf("%d", productMaterialGroup.Pid)
  35 +}
  36 +func (productMaterialGroup *MaterialGroupDto) ID() string {
  37 + return fmt.Sprintf("%d", productMaterialGroup.ProductMaterialGroupId)
  38 +}
  39 +
  40 +type MaterialGroupDtos []*MaterialGroupDto
  41 +
  42 +func (tree MaterialGroupDtos) Len() int {
  43 + return len(tree)
  44 +}
  45 +
  46 +func (tree MaterialGroupDtos) Less(i, j int) bool {
  47 + if tree[i].Pid < tree[j].Pid {
  48 + return true
  49 + }
  50 + if tree[i].Pid == tree[j].Pid {
  51 + return tree[i].ProductMaterialGroupId < tree[j].ProductMaterialGroupId
  52 + }
  53 + return false
  54 +}
  55 +
  56 +func (tree MaterialGroupDtos) Swap(i, j int) {
  57 + tree[i], tree[j] = tree[j], tree[i]
  58 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type GetProductMaterialGroupQuery struct {
  12 + // 物料分组ID
  13 + ProductMaterialGroupId int `cname:"物料分组ID" json:"productMaterialGroupId" valid:"Required"`
  14 +}
  15 +
  16 +func (getProductMaterialGroupQuery *GetProductMaterialGroupQuery) Valid(validation *validation.Validation) {
  17 +
  18 +}
  19 +
  20 +func (getProductMaterialGroupQuery *GetProductMaterialGroupQuery) ValidateQuery() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(getProductMaterialGroupQuery)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + elem := reflect.TypeOf(getProductMaterialGroupQuery).Elem()
  28 + for _, validErr := range valid.Errors {
  29 + field, isExist := elem.FieldByName(validErr.Field)
  30 + if isExist {
  31 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  32 + } else {
  33 + return fmt.Errorf(validErr.Message)
  34 + }
  35 + }
  36 + }
  37 + return nil
  38 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type ListProductMaterialGroupQuery struct {
  12 + // 查询偏离量
  13 + Offset int `cname:"查询偏离量" json:"offset" valid:"Required"`
  14 + // 查询限制
  15 + Limit int `cname:"查询限制" json:"limit" valid:"Required"`
  16 +}
  17 +
  18 +func (listProductMaterialGroupQuery *ListProductMaterialGroupQuery) Valid(validation *validation.Validation) {
  19 +
  20 +}
  21 +
  22 +func (listProductMaterialGroupQuery *ListProductMaterialGroupQuery) ValidateQuery() error {
  23 + valid := validation.Validation{}
  24 + b, err := valid.Valid(listProductMaterialGroupQuery)
  25 + if err != nil {
  26 + return err
  27 + }
  28 + if !b {
  29 + elem := reflect.TypeOf(listProductMaterialGroupQuery).Elem()
  30 + for _, validErr := range valid.Errors {
  31 + field, isExist := elem.FieldByName(validErr.Field)
  32 + if isExist {
  33 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  34 + } else {
  35 + return fmt.Errorf(validErr.Message)
  36 + }
  37 + }
  38 + }
  39 + return nil
  40 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  6 + "reflect"
  7 + "strings"
  8 +
  9 + "github.com/beego/beego/v2/core/validation"
  10 +)
  11 +
  12 +type SearchProductMaterialGroupQuery struct {
  13 + // 查询偏离量
  14 + Offset int `cname:"查询偏离量" json:"offset"`
  15 + // 查询限制
  16 + Limit int `cname:"查询限制" json:"limit"`
  17 +
  18 + // 当前公司
  19 + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"`
  20 + // 当前登录的组织
  21 + //OrgId int `cname:"当前登录的组织" json:"orgId,omitempty"`
  22 + // 匹配多个组织
  23 + //InOrgIds []int `cname:"匹配多个组织" json:"inOrgIds,omitempty" valid:"Required"`
  24 + // 页码
  25 + PageNumber int `cname:"页码" json:"pageNumber,omitempty"`
  26 + // 页数
  27 + PageSize int `cname:"页数" json:"pageSize,omitempty"`
  28 +}
  29 +
  30 +func (cmd *SearchProductMaterialGroupQuery) Valid(validation *validation.Validation) {
  31 + cmd.Offset, cmd.Limit = domain.Pagination(cmd.PageNumber, cmd.PageSize)
  32 +}
  33 +
  34 +func (cmd *SearchProductMaterialGroupQuery) ValidateQuery() error {
  35 + valid := validation.Validation{}
  36 + b, err := valid.Valid(cmd)
  37 + if err != nil {
  38 + return err
  39 + }
  40 + if !b {
  41 + elem := reflect.TypeOf(cmd).Elem()
  42 + for _, validErr := range valid.Errors {
  43 + field, isExist := elem.FieldByName(validErr.Field)
  44 + if isExist {
  45 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  46 + } else {
  47 + return fmt.Errorf(validErr.Message)
  48 + }
  49 + }
  50 + }
  51 + return nil
  52 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 + "reflect"
  6 + "strings"
  7 +
  8 + "github.com/beego/beego/v2/core/validation"
  9 +)
  10 +
  11 +type SelectorProductMaterialGroupQuery struct {
  12 + // 查询偏离量
  13 + //Offset int `cname:"查询偏离量" json:"offset"`
  14 + // 查询限制
  15 + //Limit int `cname:"查询限制" json:"limit"`
  16 + // options 'tree' 'list' default tree
  17 + Style string `json:"style"`
  18 + // 当前公司
  19 + CompanyId int `cname:"当前公司" json:"companyId,omitempty" valid:"Required"`
  20 + // 页码
  21 + //PageNumber int `cname:"页码" json:"pageNumber,omitempty"`
  22 + // 页数
  23 + //PageSize int `cname:"页数" json:"pageSize,omitempty"`
  24 +}
  25 +
  26 +func (cmd *SelectorProductMaterialGroupQuery) Valid(validation *validation.Validation) {
  27 + //cmd.Offset, cmd.Limit = domain.Pagination(cmd.PageNumber, cmd.PageSize)
  28 + cmd.Style = "tree"
  29 +}
  30 +
  31 +func (cmd *SelectorProductMaterialGroupQuery) ValidateQuery() error {
  32 + valid := validation.Validation{}
  33 + b, err := valid.Valid(cmd)
  34 + if err != nil {
  35 + return err
  36 + }
  37 + if !b {
  38 + elem := reflect.TypeOf(cmd).Elem()
  39 + for _, validErr := range valid.Errors {
  40 + field, isExist := elem.FieldByName(validErr.Field)
  41 + if isExist {
  42 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  43 + } else {
  44 + return fmt.Errorf(validErr.Message)
  45 + }
  46 + }
  47 + }
  48 + return nil
  49 +}
  1 +package service
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/linmadan/egglib-go/core/application"
  6 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  7 + "github.com/linmadan/egglib-go/utils/tool_funs"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterialGroup/command"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterialGroup/dto"
  11 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterialGroup/query"
  12 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  13 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService"
  14 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
  15 + "sort"
  16 +)
  17 +
  18 +// 物料分组服务
  19 +type ProductMaterialGroupService struct {
  20 +}
  21 +
  22 +// 创建物料分组服务
  23 +func (productMaterialGroupService *ProductMaterialGroupService) CreateProductMaterialGroup(operateInfo *domain.OperateInfo, createProductMaterialGroupCommand *command.CreateProductMaterialGroupCommand) (interface{}, error) {
  24 + if err := createProductMaterialGroupCommand.ValidateCommand(); err != nil {
  25 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  26 + }
  27 + transactionContext, err := factory.CreateTransactionContext(nil)
  28 + if err != nil {
  29 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  30 + }
  31 + if err := transactionContext.StartTransaction(); err != nil {
  32 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  33 + }
  34 + defer func() {
  35 + transactionContext.RollbackTransaction()
  36 + }()
  37 + newProductMaterialGroup := &domain.ProductMaterialGroup{
  38 + Pid: createProductMaterialGroupCommand.Pid,
  39 + MaterialGroupName: createProductMaterialGroupCommand.MaterialGroupName,
  40 + MaterialGroupNumber: createProductMaterialGroupCommand.MaterialGroupNumber,
  41 + }
  42 +
  43 + var productMaterialGroup *domain.ProductMaterialGroup
  44 + materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  45 + if productMaterialGroup, err = materialService.AddMaterialGroup(operateInfo, newProductMaterialGroup); err != nil {
  46 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  47 + }
  48 + if err := transactionContext.CommitTransaction(); err != nil {
  49 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  50 + }
  51 + return productMaterialGroup, nil
  52 +}
  53 +
  54 +// 返回物料分组服务
  55 +func (productMaterialGroupService *ProductMaterialGroupService) GetProductMaterialGroup(getProductMaterialGroupQuery *query.GetProductMaterialGroupQuery) (interface{}, error) {
  56 + if err := getProductMaterialGroupQuery.ValidateQuery(); err != nil {
  57 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  58 + }
  59 + transactionContext, err := factory.CreateTransactionContext(nil)
  60 + if err != nil {
  61 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  62 + }
  63 + if err := transactionContext.StartTransaction(); err != nil {
  64 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  65 + }
  66 + defer func() {
  67 + transactionContext.RollbackTransaction()
  68 + }()
  69 + var productMaterialGroupRepository domain.ProductMaterialGroupRepository
  70 + if value, err := factory.CreateProductMaterialGroupRepository(map[string]interface{}{
  71 + "transactionContext": transactionContext,
  72 + }); err != nil {
  73 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  74 + } else {
  75 + productMaterialGroupRepository = value
  76 + }
  77 + productMaterialGroup, err := productMaterialGroupRepository.FindOne(map[string]interface{}{"productMaterialGroupId": getProductMaterialGroupQuery.ProductMaterialGroupId})
  78 + if err != nil {
  79 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  80 + }
  81 + if productMaterialGroup == nil {
  82 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getProductMaterialGroupQuery.ProductMaterialGroupId)))
  83 + }
  84 + //测试
  85 + //materialService,_:= domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  86 + //nodes,child,_:=materialService.AllMaterialGroupChild(&domain.OperateInfo{CompanyId: productMaterialGroup.CompanyId},productMaterialGroup.ProductMaterialGroupId)
  87 + //log.Logger.Debug("节点的Child", map[string]interface{}{"data":child,"nodes":nodes})
  88 + if err := transactionContext.CommitTransaction(); err != nil {
  89 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  90 + }
  91 + materialGroupDto := dto.MaterialGroupDto{}
  92 + return materialGroupDto.LoadDto(productMaterialGroup, 0), nil
  93 +
  94 +}
  95 +
  96 +// 返回物料分组服务列表
  97 +func (productMaterialGroupService *ProductMaterialGroupService) ListProductMaterialGroup(listProductMaterialGroupQuery *query.ListProductMaterialGroupQuery) (interface{}, error) {
  98 + if err := listProductMaterialGroupQuery.ValidateQuery(); err != nil {
  99 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  100 + }
  101 + transactionContext, err := factory.CreateTransactionContext(nil)
  102 + if err != nil {
  103 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  104 + }
  105 + if err := transactionContext.StartTransaction(); err != nil {
  106 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  107 + }
  108 + defer func() {
  109 + transactionContext.RollbackTransaction()
  110 + }()
  111 + var productMaterialGroupRepository domain.ProductMaterialGroupRepository
  112 + if value, err := factory.CreateProductMaterialGroupRepository(map[string]interface{}{
  113 + "transactionContext": transactionContext,
  114 + }); err != nil {
  115 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  116 + } else {
  117 + productMaterialGroupRepository = value
  118 + }
  119 + if count, productMaterialGroups, err := productMaterialGroupRepository.Find(tool_funs.SimpleStructToMap(listProductMaterialGroupQuery)); err != nil {
  120 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  121 + } else {
  122 + if err := transactionContext.CommitTransaction(); err != nil {
  123 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  124 + }
  125 + return map[string]interface{}{
  126 + "count": count,
  127 + "productMaterialGroups": productMaterialGroups,
  128 + }, nil
  129 + }
  130 +}
  131 +
  132 +// 移除物料分组服务
  133 +func (productMaterialGroupService *ProductMaterialGroupService) RemoveProductMaterialGroup(removeProductMaterialGroupCommand *command.RemoveProductMaterialGroupCommand) (interface{}, error) {
  134 + if err := removeProductMaterialGroupCommand.ValidateCommand(); err != nil {
  135 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  136 + }
  137 + transactionContext, err := factory.CreateTransactionContext(nil)
  138 + if err != nil {
  139 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  140 + }
  141 + if err := transactionContext.StartTransaction(); err != nil {
  142 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  143 + }
  144 + defer func() {
  145 + transactionContext.RollbackTransaction()
  146 + }()
  147 + var productMaterialGroupRepository domain.ProductMaterialGroupRepository
  148 + if value, err := factory.CreateProductMaterialGroupRepository(map[string]interface{}{
  149 + "transactionContext": transactionContext,
  150 + }); err != nil {
  151 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  152 + } else {
  153 + productMaterialGroupRepository = value
  154 + }
  155 + productMaterialGroup, err := productMaterialGroupRepository.FindOne(map[string]interface{}{"productMaterialGroupId": removeProductMaterialGroupCommand.ProductMaterialGroupId})
  156 + if err != nil {
  157 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  158 + }
  159 + if productMaterialGroup == nil {
  160 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("已删除 %s", string(removeProductMaterialGroupCommand.ProductMaterialGroupId)))
  161 + }
  162 + if productMaterialGroup, err := productMaterialGroupRepository.Remove(productMaterialGroup); err != nil {
  163 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  164 + } else {
  165 + if err := transactionContext.CommitTransaction(); err != nil {
  166 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  167 + }
  168 + return productMaterialGroup, nil
  169 + }
  170 +}
  171 +
  172 +// 更新物料分组服务
  173 +func (productMaterialGroupService *ProductMaterialGroupService) UpdateProductMaterialGroup(operateInfo *domain.OperateInfo, cmd *command.UpdateProductMaterialGroupCommand) (interface{}, error) {
  174 + if err := cmd.ValidateCommand(); err != nil {
  175 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  176 + }
  177 + transactionContext, err := factory.CreateTransactionContext(nil)
  178 + if err != nil {
  179 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  180 + }
  181 + if err := transactionContext.StartTransaction(); err != nil {
  182 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  183 + }
  184 + defer func() {
  185 + transactionContext.RollbackTransaction()
  186 + }()
  187 + productMaterialGroup := &domain.ProductMaterialGroup{
  188 + ProductMaterialGroupId: cmd.ProductMaterialGroupId,
  189 + MaterialGroupName: cmd.MaterialGroupName,
  190 + //MaterialGroupNumber: cmd.MaterialGroupNumber,
  191 + }
  192 + materialService, _ := domainService.NewPGMaterialService(transactionContext.(*pgTransaction.TransactionContext))
  193 + if productMaterialGroup, err := materialService.UpdateMaterialGroup(operateInfo, productMaterialGroup); err != nil {
  194 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  195 + } else {
  196 + if err := transactionContext.CommitTransaction(); err != nil {
  197 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  198 + }
  199 + materialGroupDto := dto.MaterialGroupDto{}
  200 + return materialGroupDto.LoadDto(productMaterialGroup, 0), nil
  201 + }
  202 +}
  203 +
  204 +// 搜索物料分组服务列表
  205 +func (productMaterialGroupService *ProductMaterialGroupService) SearchProductMaterialGroup(operateInfo *domain.OperateInfo, cmd *query.SearchProductMaterialGroupQuery) (int64, interface{}, error) {
  206 + if err := cmd.ValidateQuery(); err != nil {
  207 + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error())
  208 + }
  209 + transactionContext, err := factory.CreateTransactionContext(nil)
  210 + if err != nil {
  211 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  212 + }
  213 + if err := transactionContext.StartTransaction(); err != nil {
  214 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  215 + }
  216 + defer func() {
  217 + transactionContext.RollbackTransaction()
  218 + }()
  219 + var productMaterialGroupRepository domain.ProductMaterialGroupRepository
  220 + productMaterialGroupRepository, _, _ = factory.FastProductMaterialGroup(transactionContext, 0)
  221 + queryOptions := utils.ObjectToMap(cmd)
  222 + count, productGroups, err := productMaterialGroupRepository.Find(queryOptions)
  223 + if err != nil {
  224 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  225 + }
  226 + var results = make([]*dto.MaterialGroupDto, 0)
  227 + for i := range productGroups {
  228 + newItem := &dto.MaterialGroupDto{}
  229 + newItem.LoadDto(productGroups[i], operateInfo.OrgId)
  230 + results = append(results, newItem)
  231 + }
  232 + if err := transactionContext.CommitTransaction(); err != nil {
  233 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  234 + }
  235 + return count, results, nil
  236 +}
  237 +
  238 +func (productMaterialGroupService *ProductMaterialGroupService) SelectorProductMaterialGroup(operateInfo *domain.OperateInfo, cmd *query.SelectorProductMaterialGroupQuery) (int64, interface{}, error) {
  239 + if err := cmd.ValidateQuery(); err != nil {
  240 + return 0, nil, application.ThrowError(application.ARG_ERROR, err.Error())
  241 + }
  242 + transactionContext, err := factory.CreateTransactionContext(nil)
  243 + if err != nil {
  244 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  245 + }
  246 + if err := transactionContext.StartTransaction(); err != nil {
  247 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  248 + }
  249 + defer func() {
  250 + transactionContext.RollbackTransaction()
  251 + }()
  252 + var productMaterialGroupRepository domain.ProductMaterialGroupRepository
  253 + productMaterialGroupRepository, _, _ = factory.FastProductMaterialGroup(transactionContext, 0)
  254 + queryOptions := utils.ObjectToMap(cmd)
  255 + count, productGroups, err := productMaterialGroupRepository.Find(queryOptions)
  256 + if err != nil {
  257 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  258 + }
  259 + var results = make([]*dto.MaterialGroupDto, 0)
  260 + for i := range productGroups {
  261 + newItem := &dto.MaterialGroupDto{}
  262 + newItem.LoadDto(productGroups[i], operateInfo.OrgId)
  263 + results = append(results, newItem)
  264 + }
  265 + if err := transactionContext.CommitTransaction(); err != nil {
  266 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  267 + }
  268 + if cmd.Style == "tree" {
  269 + sort.Stable(dto.MaterialGroupDtos(results))
  270 + nodes := make([]utils.TreeNode, 0)
  271 + for i := range results {
  272 + nodes = append(nodes, results[i])
  273 + }
  274 + tree := utils.NewTree(nodes)
  275 + return count, tree.Nodes, nil
  276 + }
  277 + return count, results, nil
  278 +}
  279 +
  280 +func NewProductMaterialGroupService(options map[string]interface{}) *ProductMaterialGroupService {
  281 + newProductMaterialGroupService := &ProductMaterialGroupService{}
  282 + return newProductMaterialGroupService
  283 +}
1 package syncdata 1 package syncdata
2 2
3 import ( 3 import (
  4 + "fmt"
4 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" 5 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
5 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" 6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService"
@@ -209,6 +210,101 @@ func (srv *PullDataK3CloudService) PullMaterial(timeFilter time.Time) error { @@ -209,6 +210,101 @@ func (srv *PullDataK3CloudService) PullMaterial(timeFilter time.Time) error {
209 return nil 210 return nil
210 } 211 }
211 212
  213 +func (srv *PullDataK3CloudService) pullMaterial(timeFilter time.Time) ([]models.MaterialK3cloud, error) {
  214 + //拉取数据
  215 + var filterString []string
  216 + if !timeFilter.IsZero() {
  217 + str := timeFilter.Format("2006-01-02T15:04:05")
  218 + filterString = append(filterString, "FModifyDate>='"+str+"'")
  219 + }
  220 + client, err := newK3cloudClient()
  221 + if err != nil {
  222 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  223 + }
  224 + fieldKeys := []string{
  225 + "FMATERIALID", "FSpecification", "FName", "FNumber",
  226 + "FDocumentStatus", "FForbidStatus", "FErpClsID",
  227 + "FBaseUnitId", "FBaseUnitId.FName", "FCreateDate", "FModifyDate",
  228 + "FForbidDate", "FApproveDate", "FMaterialGroup", "FMaterialGroup.FName",
  229 + "FRefStatus", "FMaterialGroup.FNumber", "FUseOrgId", "FUseOrgId.FName", "FCategoryID",
  230 + }
  231 + var (
  232 + startRow int
  233 + allResult []map[string]string
  234 + queryErr error
  235 + )
  236 + for {
  237 + result, err := client.ExecuteBillQuery(k3cloud.RequestExecuteBillQuery{
  238 + FormId: "BD_MATERIAL",
  239 + Data: k3cloud.ExecuteBillQueryData{
  240 + FormId: "BD_MATERIAL",
  241 + FieldKeys: strings.Join(fieldKeys, ","), //查询的字段
  242 + StartRow: startRow,
  243 + Limit: 1000,
  244 + FilterString: strings.Join(filterString, " and "),
  245 + },
  246 + })
  247 + if err != nil {
  248 + queryErr = err
  249 + break
  250 + }
  251 + mp := result.ToMapString()
  252 + if len(mp) == 0 {
  253 + break
  254 + }
  255 + allResult = append(allResult, mp...)
  256 + startRow += 1000
  257 + }
  258 + if queryErr != nil {
  259 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  260 + }
  261 + var (
  262 + materialModels []models.MaterialK3cloud
  263 + materialTemp models.MaterialK3cloud
  264 + )
  265 + nowTime := time.Now()
  266 + for _, item := range allResult {
  267 + materialId, err := strconv.Atoi(item["FMATERIALID"])
  268 + if err != nil {
  269 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  270 + }
  271 + fErpClsID, _ := strconv.Atoi(item["FErpClsID"])
  272 + fBaseUnitId, _ := strconv.Atoi(item["FBaseUnitId"])
  273 + materialGroup, _ := strconv.Atoi(item["MaterialGroup"])
  274 + fUseOrgId, _ := strconv.Atoi(item["FUseOrgId"])
  275 + refStatus, _ := strconv.Atoi(item["RefStatus"])
  276 + fCreateDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FCreateDate"])
  277 + fModifyDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FModifyDate"])
  278 + fForbidDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FForbidDate"])
  279 + fApproveDate, _ := time.Parse("2006-01-02T15:04:05.999", item["FApproveDate"])
  280 + materialTemp = models.MaterialK3cloud{
  281 + MaterialId: materialId,
  282 + Name: item["FName"],
  283 + Number: item["FNumber"],
  284 + Specification: item["FSpecification"],
  285 + ForbidStatus: item["FForbidStatus"],
  286 + ErpClsId: fErpClsID,
  287 + BaseUnitId: fBaseUnitId,
  288 + BaseUnitName: item["FBaseUnitId.FName"],
  289 + CreateDate: fCreateDate,
  290 + ModifyDate: fModifyDate,
  291 + ForbidDate: fForbidDate,
  292 + ApproveDate: fApproveDate,
  293 + MaterialGroup: materialGroup,
  294 + MaterialGroupNumber: item["FMaterialGroup.FNumber"],
  295 + MaterialGroupName: item["FMaterialGroup.FName"],
  296 + RefStatus: refStatus,
  297 + UseOrgId: fUseOrgId,
  298 + UseOrgName: item["FUseOrgId.FName"],
  299 + JoinProductId: 0,
  300 + DataVersion: nowTime.Unix(),
  301 + FCategoryID: item["FCategoryID"],
  302 + }
  303 + materialModels = append(materialModels, materialTemp)
  304 + }
  305 + return materialModels, nil
  306 +}
  307 +
212 //PullMaterialGroup 拉取物料分组 308 //PullMaterialGroup 拉取物料分组
213 func (srv *PullDataK3CloudService) PullMaterialGroup() error { 309 func (srv *PullDataK3CloudService) PullMaterialGroup() error {
214 client, err := newK3cloudClient() 310 client, err := newK3cloudClient()
@@ -462,6 +558,33 @@ func (srv *PullDataK3CloudService) PullPrdMo(timeFilter time.Time) error { @@ -462,6 +558,33 @@ func (srv *PullDataK3CloudService) PullPrdMo(timeFilter time.Time) error {
462 return nil 558 return nil
463 } 559 }
464 560
  561 +// PullMaterialCategory 拉取物料分类
  562 +func (srv *PullDataK3CloudService) PullMaterialCategory() (map[string]string, error) {
  563 + client, err := newK3cloudClient()
  564 + if err != nil {
  565 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  566 + }
  567 + fieldKeys := []string{
  568 + "FName", "FNUMBER", "FMasterId",
  569 + }
  570 + result, err := client.ExecuteBillQuery(k3cloud.RequestExecuteBillQuery{
  571 + FormId: "BD_MATERIALCATEGORY",
  572 + Data: k3cloud.ExecuteBillQueryData{
  573 + FormId: "BD_MATERIALCATEGORY",
  574 + FieldKeys: strings.Join(fieldKeys, ","), //查询的字段
  575 + //TopRowCount: 4,
  576 +
  577 + FilterString: "",
  578 + },
  579 + })
  580 + categorys := result.ToMapString()
  581 + var categorysById = make(map[string]string)
  582 + for _, v := range categorys {
  583 + categorysById[v["FMasterId"]] = v["FName"]
  584 + }
  585 + return categorysById, nil
  586 +}
  587 +
465 // 同步产品 588 // 同步产品
466 func (srv *PullDataK3CloudService) SyncDataProduct(ptr *pgTransaction.TransactionContext, fromTime time.Time) error { 589 func (srv *PullDataK3CloudService) SyncDataProduct(ptr *pgTransaction.TransactionContext, fromTime time.Time) error {
467 prdMoDao, err := dao.NewMaterialK3cloudDao(ptr) 590 prdMoDao, err := dao.NewMaterialK3cloudDao(ptr)
@@ -612,3 +735,165 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa @@ -612,3 +735,165 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa
612 } 735 }
613 return nil 736 return nil
614 } 737 }
  738 +
  739 +// 同步产品
  740 +func (srv *PullDataK3CloudService) SyncDataMaterialGroup(ptr *pgTransaction.TransactionContext) error {
  741 + prdMoDao, err := dao.NewMaterialK3cloudDao(ptr)
  742 + if err != nil {
  743 + return err
  744 + }
  745 + var userService = domainService.NewUserService()
  746 + org, err := userService.Organization(constant.MANUFACTURE_DEFAULT_ORGID)
  747 + if err != nil {
  748 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  749 + }
  750 + fromMaterialGroups, err := prdMoDao.SearchMaterialGroup() // 默认企业名称素天下、或者使用组织ID
  751 + if err != nil {
  752 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  753 + }
  754 + var (
  755 + cid = constant.MANUFACTURE_DEFAULT_COMPANYID
  756 + oid = constant.MANUFACTURE_DEFAULT_ORGID
  757 + )
  758 + productMaterialGroupRepository, _, _ := factory.FastProductMaterialGroup(ptr, 0)
  759 + _, materialGroups, err := productMaterialGroupRepository.Find(map[string]interface{}{"companyId": cid})
  760 + if err != nil {
  761 + return err
  762 + }
  763 + mapMaterialGroups := domain.ProductMaterialGroups(materialGroups).ToMapByGroupNumber()
  764 + mapFromMaterialGroups := models.MaterialGroupK3clouds(fromMaterialGroups).ToMapId()
  765 + for _, from := range fromMaterialGroups {
  766 + to, ok := mapMaterialGroups[from.Number]
  767 + if ok {
  768 + // 更新
  769 + if to.MaterialGroupName != from.Name {
  770 + log.Logger.Info(fmt.Sprintf("更新物料分组 old:%v new:%v", to.MaterialGroupName, from.Name), map[string]interface{}{"material": to})
  771 + to.MaterialGroupName = from.Name
  772 + }
  773 + continue
  774 + }
  775 + var parentId int
  776 + if from.ParentId > 0 {
  777 + parent, ok := mapFromMaterialGroups[from.ParentId]
  778 + if !ok {
  779 + log.Logger.Warn("parent node not exits", map[string]interface{}{"material": to})
  780 + continue
  781 + }
  782 + toParent, ok := mapMaterialGroups[parent.Number]
  783 + if !ok {
  784 + log.Logger.Warn("to parent node not exits", map[string]interface{}{"material": to})
  785 + continue
  786 + }
  787 + parentId = toParent.ProductMaterialGroupId
  788 + }
  789 + productMaterialGroup := &domain.ProductMaterialGroup{
  790 + CompanyId: cid,
  791 + OrgId: oid,
  792 + Pid: parentId,
  793 + MaterialGroupName: from.Name,
  794 + MaterialGroupNumber: from.Number,
  795 + CreatedAt: time.Now(),
  796 + UpdatedAt: time.Now(),
  797 + Ext: domain.NewExt(org.OrgName),
  798 + }
  799 + if productMaterialGroup, err = productMaterialGroupRepository.Save(productMaterialGroup); err != nil {
  800 + return err
  801 + }
  802 + mapMaterialGroups[productMaterialGroup.MaterialGroupNumber] = productMaterialGroup
  803 + }
  804 + return nil
  805 +}
  806 +
  807 +// SyncDataMaterial 同步物料数据
  808 +// pullType 拉取数据方式 full:全量 其他:增量
  809 +func (srv *PullDataK3CloudService) SyncDataMaterial(ptr *pgTransaction.TransactionContext, pullType string, fromTime time.Time) error {
  810 + var (
  811 + lastTime = utils.GetZeroTime(time.Now()).Add(-time.Hour * 24) //前一天有修改的记录
  812 + org *domain.Org
  813 + err error
  814 + )
  815 + if pullType == "full" {
  816 + lastTime = time.Time{}
  817 + }
  818 +
  819 + var userService = domainService.NewUserService()
  820 + org, err = userService.Organization(constant.MANUFACTURE_DEFAULT_ORGID)
  821 + if err != nil {
  822 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  823 + }
  824 +
  825 + var (
  826 + cid = constant.MANUFACTURE_DEFAULT_COMPANYID
  827 + oid = constant.MANUFACTURE_DEFAULT_ORGID
  828 + productMaterialRepository, _, _ = factory.FastProductMaterial(ptr, 0)
  829 + productMaterialGroupRepository, _, _ = factory.FastProductMaterialGroup(ptr, 0)
  830 + materialGroups domain.ProductMaterialGroups
  831 + )
  832 +
  833 + _, materialGroups, err = productMaterialGroupRepository.Find(map[string]interface{}{"companyId": cid})
  834 + if err != nil {
  835 + return err
  836 + }
  837 + mapMaterialGroup := materialGroups.ToMapByGroupNumber()
  838 +
  839 + records, err := srv.pullMaterial(lastTime)
  840 + if err != nil {
  841 + return err
  842 + }
  843 +
  844 + mapMaterialCategory, err := srv.PullMaterialCategory()
  845 + if err != nil {
  846 + return err
  847 + }
  848 + log.Logger.Debug(fmt.Sprintf("【同步物料数据】查询数据条数:%v", len(records)))
  849 + _, materialsFromDb, _ := productMaterialRepository.Find(map[string]interface{}{"companyId": cid, "limit": 20000})
  850 + mapMaterialsFromDb := domain.ProductMaterials(materialsFromDb).ToMapByNumber()
  851 + for index, item := range records {
  852 + var (
  853 + material *domain.ProductMaterial
  854 + materialGroup *domain.ProductMaterialGroup
  855 + ok bool
  856 + attribute string //物料属性
  857 + category string //物料类别
  858 + )
  859 + if item.UseOrgName != "素天下" {
  860 + continue
  861 + }
  862 + if materialGroup, ok = mapMaterialGroup[item.MaterialGroupNumber]; !ok {
  863 + continue
  864 + }
  865 + if _, ok := mapMaterialsFromDb[item.Number]; ok {
  866 + continue
  867 + }
  868 + if v, ok := mapMaterialCategory[item.FCategoryID]; ok {
  869 + category = v
  870 + }
  871 + attribute = domain.MaterialAttributeDescription(item.ErpClsId)
  872 +
  873 + material = &domain.ProductMaterial{
  874 + CompanyId: cid,
  875 + OrgId: oid,
  876 + ProductMaterialGroupId: materialGroup.ProductMaterialGroupId,
  877 + MaterialName: item.Name,
  878 + MaterialNumber: item.Number,
  879 + MaterialAttribute: &domain.MaterialAttribute{Attribute: attribute},
  880 + MaterialCategory: &domain.MaterialCategory{Category: category},
  881 + ProductMaterialExt: &domain.MaterialExt{
  882 + Specification: item.Specification,
  883 + Unit: item.BaseUnitName,
  884 + ExpiredDay: 0,
  885 + Remark: "",
  886 + Source: "k3cloud",
  887 + },
  888 + CreatedAt: time.Now(),
  889 + UpdatedAt: time.Now(),
  890 + Ext: domain.NewExt(org.OrgName),
  891 + }
  892 + if material, err = productMaterialRepository.Save(material); err != nil {
  893 + log.Logger.Debug(fmt.Sprintf("同步失败 序号:%v 物料数据 id:%v number:%v name:%v 错误:%v", index, material.ProductMaterialId, material.MaterialNumber, material.MaterialName, err.Error()))
  894 + continue
  895 + }
  896 + log.Logger.Debug(fmt.Sprintf("同步 序号:%v 物料数据 id:%v number:%v name:%v", index, material.ProductMaterialId, material.MaterialNumber, material.MaterialName))
  897 + }
  898 + return nil
  899 +}
@@ -13,10 +13,13 @@ type MaterialUnitConversionDto struct { @@ -13,10 +13,13 @@ type MaterialUnitConversionDto struct {
13 ToUnitQuantity *domain.UnitQuantity `json:"toUnitQuantity,omitempty"` 13 ToUnitQuantity *domain.UnitQuantity `json:"toUnitQuantity,omitempty"`
14 } 14 }
15 15
16 -func (d *MaterialUnitConversionDto) LoadDto(m *domain.UnitConversion) *MaterialUnitConversionDto { 16 +func (d *MaterialUnitConversionDto) LoadDto(m *domain.UnitConversion, material *domain.ProductMaterial) *MaterialUnitConversionDto {
17 d.UnitConversionId = m.UnitConversionId 17 d.UnitConversionId = m.UnitConversionId
18 d.MaterialName = m.Material.MaterialName 18 d.MaterialName = m.Material.MaterialName
19 d.FromUnitQuantity = m.FromUnitQuantity 19 d.FromUnitQuantity = m.FromUnitQuantity
20 d.ToUnitQuantity = m.ToUnitQuantity 20 d.ToUnitQuantity = m.ToUnitQuantity
  21 + if material != nil {
  22 + d.MaterialName = material.MaterialName
  23 + }
21 return d 24 return d
22 } 25 }
@@ -25,7 +25,7 @@ type UnitConversionDto struct { @@ -25,7 +25,7 @@ type UnitConversionDto struct {
25 AuthFlag bool `json:"authFlag"` 25 AuthFlag bool `json:"authFlag"`
26 } 26 }
27 27
28 -func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int) *UnitConversionDto { 28 +func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int, productMaterial *domain.ProductMaterial) *UnitConversionDto {
29 d.UnitConversionId = m.UnitConversionId 29 d.UnitConversionId = m.UnitConversionId
30 d.WorkStation = m.WorkStation 30 d.WorkStation = m.WorkStation
31 d.Material = m.Material 31 d.Material = m.Material
@@ -36,5 +36,8 @@ func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int) *UnitCo @@ -36,5 +36,8 @@ func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int) *UnitCo
36 if m.Ext != nil { 36 if m.Ext != nil {
37 d.OrgName = m.Ext.OrgName 37 d.OrgName = m.Ext.OrgName
38 } 38 }
  39 + if productMaterial != nil {
  40 + d.Material.MaterialName = productMaterial.MaterialName
  41 + }
39 return d 42 return d
40 } 43 }
@@ -91,12 +91,21 @@ func (unitConversionService *UnitConversionService) GetUnitConversion(getUnitCon @@ -91,12 +91,21 @@ func (unitConversionService *UnitConversionService) GetUnitConversion(getUnitCon
91 //var unitConversionRepository domain.UnitConversionRepository 91 //var unitConversionRepository domain.UnitConversionRepository
92 var unitConversion *domain.UnitConversion 92 var unitConversion *domain.UnitConversion
93 _, unitConversion, err = factory.FastPgUnitConversion(transactionContext, getUnitConversionQuery.UnitConversionId) 93 _, unitConversion, err = factory.FastPgUnitConversion(transactionContext, getUnitConversionQuery.UnitConversionId)
94 - 94 + if err != nil {
  95 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  96 + }
  97 + var productMaterial *domain.ProductMaterial
  98 + if unitConversion.Material.ProductMaterialId > 0 {
  99 + _, productMaterial, err = factory.FastProductMaterial(transactionContext, unitConversion.Material.ProductMaterialId)
  100 + if err != nil {
  101 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  102 + }
  103 + }
95 if err := transactionContext.CommitTransaction(); err != nil { 104 if err := transactionContext.CommitTransaction(); err != nil {
96 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 105 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
97 } 106 }
98 result := &dto.UnitConversionDto{} 107 result := &dto.UnitConversionDto{}
99 - result.LoadDto(unitConversion, 0) 108 + result.LoadDto(unitConversion, 0, productMaterial)
100 return result, nil 109 return result, nil
101 110
102 } 111 }
@@ -293,17 +302,29 @@ func (unitConversionService *UnitConversionService) SearchUnitConversion(operate @@ -293,17 +302,29 @@ func (unitConversionService *UnitConversionService) SearchUnitConversion(operate
293 if err != nil { 302 if err != nil {
294 return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 303 return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
295 } 304 }
296 - if err := transactionContext.CommitTransaction(); err != nil {  
297 - return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 305 +
  306 + var mapProductMaterial = make(map[int]*domain.ProductMaterial, 0)
  307 + productMaterialIds := domain.UnitConversions(unitConversions).ProductMaterialIds()
  308 + if len(productMaterialIds) > 0 {
  309 + productMaterialRepository, _, _ := factory.FastProductMaterial(transactionContext, 0)
  310 + _, productMaterials, err := productMaterialRepository.Find(map[string]interface{}{"productMaterialIds": productMaterialIds})
  311 + if err != nil {
  312 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  313 + }
  314 + mapProductMaterial = domain.ProductMaterials(productMaterials).ToMapById()
298 } 315 }
299 316
300 var result = make([]*dto.UnitConversionDto, 0) 317 var result = make([]*dto.UnitConversionDto, 0)
301 for i := range unitConversions { 318 for i := range unitConversions {
302 item := unitConversions[i] 319 item := unitConversions[i]
303 newItem := &dto.UnitConversionDto{} 320 newItem := &dto.UnitConversionDto{}
304 - newItem.LoadDto(item, operateInfo.OrgId) 321 + newItem.LoadDto(item, operateInfo.OrgId, mapProductMaterial[item.Material.ProductMaterialId])
305 result = append(result, newItem) 322 result = append(result, newItem)
306 } 323 }
  324 +
  325 + if err := transactionContext.CommitTransaction(); err != nil {
  326 + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  327 + }
307 return count, result, nil 328 return count, result, nil
308 } 329 }
309 330
@@ -331,11 +352,22 @@ func (unitConversionService *UnitConversionService) SearchMaterial(operateInfo * @@ -331,11 +352,22 @@ func (unitConversionService *UnitConversionService) SearchMaterial(operateInfo *
331 return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 352 return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
332 } 353 }
333 354
  355 + var mapProductMaterial = make(map[int]*domain.ProductMaterial, 0)
  356 + productMaterialIds := domain.UnitConversions(unitConversions).ProductMaterialIds()
  357 + if len(productMaterialIds) > 0 {
  358 + productMaterialRepository, _, _ := factory.FastProductMaterial(transactionContext, 0)
  359 + _, productMaterials, err := productMaterialRepository.Find(map[string]interface{}{"productMaterialIds": productMaterialIds})
  360 + if err != nil {
  361 + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  362 + }
  363 + mapProductMaterial = domain.ProductMaterials(productMaterials).ToMapById()
  364 + }
  365 +
334 var result = make([]*dto.MaterialUnitConversionDto, 0) 366 var result = make([]*dto.MaterialUnitConversionDto, 0)
335 for i := range unitConversions { 367 for i := range unitConversions {
336 item := unitConversions[i] 368 item := unitConversions[i]
337 newItem := &dto.MaterialUnitConversionDto{} 369 newItem := &dto.MaterialUnitConversionDto{}
338 - newItem.LoadDto(item) 370 + newItem.LoadDto(item, mapProductMaterial[item.Material.ProductMaterialId])
339 result = append(result, newItem) 371 result = append(result, newItem)
340 } 372 }
341 return count, map[string]interface{}{ 373 return count, map[string]interface{}{
@@ -7,6 +7,8 @@ import ( @@ -7,6 +7,8 @@ import (
7 7
8 const MaxQueryRow = 10000 8 const MaxQueryRow = 10000
9 9
  10 +const PathSegment = ","
  11 +
10 // 班次 12 // 班次
11 const ( 13 const (
12 WorkOnFullDay = 1 //全天 14 WorkOnFullDay = 1 //全天
@@ -2,6 +2,9 @@ package domain @@ -2,6 +2,9 @@ package domain
2 2
3 // 冗余附加数据 3 // 冗余附加数据
4 type Ext struct { 4 type Ext struct {
  5 + // 操作人
  6 + Operator *User `json:"operator,omitempty"`
  7 +
5 // 组织名称 8 // 组织名称
6 OrgName string `json:"orgName,omitempty"` 9 OrgName string `json:"orgName,omitempty"`
7 10
@@ -35,3 +38,8 @@ func (e *Ext) WithProductPlanExt(ext *ProductPlanExt) *Ext { @@ -35,3 +38,8 @@ func (e *Ext) WithProductPlanExt(ext *ProductPlanExt) *Ext {
35 e.ProductPlanExt = ext 38 e.ProductPlanExt = ext
36 return e 39 return e
37 } 40 }
  41 +
  42 +func (e *Ext) WithOperator(ext *User) *Ext {
  43 + e.Operator = ext
  44 + return e
  45 +}
@@ -2,8 +2,36 @@ package domain @@ -2,8 +2,36 @@ package domain
2 2
3 // 物料 3 // 物料
4 type Material struct { 4 type Material struct {
5 - // 物料名称 5 + // 物料ID
  6 + ProductMaterialId int `json:"productMaterialId"`
  7 + // 物料名称 (最新数据需要查询物料表)
6 MaterialName string `json:"materialName,omitempty"` 8 MaterialName string `json:"materialName,omitempty"`
7 - // 物料类别 9 + // 物料类别 ‘南瓜饼串’、‘ 包装袋(空)’、‘包装袋(件数)’、装箱(件数)
8 MaterialCategory string `json:"materialCategory,omitempty"` 10 MaterialCategory string `json:"materialCategory,omitempty"`
9 } 11 }
  12 +
  13 +// 物料类别
  14 +type MaterialCategory struct {
  15 + //Id int `json:"id"`
  16 + Category string `json:"category"`
  17 +}
  18 +
  19 +// 物料属性
  20 +type MaterialAttribute struct {
  21 + //Id int `json:"id"`
  22 + Attribute string `json:"attribute"`
  23 +}
  24 +
  25 +// 物料扩展数据
  26 +type MaterialExt struct {
  27 + // 规格
  28 + Specification string `json:"specification"`
  29 + // 单位
  30 + Unit string `json:"unit"`
  31 + // 保质期 单位:天
  32 + ExpiredDay int `json:"expiredDay"`
  33 + // 备注
  34 + Remark string `json:"remark"`
  35 + // 来源 k3cloud
  36 + Source string `json:"source"`
  37 +}
@@ -2,6 +2,7 @@ package domain @@ -2,6 +2,7 @@ package domain
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
5 "strconv" 6 "strconv"
6 "time" 7 "time"
7 ) 8 )
@@ -99,15 +100,18 @@ type ImportProductItem struct { @@ -99,15 +100,18 @@ type ImportProductItem struct {
99 } 100 }
100 101
101 func (item *ImportProductItem) Valid() error { 102 func (item *ImportProductItem) Valid() error {
102 - if len(item.ProductName) == 0 {  
103 - return fmt.Errorf("品名不能为空")  
104 - }  
105 - if len(item.Unit) == 0 {  
106 - return fmt.Errorf("规格不能为空")  
107 - }  
108 - if len(item.ProductCategory) == 0 {  
109 - return fmt.Errorf("类别不能为空") 103 + if len(item.ProductCode) == 0 {
  104 + return fmt.Errorf("产品编号不能为空")
110 } 105 }
  106 + //if len(item.ProductName) == 0 {
  107 + // return fmt.Errorf("品名不能为空")
  108 + //}
  109 + //if len(item.Unit) == 0 {
  110 + // return fmt.Errorf("规格不能为空")
  111 + //}
  112 + //if len(item.ProductCategory) == 0 {
  113 + // return fmt.Errorf("类别不能为空")
  114 + //}
111 if len(item.UnitWeight) == 0 { 115 if len(item.UnitWeight) == 0 {
112 item.UnitWeight = "0" 116 item.UnitWeight = "0"
113 } 117 }
@@ -116,3 +120,13 @@ func (item *ImportProductItem) Valid() error { @@ -116,3 +120,13 @@ func (item *ImportProductItem) Valid() error {
116 } 120 }
117 return nil 121 return nil
118 } 122 }
  123 +
  124 +type Products []*Product
  125 +
  126 +func (products Products) ProductCodes() []string {
  127 + var result = utils.NewSet()
  128 + for _, v := range products {
  129 + result.Add(v.ProductCode)
  130 + }
  131 + return result.KeysStr()
  132 +}
  1 +package domain
  2 +
  3 +import "time"
  4 +
  5 +// 生产物料
  6 +type ProductMaterial struct {
  7 + // 物料ID
  8 + ProductMaterialId int `json:"productMaterialId"`
  9 + // 企业id
  10 + CompanyId int `json:"companyId"`
  11 + // 组织ID
  12 + OrgId int `json:"orgId"`
  13 + // 物料分组ID
  14 + ProductMaterialGroupId int `json:"productMaterialGroupId"`
  15 + // 物料编码
  16 + MaterialNumber string `json:"materialNumber"`
  17 + // 物料名称
  18 + MaterialName string `json:"materialName"`
  19 + // 物料属性
  20 + MaterialAttribute *MaterialAttribute `json:"materialAttribute"`
  21 + // 物料类别
  22 + MaterialCategory *MaterialCategory `json:"materialCategory"`
  23 + // 物料扩展
  24 + ProductMaterialExt *MaterialExt `json:"productMaterialExt"`
  25 + // 创建时间
  26 + CreatedAt time.Time `json:"createdAt"`
  27 + // 更新时间
  28 + UpdatedAt time.Time `json:"updatedAt"`
  29 + // 删除时间
  30 + DeletedAt time.Time `json:"deletedAt"`
  31 + // 扩展
  32 + Ext *Ext `json:"ext"`
  33 +}
  34 +
  35 +type ProductMaterialRepository interface {
  36 + Save(productMaterial *ProductMaterial) (*ProductMaterial, error)
  37 + Remove(productMaterial *ProductMaterial) (*ProductMaterial, error)
  38 + FindOne(queryOptions map[string]interface{}) (*ProductMaterial, error)
  39 + Find(queryOptions map[string]interface{}) (int64, []*ProductMaterial, error)
  40 +}
  41 +
  42 +func (productMaterial *ProductMaterial) Identify() interface{} {
  43 + if productMaterial.ProductMaterialId == 0 {
  44 + return nil
  45 + }
  46 + return productMaterial.ProductMaterialId
  47 +}
  48 +
  49 +func (productMaterial *ProductMaterial) Update(data map[string]interface{}) error {
  50 + return nil
  51 +}
  52 +
  53 +type ProductMaterials []*ProductMaterial
  54 +
  55 +func (productMaterials ProductMaterials) ToMapById() map[int]*ProductMaterial {
  56 + var mapProductMaterial = make(map[int]*ProductMaterial, 0)
  57 + for _, v := range productMaterials {
  58 + mapProductMaterial[v.ProductMaterialId] = v
  59 + }
  60 + return mapProductMaterial
  61 +}
  62 +
  63 +func (productMaterials ProductMaterials) ToMapByNumber() map[string]*ProductMaterial {
  64 + var mapProductMaterial = make(map[string]*ProductMaterial, 0)
  65 + for _, v := range productMaterials {
  66 + mapProductMaterial[v.MaterialNumber] = v
  67 + }
  68 + return mapProductMaterial
  69 +}
  70 +
  71 +// 10:资产,9:配置,2:自制,11:费用,12:模型,5:虚拟,7:一次性,13:产品系列 12:模型,3:委外,4:特征,6:服务,1:外购
  72 +var mapMaterialCategory = map[int]string{
  73 + 1: "外购",
  74 + 2: "自制",
  75 + 3: "委外",
  76 + 4: "特征",
  77 + 5: "虚拟",
  78 + 6: "服务",
  79 + 7: "一次性",
  80 + 8: "",
  81 + 9: "配置",
  82 + 10: "资产",
  83 + 11: "费用",
  84 + 12: "模型",
  85 + 13: "产品系列",
  86 +}
  87 +
  88 +func MaterialAttributeDescription(code int) string {
  89 + if v, ok := mapMaterialCategory[code]; ok {
  90 + return v
  91 + }
  92 + return ""
  93 +}
  1 +package domain
  2 +
  3 +import (
  4 + "fmt"
  5 + "strconv"
  6 + "time"
  7 +)
  8 +
  9 +// 物料分组
  10 +type ProductMaterialGroup struct {
  11 + // 物料分组ID
  12 + ProductMaterialGroupId int `json:"productMaterialGroupId"`
  13 + // 企业id
  14 + CompanyId int `json:"companyId"`
  15 + // 组织ID
  16 + OrgId int `json:"orgId"`
  17 + // 父级ID
  18 + Pid int `json:"pid"`
  19 + // 路径 (不使用,如果父级改变的话,子级的Path要做更新)
  20 + //Path string `json:"path"`
  21 + // 物料分组名称
  22 + MaterialGroupName string `json:"materialGroupName"`
  23 + // 物料分组编码
  24 + MaterialGroupNumber string `json:"materialGroupNumber"`
  25 + // 创建时间
  26 + CreatedAt time.Time `json:"createdAt"`
  27 + // 更新时间
  28 + UpdatedAt time.Time `json:"updatedAt"`
  29 + // 删除时间
  30 + DeletedAt time.Time `json:"deletedAt"`
  31 + // 扩展数据
  32 + Ext *Ext `json:"ext,omitempty"`
  33 +}
  34 +
  35 +type ProductMaterialGroupRepository interface {
  36 + Save(productMaterialGroup *ProductMaterialGroup) (*ProductMaterialGroup, error)
  37 + Remove(productMaterialGroup *ProductMaterialGroup) (*ProductMaterialGroup, error)
  38 + FindOne(queryOptions map[string]interface{}) (*ProductMaterialGroup, error)
  39 + Find(queryOptions map[string]interface{}) (int64, []*ProductMaterialGroup, error)
  40 +}
  41 +
  42 +func (productMaterialGroup *ProductMaterialGroup) Identify() interface{} {
  43 + if productMaterialGroup.ProductMaterialGroupId == 0 {
  44 + return nil
  45 + }
  46 + return productMaterialGroup.ProductMaterialGroupId
  47 +}
  48 +
  49 +func (productMaterialGroup *ProductMaterialGroup) Update(data map[string]interface{}) error {
  50 + return nil
  51 +}
  52 +
  53 +func (productMaterialGroup *ProductMaterialGroup) GroupNumberComposeUp(parent *ProductMaterialGroup, latestNumber string, total int) string {
  54 + iNumber, err := strconv.ParseInt(latestNumber, 10, 64)
  55 +
  56 + if err == nil {
  57 + iNumber += 1
  58 + return formatFunc(iNumber)
  59 + }
  60 + if parent != nil {
  61 + return parent.MaterialGroupNumber + formatFunc(int64(total+1))
  62 + }
  63 + return formatFunc(int64(total + 1))
  64 +}
  65 +
  66 +func formatFunc(iNumber int64) string {
  67 + sNumber := fmt.Sprintf("%d", iNumber)
  68 + if len(sNumber)%2 == 1 {
  69 + return "0" + sNumber
  70 + }
  71 + return sNumber
  72 +}
  73 +
  74 +/***** 1.实现树 *****/
  75 +
  76 +func (productMaterialGroup *ProductMaterialGroup) PID() string {
  77 + return fmt.Sprintf("%d", productMaterialGroup.Pid)
  78 +}
  79 +func (productMaterialGroup *ProductMaterialGroup) ID() string {
  80 + return fmt.Sprintf("%d", productMaterialGroup.ProductMaterialGroupId)
  81 +}
  82 +
  83 +type ProductMaterialGroups []*ProductMaterialGroup
  84 +
  85 +func (tree ProductMaterialGroups) Len() int {
  86 + return len(tree)
  87 +}
  88 +
  89 +func (tree ProductMaterialGroups) Less(i, j int) bool {
  90 + if tree[i].Pid < tree[j].Pid {
  91 + return true
  92 + }
  93 + if tree[i].Pid == tree[j].Pid {
  94 + return tree[i].ProductMaterialGroupId < tree[j].ProductMaterialGroupId
  95 + }
  96 + return false
  97 +}
  98 +
  99 +func (tree ProductMaterialGroups) Swap(i, j int) {
  100 + tree[i], tree[j] = tree[j], tree[i]
  101 +}
  102 +
  103 +func (tree ProductMaterialGroups) ToMapByGroupNumber() map[string]*ProductMaterialGroup {
  104 + var result = make(map[string]*ProductMaterialGroup)
  105 + for i := range tree {
  106 + result[tree[i].MaterialGroupNumber] = tree[i]
  107 + }
  108 + return result
  109 +}
1 package domain 1 package domain
2 2
3 -import "time" 3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
  5 + "time"
  6 +)
4 7
5 // 单位换算 8 // 单位换算
6 type UnitConversion struct { 9 type UnitConversion struct {
@@ -57,3 +60,16 @@ func (unitConversion *UnitConversion) Update(data map[string]interface{}) error @@ -57,3 +60,16 @@ func (unitConversion *UnitConversion) Update(data map[string]interface{}) error
57 unitConversion.UpdatedAt = time.Now() 60 unitConversion.UpdatedAt = time.Now()
58 return nil 61 return nil
59 } 62 }
  63 +
  64 +type UnitConversions []*UnitConversion
  65 +
  66 +func (unitConversions UnitConversions) ProductMaterialIds() []int {
  67 + set := utils.NewSet()
  68 + for i := range unitConversions {
  69 + if unitConversions[i].Material.ProductMaterialId == 0 {
  70 + continue
  71 + }
  72 + set.Add(unitConversions[i].Material.ProductMaterialId)
  73 + }
  74 + return set.KeysInt()
  75 +}
@@ -25,7 +25,6 @@ func (dao *DeviceDailyRunningRecordDao) TimeSectionRunningRecord(companyId, orgI @@ -25,7 +25,6 @@ func (dao *DeviceDailyRunningRecordDao) TimeSectionRunningRecord(companyId, orgI
25 25
26 tx := dao.transactionContext.PgTx 26 tx := dao.transactionContext.PgTx
27 sql := fmt.Sprintf(` 27 sql := fmt.Sprintf(`
28 -  
29 WITH ts_product as( 28 WITH ts_product as(
30 select sum(a.weight) total,a.ts from ( 29 select sum(a.weight) total,a.ts from (
31 select 30 select
@@ -38,7 +37,7 @@ WITH ts_product as( @@ -38,7 +37,7 @@ WITH ts_product as(
38 and work_station->>'workshopId'='?' 37 and work_station->>'workshopId'='?'
39 and work_station->>'lineId'='?' 38 and work_station->>'lineId'='?'
40 and work_station->>'sectionName'=? 39 and work_station->>'sectionName'=?
41 - and created_at >? 40 + and created_at >=?
42 and created_at <? 41 and created_at <?
43 ) a 42 ) a
44 group by a.ts 43 group by a.ts
@@ -47,14 +46,14 @@ WITH ts_product as( @@ -47,14 +46,14 @@ WITH ts_product as(
47 -- select * from ts_product 46 -- select * from ts_product
48 , ts_product_list as ( 47 , ts_product_list as (
49 select d.ts,ts_product.total from ( 48 select d.ts,ts_product.total from (
50 - select to_char(c.ts::timestamp,'mm-dd') ts from (  
51 - select generate_series(to_timestamp(?),to_timestamp(?),'1 day') ts 49 + select to_char(c.ts,'mm-dd') ts from (
  50 + select generate_series(to_timestamp(?,'YYYY-MM-DD HH24:MI:SS') at time ZONE 'Asia/shanghai',to_timestamp(?,'YYYY-MM-DD HH24:MI:SS') at time ZONE 'Asia/shanghai','1 day') ts
52 ) c ) d left join ts_product on d.ts = ts_product.ts 51 ) c ) d left join ts_product on d.ts = ts_product.ts
53 ) 52 )
54 SELECT ts, coalesce(total,0) total 53 SELECT ts, coalesce(total,0) total
55 from ts_product_list 54 from ts_product_list
56 `) 55 `)
57 - if _, err := tx.Query(result, sql, companyId, orgId, workshopId, lineId, sectionName, beginTime, endTime, beginTime.Unix(), endTime.Unix()); err != nil { 56 + if _, err := tx.Query(result, sql, companyId, orgId, workshopId, lineId, sectionName, beginTime, endTime, beginTime, endTime); err != nil {
58 return err 57 return err
59 } 58 }
60 return nil 59 return nil
@@ -120,7 +119,7 @@ select * from device_running_oee @@ -120,7 +119,7 @@ select * from device_running_oee
120 } 119 }
121 120
122 // 时段产能 121 // 时段产能
123 -func (dao *DeviceDailyRunningRecordDao) TimeSectionProductRecord(companyId, orgId, workshopId int, lineId int, sectionName string, beginTime time.Time, result interface{}) error { 122 +func (dao *DeviceDailyRunningRecordDao) TimeSectionProductRecord(companyId, orgId, workshopId int, lineId int, sectionName string, beginTime time.Time, endTime time.Time, result interface{}) error {
124 123
125 tx := dao.transactionContext.PgTx 124 tx := dao.transactionContext.PgTx
126 sql := fmt.Sprintf(` 125 sql := fmt.Sprintf(`
@@ -137,7 +136,8 @@ WITH ts_product as( @@ -137,7 +136,8 @@ WITH ts_product as(
137 and work_station->>'lineId'='?' 136 and work_station->>'lineId'='?'
138 and work_station->>'sectionName'=? 137 and work_station->>'sectionName'=?
139 and device_running_record_info->>'deviceType'='CCJ' 138 and device_running_record_info->>'deviceType'='CCJ'
140 - and created_at >? 139 + and created_at >=?
  140 + and created_at < ?
141 ) a 141 ) a
142 group by a.ts 142 group by a.ts
143 order by ts 143 order by ts
@@ -145,19 +145,15 @@ WITH ts_product as( @@ -145,19 +145,15 @@ WITH ts_product as(
145 -- select * from ts_product 145 -- select * from ts_product
146 , ts_product_list as ( 146 , ts_product_list as (
147 select d.ts,ts_product.total from ( 147 select d.ts,ts_product.total from (
148 - select to_char(c.ts::timestamp,'HH24:MI') ts from (  
149 - select generate_series(a.end - interval '5 hour',  
150 - "replace"(to_char(a.end, 'yyyy-mm-dd HH24:') || cast(date_part('minute',a.end) as integer)/30*30+30, ':0', ':00')::timestamp,  
151 - '30 minute') ts from (  
152 - select to_timestamp(to_char(now() at time ZONE 'Asia/shanghai','yyyy-mm-dd HH24'),'yyyy-mm-dd HH24') as end  
153 - ) a  
154 - ) c 148 + select "replace"(to_char(created_at at time ZONE 'Asia/shanghai', 'HH24:') || cast(date_part('minute',created_at) as integer)/30*30, ':0', ':00') ts from (
  149 + select generate_series(to_timestamp(?,'YYYY-MM-DD HH24:MI:SS'),to_timestamp(?,'YYYY-MM-DD HH24:MI:SS'),'30 minute') created_at
  150 + ) a
155 ) d left join ts_product on d.ts = ts_product.ts 151 ) d left join ts_product on d.ts = ts_product.ts
156 ) 152 )
157 SELECT ts, coalesce(total,0) total 153 SELECT ts, coalesce(total,0) total
158 from ts_product_list 154 from ts_product_list
159 `) 155 `)
160 - if _, err := tx.Query(result, sql, companyId, orgId, workshopId, lineId, sectionName, beginTime); err != nil { 156 + if _, err := tx.Query(result, sql, companyId, orgId, workshopId, lineId, sectionName, beginTime, endTime, beginTime, endTime.Add(-time.Minute*1)); err != nil {
161 return err 157 return err
162 } 158 }
163 return nil 159 return nil
@@ -178,3 +178,13 @@ func (d *MaterialK3cloudDao) GetLastVersion() (int64, error) { @@ -178,3 +178,13 @@ func (d *MaterialK3cloudDao) GetLastVersion() (int64, error) {
178 } 178 }
179 return materialData[0].DataVersion, nil 179 return materialData[0].DataVersion, nil
180 } 180 }
  181 +
  182 +func (d *MaterialK3cloudDao) SearchMaterialGroup() ([]*models.MaterialGroupK3cloud, error) {
  183 + var materialData []*models.MaterialGroupK3cloud
  184 + query := d.transactionContext.PgTx.Model(&materialData)
  185 + query.OrderExpr("number asc")
  186 + if err := query.Select(); err != nil {
  187 + return nil, err
  188 + }
  189 + return materialData, nil
  190 +}
@@ -170,3 +170,18 @@ func (d *PrdMoK3cloudDao) GetLatestData(fromTime time.Time) ([]*models.PrdMoK3cl @@ -170,3 +170,18 @@ func (d *PrdMoK3cloudDao) GetLatestData(fromTime time.Time) ([]*models.PrdMoK3cl
170 } 170 }
171 return result, nil 171 return result, nil
172 } 172 }
  173 +
  174 +// GetLatestMaterialData 增量获取物料数据
  175 +func (d *PrdMoK3cloudDao) GetLatestMaterialData(fromTime time.Time, offset, limit int) ([]*models.MaterialK3cloud, int, error) {
  176 + m := new(models.MaterialK3cloud)
  177 + result := make([]*models.MaterialK3cloud, 0)
  178 + query := d.transactionContext.PgTx.Model(m)
  179 + if !fromTime.IsZero() {
  180 + query.Where("modify_date>=?", fromTime)
  181 + }
  182 + err := query.Select(&result)
  183 + if err != nil {
  184 + return nil, 0, err
  185 + }
  186 + return result, len(result), nil
  187 +}
  1 +package dao
  2 +
  3 +import (
  4 + "fmt"
  5 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
  7 +)
  8 +
  9 +type ProductMaterialGroupDao struct {
  10 + transactionContext *pgTransaction.TransactionContext
  11 +}
  12 +
  13 +func (dao *ProductMaterialGroupDao) CurrentGroupLatestNumber(companyId int, productMaterialGroupId int) (string, int, error) {
  14 + m := new(models.ProductMaterialGroup)
  15 + var result string
  16 + var total int
  17 + query := dao.transactionContext.PgTx.Model(m).Where("company_id = ?", companyId)
  18 + query.Where("pid = ?", productMaterialGroupId)
  19 + query.ColumnExpr("max(material_group_number) number")
  20 + query.ColumnExpr("count(material_group_number) total")
  21 + query.AllWithDeleted()
  22 + err := query.Select(&result, &total)
  23 + return result, total, err
  24 +}
  25 +
  26 +func NewProductMaterialGroupDao(transactionContext *pgTransaction.TransactionContext) (*ProductMaterialGroupDao, error) {
  27 + if transactionContext == nil {
  28 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  29 + } else {
  30 + return &ProductMaterialGroupDao{
  31 + transactionContext: transactionContext,
  32 + }, nil
  33 + }
  34 +}
@@ -3,6 +3,6 @@ package domainService @@ -3,6 +3,6 @@ package domainService
3 import "testing" 3 import "testing"
4 4
5 func TestSectionProductive(t *testing.T) { 5 func TestSectionProductive(t *testing.T) {
6 - svr := NewByteBankService()  
7 - svr.SectionProductive() 6 + //svr := NewByteBankService()
  7 + //svr.SectionProductive()
8 } 8 }
@@ -6,8 +6,8 @@ import ( @@ -6,8 +6,8 @@ import (
6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
7 "github.com/linmadan/egglib-go/utils/tool_funs" 7 "github.com/linmadan/egglib-go/utils/tool_funs"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
9 - "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/redis"  
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/repository" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/repository"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
12 "strconv" 12 "strconv"
13 "time" 13 "time"
@@ -36,10 +36,22 @@ func (ptr *PGBatchAddProductService) BatchAddProduct(opt *domain.OperateInfo, li @@ -36,10 +36,22 @@ func (ptr *PGBatchAddProductService) BatchAddProduct(opt *domain.OperateInfo, li
36 if err != nil { 36 if err != nil {
37 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 37 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
38 } 38 }
39 -  
40 - var generator = redis.NewProductCodeCache(opt.CompanyId) 39 + var materials domain.ProductMaterials
  40 + if materials, err = ptr.GetProductMaterialByImportItems(opt.CompanyId, list); err != nil {
  41 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  42 + }
  43 + mapMaterials := materials.ToMapByNumber()
41 for i := range list { 44 for i := range list {
42 item := list[i] 45 item := list[i]
  46 + if v, ok := mapMaterials[item.ProductCode]; !ok {
  47 + item.FailReason = "导入的产品编号不存在"
  48 + failRows = append(failRows, item)
  49 + continue
  50 + } else {
  51 + item.Unit = v.ProductMaterialExt.Unit
  52 + item.ProductName = v.MaterialName
  53 + item.ProductCategory = v.MaterialCategory.Category
  54 + }
43 if err := item.Valid(); err != nil { 55 if err := item.Valid(); err != nil {
44 item.FailReason = err.Error() 56 item.FailReason = err.Error()
45 failRows = append(failRows, item) 57 failRows = append(failRows, item)
@@ -69,14 +81,6 @@ func (ptr *PGBatchAddProductService) BatchAddProduct(opt *domain.OperateInfo, li @@ -69,14 +81,6 @@ func (ptr *PGBatchAddProductService) BatchAddProduct(opt *domain.OperateInfo, li
69 continue 81 continue
70 } 82 }
71 } 83 }
72 - if len(newItem.ProductCode) == 0 {  
73 - code, err := redis.GenCode(generator)  
74 - if err != nil {  
75 - log.Logger.Error(err.Error())  
76 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "服务器异常")  
77 - }  
78 - newItem.ProductCode = code  
79 - }  
80 84
81 if _, ok := mapProduct[newItem.ProductCode]; !ok { 85 if _, ok := mapProduct[newItem.ProductCode]; !ok {
82 mapProduct[newItem.ProductCode] = newItem 86 mapProduct[newItem.ProductCode] = newItem
@@ -105,6 +109,28 @@ func (ptr *PGBatchAddProductService) updateProduct(opt *domain.OperateInfo, item @@ -105,6 +109,28 @@ func (ptr *PGBatchAddProductService) updateProduct(opt *domain.OperateInfo, item
105 return nil 109 return nil
106 } 110 }
107 111
  112 +func (ptr *PGBatchAddProductService) GetProductMaterialByProductCodes(companyId int, productCodes []string) ([]*domain.ProductMaterial, error) {
  113 + productMaterialRepository, _ := repository.NewProductMaterialRepository(ptr.transactionContext)
  114 + _, productMaterials, err := productMaterialRepository.Find(map[string]interface{}{"companyId": companyId, "materialNumbers": productCodes})
  115 + return productMaterials, err
  116 +}
  117 +
  118 +func (ptr *PGBatchAddProductService) GetProductMaterialByImportItems(companyId int, list []*domain.ImportProductItem) ([]*domain.ProductMaterial, error) {
  119 + productCodes := ptr.GetProductCodesByImportItems(list)
  120 + if len(productCodes) == 0 {
  121 + return []*domain.ProductMaterial{}, nil
  122 + }
  123 + return ptr.GetProductMaterialByProductCodes(companyId, productCodes)
  124 +}
  125 +
  126 +func (ptr *PGBatchAddProductService) GetProductCodesByImportItems(list []*domain.ImportProductItem) []string {
  127 + var result = utils.NewSet()
  128 + for _, v := range list {
  129 + result.Add(v.ProductCode)
  130 + }
  131 + return result.KeysStr()
  132 +}
  133 +
108 func NewPGBatchAddProductService(transactionContext *pgTransaction.TransactionContext) (*PGBatchAddProductService, error) { 134 func NewPGBatchAddProductService(transactionContext *pgTransaction.TransactionContext) (*PGBatchAddProductService, error) {
109 if transactionContext == nil { 135 if transactionContext == nil {
110 return nil, fmt.Errorf("transactionContext参数不能为nil") 136 return nil, fmt.Errorf("transactionContext参数不能为nil")
@@ -94,11 +94,19 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[ @@ -94,11 +94,19 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[
94 } 94 }
95 productRecordDao, _ := dao.NewDeviceDailyRunningRecordDao(ptr.transactionContext) 95 productRecordDao, _ := dao.NewDeviceDailyRunningRecordDao(ptr.transactionContext)
96 96
97 - var response = make([]interface{}, 0)  
98 - var tmpXData = make([]string, 0) 97 + var (
  98 + response = make([]interface{}, 0)
  99 + tmpXData = make([]string, 0)
  100 + beginTime = xtime.BeginningOfDay() //time.Now().Add(-time.Hour*5)
  101 + endTime = time.Now()
  102 + )
  103 + if !xtime.IsZero(request.Date.Time()) && !request.Date.Time().Equal(beginTime) {
  104 + beginTime = request.Date.Time().AddDate(0, 0, -1)
  105 + endTime = request.Date.Time()
  106 + }
99 for _, v := range workshop.GetProductLines(domain.NotDeleted) { 107 for _, v := range workshop.GetProductLines(domain.NotDeleted) {
100 var result = make([]*record, 0) 108 var result = make([]*record, 0)
101 - if err := productRecordDao.TimeSectionProductRecord(request.CompanyId, request.OrgId, request.WorkshopId, v.LineId, SectionNameCCJ, time.Now().Add(-time.Hour*5), &result); err != nil { 109 + if err := productRecordDao.TimeSectionProductRecord(request.CompanyId, request.OrgId, request.WorkshopId, v.LineId, SectionNameCCJ, beginTime, endTime, &result); err != nil {
102 log.Logger.Error(err.Error()) 110 log.Logger.Error(err.Error())
103 continue 111 continue
104 } 112 }
@@ -123,10 +131,10 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[ @@ -123,10 +131,10 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[
123 } 131 }
124 132
125 type HourProductiveStatisticsRequest struct { 133 type HourProductiveStatisticsRequest struct {
126 - CompanyId int `json:"companyId" valid:"Required"`  
127 - OrgId int `json:"orgId" valid:"Required"`  
128 - WorkshopId int `json:"workshopId" valid:"Required"`  
129 - Date time.Time `json:"date"` 134 + CompanyId int `json:"companyId" valid:"Required"`
  135 + OrgId int `json:"orgId" valid:"Required"`
  136 + WorkshopId int `json:"workshopId" valid:"Required"`
  137 + Date utils.TimeString `json:"date"`
130 } 138 }
131 139
132 func NewXYData(xData []string, values interface{}) interface{} { 140 func NewXYData(xData []string, values interface{}) interface{} {
@@ -141,7 +149,7 @@ func NewXYData(xData []string, values interface{}) interface{} { @@ -141,7 +149,7 @@ func NewXYData(xData []string, values interface{}) interface{} {
141 return values 149 return values
142 } 150 }
143 151
144 -// 时段产能-统计 (传串设备) 152 +// DailyProductiveStatistics 每日产能-统计 (传串设备)
145 func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map[string]interface{}) (interface{}, error) { 153 func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map[string]interface{}) (interface{}, error) {
146 var request = &HourProductiveStatisticsRequest{} 154 var request = &HourProductiveStatisticsRequest{}
147 if err := utils.LoadQueryObject(queryOptions, request); err != nil { 155 if err := utils.LoadQueryObject(queryOptions, request); err != nil {
@@ -153,9 +161,13 @@ func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map @@ -153,9 +161,13 @@ func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map
153 Ts string `json:"ts"` 161 Ts string `json:"ts"`
154 Total float64 `json:"total"` 162 Total float64 `json:"total"`
155 } 163 }
156 - var date = time.Now()  
157 - if !xtime.IsZero(request.Date) {  
158 - date = request.Date 164 + var (
  165 + beingTime = xtime.BeginningOfDay().AddDate(0, 0, -6)
  166 + endTime = xtime.BeginningOfDay().AddDate(0, 0, 1).Add(-time.Second)
  167 + )
  168 + if !xtime.IsZero(time.Time(request.Date)) {
  169 + beingTime = request.Date.Time().AddDate(0, 0, -6)
  170 + endTime = request.Date.Time().AddDate(0, 0, 1).Add(-time.Second)
159 } 171 }
160 workshop, err := workshopRepository.FindOne(map[string]interface{}{"workshopId": request.WorkshopId}) 172 workshop, err := workshopRepository.FindOne(map[string]interface{}{"workshopId": request.WorkshopId})
161 if err != nil || workshop == nil { 173 if err != nil || workshop == nil {
@@ -168,7 +180,7 @@ func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map @@ -168,7 +180,7 @@ func (ptr *PGCommonStatisticsService) DailyProductiveStatistics(queryOptions map
168 180
169 for _, v := range workshop.GetProductLines(domain.NotDeleted) { 181 for _, v := range workshop.GetProductLines(domain.NotDeleted) {
170 var result = make([]*record, 0) 182 var result = make([]*record, 0)
171 - if err := productRecordDao.TimeSectionRunningRecord(request.CompanyId, request.OrgId, request.WorkshopId, v.LineId, SectionNameCCJ, date.Add(-time.Hour*24*7), date, &result); err != nil { 183 + if err := productRecordDao.TimeSectionRunningRecord(request.CompanyId, request.OrgId, request.WorkshopId, v.LineId, SectionNameCCJ, beingTime, endTime, &result); err != nil {
172 log.Logger.Error(err.Error()) 184 log.Logger.Error(err.Error())
173 continue 185 continue
174 } 186 }
@@ -213,8 +225,8 @@ func (ptr *PGCommonStatisticsService) ProportionOfSecondLevelStatistics(queryOpt @@ -213,8 +225,8 @@ func (ptr *PGCommonStatisticsService) ProportionOfSecondLevelStatistics(queryOpt
213 } 225 }
214 productRecordDao, _ := dao.NewProductRecordDao(ptr.transactionContext) 226 productRecordDao, _ := dao.NewProductRecordDao(ptr.transactionContext)
215 var date = time.Now() 227 var date = time.Now()
216 - if !xtime.IsZero(request.Date) {  
217 - date = request.Date 228 + if !xtime.IsZero(time.Time(request.Date)) {
  229 + date = request.Date.Time()
218 } 230 }
219 var input = []struct { 231 var input = []struct {
220 name string 232 name string
@@ -262,8 +274,8 @@ func (ptr *PGCommonStatisticsService) WorkshopProductionEfficiencyStatistics(que @@ -262,8 +274,8 @@ func (ptr *PGCommonStatisticsService) WorkshopProductionEfficiencyStatistics(que
262 } 274 }
263 productRecordDao, _ := dao.NewDeviceDailyRunningRecordDao(ptr.transactionContext) 275 productRecordDao, _ := dao.NewDeviceDailyRunningRecordDao(ptr.transactionContext)
264 var date = time.Now() 276 var date = time.Now()
265 - if !xtime.IsZero(request.Date) {  
266 - date = request.Date 277 + if !xtime.IsZero(time.Time(request.Date)) {
  278 + date = time.Time(request.Date)
267 } 279 }
268 var input = []struct { 280 var input = []struct {
269 name string 281 name string
  1 +package domainService
  2 +
  3 +import (
  4 + "fmt"
  5 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/dao"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/repository"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
  10 + "sort"
  11 + "time"
  12 +)
  13 +
  14 +type PGMaterialService struct {
  15 + transactionContext *pgTransaction.TransactionContext
  16 +}
  17 +
  18 +// 物料
  19 +
  20 +func (ptr *PGMaterialService) AddMaterial(opt *domain.OperateInfo, item *domain.ProductMaterial) (*domain.ProductMaterial, error) {
  21 + var (
  22 + user *domain.User
  23 + org *domain.Org
  24 + err error
  25 + newProductMaterial *domain.ProductMaterial
  26 + productMaterialRepository, _ = repository.NewProductMaterialRepository(ptr.transactionContext)
  27 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  28 + )
  29 + if user, err = NewUserService().User(opt.UserId); err != nil {
  30 + return nil, err
  31 + }
  32 + if org, err = NewUserService().Organization(opt.OrgId); err != nil {
  33 + return nil, err
  34 + }
  35 + _, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": item.ProductMaterialGroupId})
  36 + if err != nil {
  37 + return nil, err
  38 + }
  39 +
  40 + if newProductMaterial, err = productMaterialRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "materialNumber": item.MaterialNumber}); err == nil || newProductMaterial != nil {
  41 + return nil, fmt.Errorf("物料编码已存在")
  42 + }
  43 + newProductMaterial = &domain.ProductMaterial{
  44 + CompanyId: item.CompanyId,
  45 + OrgId: item.OrgId,
  46 + ProductMaterialGroupId: item.ProductMaterialGroupId,
  47 + MaterialName: item.MaterialName,
  48 + MaterialNumber: item.MaterialNumber,
  49 + MaterialAttribute: item.MaterialAttribute,
  50 + MaterialCategory: item.MaterialCategory,
  51 + ProductMaterialExt: item.ProductMaterialExt,
  52 + CreatedAt: time.Now(),
  53 + UpdatedAt: time.Now(),
  54 + Ext: domain.NewExt(org.OrgName).WithOperator(user),
  55 + }
  56 + return productMaterialRepository.Save(newProductMaterial)
  57 +}
  58 +
  59 +// 物料分组
  60 +
  61 +func (ptr *PGMaterialService) AddMaterialGroup(opt *domain.OperateInfo, item *domain.ProductMaterialGroup) (*domain.ProductMaterialGroup, error) {
  62 + var (
  63 + user *domain.User
  64 + org *domain.Org
  65 + err error
  66 + parent *domain.ProductMaterialGroup
  67 + newProductMaterialGroup *domain.ProductMaterialGroup
  68 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  69 +
  70 + productMaterialGroupDao *dao.ProductMaterialGroupDao
  71 + latestNumber string
  72 + total int
  73 + )
  74 + if user, err = NewUserService().User(opt.UserId); err != nil {
  75 + return nil, err
  76 + }
  77 + if org, err = NewUserService().Organization(opt.OrgId); err != nil {
  78 + return nil, err
  79 + }
  80 + if item.Pid != 0 {
  81 + if parent, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": item.Pid}); err != nil || parent == nil {
  82 + return nil, fmt.Errorf("上级物料分组不存在")
  83 + }
  84 + }
  85 + if newProductMaterialGroup, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "materialGroupNumber": item.MaterialGroupNumber}); err == nil || newProductMaterialGroup != nil {
  86 + return nil, fmt.Errorf("物料分组编码已存在")
  87 + }
  88 + productMaterialGroupDao, _ = dao.NewProductMaterialGroupDao(ptr.transactionContext)
  89 + latestNumber, total, err = productMaterialGroupDao.CurrentGroupLatestNumber(opt.CompanyId, item.Pid)
  90 + if err != nil {
  91 + return nil, err
  92 + }
  93 +
  94 + newProductMaterialGroup = &domain.ProductMaterialGroup{
  95 + CompanyId: opt.CompanyId,
  96 + OrgId: opt.OrgId,
  97 + Pid: item.Pid,
  98 + //Path: item.GetPath(parent),
  99 + MaterialGroupName: item.MaterialGroupName,
  100 + MaterialGroupNumber: item.MaterialGroupNumber,
  101 + CreatedAt: time.Now(),
  102 + UpdatedAt: time.Now(),
  103 + Ext: domain.NewExt(org.OrgName).WithOperator(user),
  104 + }
  105 + newProductMaterialGroup.MaterialGroupNumber = newProductMaterialGroup.GroupNumberComposeUp(parent, latestNumber, total)
  106 + newProductMaterialGroup, err = productMaterialGroupRepository.Save(newProductMaterialGroup)
  107 + return newProductMaterialGroup, err
  108 +}
  109 +
  110 +func (ptr *PGMaterialService) UpdateMaterialGroup(opt *domain.OperateInfo, item *domain.ProductMaterialGroup) (*domain.ProductMaterialGroup, error) {
  111 + var (
  112 + user *domain.User
  113 + org *domain.Org
  114 + err error
  115 + //parent *domain.ProductMaterialGroup
  116 + productMaterialGroup *domain.ProductMaterialGroup
  117 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  118 + )
  119 + if user, err = NewUserService().User(opt.UserId); err != nil {
  120 + return nil, err
  121 + }
  122 + if org, err = NewUserService().Organization(opt.OrgId); err != nil {
  123 + return nil, err
  124 + }
  125 + //if item.ProductMaterialGroupId == item.Pid {
  126 + // return nil, fmt.Errorf("当前物料分组不能做为自己上级")
  127 + //}
  128 + if productMaterialGroup, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": item.ProductMaterialGroupId}); err != nil || productMaterialGroup == nil {
  129 + return nil, fmt.Errorf("物料分组不存在")
  130 + }
  131 +
  132 + //if item.Pid != productMaterialGroup.ProductMaterialGroupId && item.Pid != 0 {
  133 + // if parent, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": item.Pid}); err != nil || parent == nil {
  134 + // return nil, fmt.Errorf("上级物料分组不存在")
  135 + // }
  136 + //}
  137 + //if productMaterialGroup.MaterialGroupNumber != item.MaterialGroupNumber {
  138 + // if group, err := productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "materialGroupNumber": item.MaterialGroupNumber}); err == nil || group != nil {
  139 + // return nil, fmt.Errorf("物料分组编码已存在")
  140 + // }
  141 + //}
  142 + //productMaterialGroup.MaterialGroupNumber = item.MaterialGroupNumber
  143 +
  144 + productMaterialGroup.MaterialGroupName = item.MaterialGroupName
  145 + productMaterialGroup.UpdatedAt = item.UpdatedAt
  146 + productMaterialGroup.Ext = domain.NewExt(org.OrgName).WithOperator(user)
  147 +
  148 + productMaterialGroup, err = productMaterialGroupRepository.Save(productMaterialGroup)
  149 + return productMaterialGroup, err
  150 +}
  151 +
  152 +func (ptr *PGMaterialService) AllMaterialGroupChild(opt *domain.OperateInfo, productMaterialGroupId int) ([]*domain.ProductMaterialGroup, []int, error) {
  153 + var (
  154 + err error
  155 + listId []int
  156 + productMaterialGroup *domain.ProductMaterialGroup
  157 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  158 + groups domain.ProductMaterialGroups
  159 + )
  160 + if productMaterialGroup, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": productMaterialGroupId}); err != nil || productMaterialGroup == nil {
  161 + return nil, listId, fmt.Errorf("物料分组不存在")
  162 + }
  163 + _, groups, err = productMaterialGroupRepository.Find(map[string]interface{}{"companyId": opt.CompanyId}) //,"orderByProductMaterialGroupId":"asc"
  164 + if len(groups) == 0 || err != nil {
  165 + return nil, listId, err
  166 + }
  167 + // 先排序 sort pid,id asc
  168 + sort.Stable(groups)
  169 + var treeNodes = make([]utils.TreeNode, len(groups))
  170 + for i := 0; i < len(groups); i++ {
  171 + treeNodes[i] = groups[i]
  172 + }
  173 + tree := utils.NewTree(treeNodes)
  174 + child := tree.AllChildNode(productMaterialGroup)
  175 + var result = make([]*domain.ProductMaterialGroup, 0)
  176 + for i := range child {
  177 + if v, ok := child[i].(*domain.ProductMaterialGroup); ok {
  178 + result = append(result, v)
  179 + listId = append(listId, v.ProductMaterialGroupId)
  180 + }
  181 + }
  182 + return result, listId, err
  183 +}
  184 +
  185 +func (ptr *PGMaterialService) AllMaterialGroupParent(opt *domain.OperateInfo, productMaterialGroupId int) ([]*domain.ProductMaterialGroup, []int, error) {
  186 + var (
  187 + err error
  188 + listId []int
  189 + productMaterialGroup *domain.ProductMaterialGroup
  190 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  191 + groups domain.ProductMaterialGroups
  192 + )
  193 + if productMaterialGroup, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": productMaterialGroupId}); err != nil || productMaterialGroup == nil {
  194 + return nil, listId, fmt.Errorf("物料分组不存在")
  195 + }
  196 + _, groups, err = productMaterialGroupRepository.Find(map[string]interface{}{"companyId": opt.CompanyId}) //,"orderByProductMaterialGroupId":"asc"
  197 + if len(groups) == 0 || err != nil {
  198 + return nil, listId, err
  199 + }
  200 + // 先排序 sort pid,id asc
  201 + sort.Stable(groups)
  202 + var treeNodes = make([]utils.TreeNode, len(groups))
  203 + for i := 0; i < len(groups); i++ {
  204 + treeNodes[i] = groups[i]
  205 + }
  206 + tree := utils.NewTree(treeNodes)
  207 + child := tree.TreeNodePaths(productMaterialGroup)
  208 + var result = make([]*domain.ProductMaterialGroup, 0)
  209 + for i := range child {
  210 + if v, ok := child[i].(*domain.ProductMaterialGroup); ok {
  211 + result = append(result, v)
  212 + listId = append(listId, v.ProductMaterialGroupId)
  213 + }
  214 + }
  215 + return result, listId, err
  216 +}
  217 +
  218 +func (ptr *PGMaterialService) AllMaterialGroupParentByBacktracking(opt *domain.OperateInfo, productMaterialGroupId int) ([]*domain.ProductMaterialGroup, []int, error) {
  219 + var (
  220 + err error
  221 + listId []int
  222 + productMaterialGroup *domain.ProductMaterialGroup
  223 + productMaterialGroupRepository, _ = repository.NewProductMaterialGroupRepository(ptr.transactionContext)
  224 + pid = productMaterialGroupId
  225 + mapExists = make(map[int]int)
  226 + )
  227 + var result = make([]*domain.ProductMaterialGroup, 0)
  228 + for {
  229 + if pid == 0 {
  230 + break
  231 + }
  232 + if _, exists := mapExists[pid]; exists {
  233 + break
  234 + }
  235 + mapExists[pid] = pid
  236 + productMaterialGroup, err = productMaterialGroupRepository.FindOne(map[string]interface{}{"companyId": opt.CompanyId, "productMaterialGroupId": pid, "allWithDeleted": "1"})
  237 + if err != nil || productMaterialGroup == nil {
  238 + return nil, listId, fmt.Errorf("物料分组不存在")
  239 + }
  240 + pid = productMaterialGroup.Pid
  241 + result = append([]*domain.ProductMaterialGroup{productMaterialGroup}, result...)
  242 + }
  243 + return result, listId, err
  244 +}
  245 +
  246 +func NewPGMaterialService(transactionContext *pgTransaction.TransactionContext) (*PGMaterialService, error) {
  247 + if transactionContext == nil {
  248 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  249 + } else {
  250 + return &PGMaterialService{
  251 + transactionContext: transactionContext,
  252 + }, nil
  253 + }
  254 +}
@@ -67,7 +67,7 @@ func (ptr *PGWorkerAttendanceReportService) Report(cid, oid int, report *domain. @@ -67,7 +67,7 @@ func (ptr *PGWorkerAttendanceReportService) Report(cid, oid int, report *domain.
67 productCalendar, _ = productCalendarRepository.FindOne(map[string]interface{}{"companyId": cid, "orgId": oid, "workStationId": workStation.WorkStationId}) 67 productCalendar, _ = productCalendarRepository.FindOne(map[string]interface{}{"companyId": cid, "orgId": oid, "workStationId": workStation.WorkStationId})
68 } 68 }
69 69
70 - beginTime := report.ActionTime.Add(-time.Hour * 13) 70 + beginTime := report.ActionTime.Add(-time.Hour * 16)
71 endTime := report.ActionTime 71 endTime := report.ActionTime
72 _, records, _ := attendanceRecordDao.WorkerAttendanceRecords(cid, oid, worker.UserId, "", beginTime, endTime) 72 _, records, _ := attendanceRecordDao.WorkerAttendanceRecords(cid, oid, worker.UserId, "", beginTime, endTime)
73 for i := 0; i < len(records); i++ { 73 for i := 0; i < len(records); i++ {
@@ -48,6 +48,8 @@ func init() { @@ -48,6 +48,8 @@ func init() {
48 (*models.DeviceDailyRunningRecord)(nil), 48 (*models.DeviceDailyRunningRecord)(nil),
49 (*models.DeviceRunningRecord)(nil), 49 (*models.DeviceRunningRecord)(nil),
50 (*models.WorkshopPlanCompletionRecord)(nil), 50 (*models.WorkshopPlanCompletionRecord)(nil),
  51 + (*models.ProductMaterialGroup)(nil),
  52 + (*models.ProductMaterial)(nil),
51 } { 53 } {
52 err := DB.Model(model).CreateTable(&orm.CreateTableOptions{ 54 err := DB.Model(model).CreateTable(&orm.CreateTableOptions{
53 Temp: false, 55 Temp: false,
@@ -9,3 +9,13 @@ type MaterialGroupK3cloud struct { @@ -9,3 +9,13 @@ type MaterialGroupK3cloud struct {
9 ParentId int `comment:"父级id" pg:"parent_id"` 9 ParentId int `comment:"父级id" pg:"parent_id"`
10 DataVersion int64 `comment:"数据版本" pg:"data_version"` 10 DataVersion int64 `comment:"数据版本" pg:"data_version"`
11 } 11 }
  12 +
  13 +type MaterialGroupK3clouds []*MaterialGroupK3cloud
  14 +
  15 +func (materialGroupK3clouds MaterialGroupK3clouds) ToMapId() map[int]*MaterialGroupK3cloud {
  16 + var result = make(map[int]*MaterialGroupK3cloud)
  17 + for i := range materialGroupK3clouds {
  18 + result[materialGroupK3clouds[i].Id] = materialGroupK3clouds[i]
  19 + }
  20 + return result
  21 +}
@@ -25,6 +25,7 @@ type MaterialK3cloud struct { @@ -25,6 +25,7 @@ type MaterialK3cloud struct {
25 UseOrgName string `comment:"使用组织" pg:"use_org_name"` 25 UseOrgName string `comment:"使用组织" pg:"use_org_name"`
26 JoinProductId int64 `comment:"关联的product表id" pg:"join_product_id"` 26 JoinProductId int64 `comment:"关联的product表id" pg:"join_product_id"`
27 DataVersion int64 `comment:"数据版本" pg:"data_version"` 27 DataVersion int64 `comment:"数据版本" pg:"data_version"`
  28 + FCategoryID string `pg:"-"`
28 } 29 }
29 30
30 //批量处理sql脚本样例 31 //批量处理sql脚本样例
  1 +package models
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  5 + "time"
  6 +)
  7 +
  8 +type ProductMaterial struct {
  9 + tableName string `comment:"生产物料" pg:"manufacture.product_material"`
  10 + // 物料ID
  11 + ProductMaterialId int `comment:"物料ID" pg:"pk:product_material_id"`
  12 + // 企业id
  13 + CompanyId int `comment:"企业id"`
  14 + // 组织ID
  15 + OrgId int `comment:"组织ID"`
  16 + // 物料分组ID
  17 + ProductMaterialGroupId int `comment:"物料分组ID"`
  18 + // 物料编码
  19 + MaterialNumber string `comment:"物料编码"`
  20 + // 物料名称
  21 + MaterialName string `comment:"物料名称"`
  22 + // 物料属性
  23 + MaterialAttribute *domain.MaterialAttribute `comment:"物料属性"`
  24 + // 物料类别
  25 + MaterialCategory *domain.MaterialCategory `comment:"物料类别"`
  26 + // 物料扩展
  27 + ProductMaterialExt *domain.MaterialExt `comment:"物料扩展"`
  28 + // 创建时间
  29 + CreatedAt time.Time `comment:"创建时间"`
  30 + // 更新时间
  31 + UpdatedAt time.Time `comment:"更新时间"`
  32 + // 删除时间
  33 + DeletedAt time.Time `pg:",soft_delete" comment:"删除时间"`
  34 + // 扩展
  35 + Ext *domain.Ext `comment:"扩展"`
  36 +}
  1 +package models
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  5 + "time"
  6 +)
  7 +
  8 +type ProductMaterialGroup struct {
  9 + tableName string `comment:"物料分组" pg:"manufacture.product_material_group"`
  10 + // 物料分组ID
  11 + ProductMaterialGroupId int `comment:"物料分组ID" pg:"pk:product_material_group_id"`
  12 + // 企业id
  13 + CompanyId int `comment:"企业id"`
  14 + // 组织ID
  15 + OrgId int `comment:"组织ID"`
  16 + // 父级ID
  17 + Pid int `comment:"父级ID"`
  18 + // 路径
  19 + // Path string `comment:"路径"`
  20 + // 物料分组名称
  21 + MaterialGroupName string `comment:"物料分组名称"`
  22 + // 物料分组编码
  23 + MaterialGroupNumber string `comment:"物料分组编码"`
  24 + // 创建时间
  25 + CreatedAt time.Time `comment:"创建时间"`
  26 + // 更新时间
  27 + UpdatedAt time.Time `comment:"更新时间"`
  28 + // 删除时间
  29 + DeletedAt time.Time `pg:",soft_delete" comment:"删除时间"`
  30 + // 扩展
  31 + Ext *domain.Ext `comment:"扩展"`
  32 +}
  1 +package transform
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
  6 +)
  7 +
  8 +func TransformToProductMaterialDomainModelFromPgModels(productMaterialModel *models.ProductMaterial) (*domain.ProductMaterial, error) {
  9 + return &domain.ProductMaterial{
  10 + ProductMaterialId: productMaterialModel.ProductMaterialId,
  11 + CompanyId: productMaterialModel.CompanyId,
  12 + OrgId: productMaterialModel.OrgId,
  13 + ProductMaterialGroupId: productMaterialModel.ProductMaterialGroupId,
  14 + MaterialNumber: productMaterialModel.MaterialNumber,
  15 + MaterialName: productMaterialModel.MaterialName,
  16 + MaterialAttribute: productMaterialModel.MaterialAttribute,
  17 + MaterialCategory: productMaterialModel.MaterialCategory,
  18 + ProductMaterialExt: productMaterialModel.ProductMaterialExt,
  19 + CreatedAt: productMaterialModel.CreatedAt,
  20 + UpdatedAt: productMaterialModel.UpdatedAt,
  21 + DeletedAt: productMaterialModel.DeletedAt,
  22 + Ext: productMaterialModel.Ext,
  23 + }, nil
  24 +}
  1 +package transform
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
  6 +)
  7 +
  8 +func TransformToProductMaterialGroupDomainModelFromPgModels(productMaterialGroupModel *models.ProductMaterialGroup) (*domain.ProductMaterialGroup, error) {
  9 + return &domain.ProductMaterialGroup{
  10 + ProductMaterialGroupId: productMaterialGroupModel.ProductMaterialGroupId,
  11 + CompanyId: productMaterialGroupModel.CompanyId,
  12 + OrgId: productMaterialGroupModel.OrgId,
  13 + Pid: productMaterialGroupModel.Pid,
  14 + //Path: productMaterialGroupModel.Path,
  15 + MaterialGroupName: productMaterialGroupModel.MaterialGroupName,
  16 + MaterialGroupNumber: productMaterialGroupModel.MaterialGroupNumber,
  17 + CreatedAt: productMaterialGroupModel.CreatedAt,
  18 + UpdatedAt: productMaterialGroupModel.UpdatedAt,
  19 + DeletedAt: productMaterialGroupModel.DeletedAt,
  20 + Ext: productMaterialGroupModel.Ext,
  21 + }, nil
  22 +}
  1 +package repository
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/go-pg/pg/v10"
  6 +
  7 + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
  8 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  9 + "github.com/linmadan/egglib-go/utils/snowflake"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  11 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
  12 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/transform"
  13 +)
  14 +
  15 +type ProductMaterialGroupRepository struct {
  16 + transactionContext *pgTransaction.TransactionContext
  17 +}
  18 +
  19 +func (repository *ProductMaterialGroupRepository) nextIdentify() (int64, error) {
  20 + IdWorker, err := snowflake.NewIdWorker(1)
  21 + if err != nil {
  22 + return 0, err
  23 + }
  24 + id, err := IdWorker.NextId()
  25 + return id, err
  26 +}
  27 +func (repository *ProductMaterialGroupRepository) Save(productMaterialGroup *domain.ProductMaterialGroup) (*domain.ProductMaterialGroup, error) {
  28 + sqlBuildFields := []string{
  29 + "product_material_group_id",
  30 + "company_id",
  31 + "org_id",
  32 + "pid",
  33 + //"path",
  34 + "material_group_name",
  35 + "material_group_number",
  36 + "created_at",
  37 + "updated_at",
  38 + "deleted_at",
  39 + "ext",
  40 + }
  41 + insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_material_group_id", "deleted_at"))
  42 + insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_material_group_id", "deleted_at"))
  43 + returningFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields)
  44 + updateFields := sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_material_group_id", "deleted_at")
  45 + updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields)
  46 + tx := repository.transactionContext.PgTx
  47 + if productMaterialGroup.Identify() == nil {
  48 + if _, err := tx.QueryOne(
  49 + pg.Scan(
  50 + &productMaterialGroup.ProductMaterialGroupId,
  51 + &productMaterialGroup.CompanyId,
  52 + &productMaterialGroup.OrgId,
  53 + &productMaterialGroup.Pid,
  54 + //&productMaterialGroup.Path,
  55 + &productMaterialGroup.MaterialGroupName,
  56 + &productMaterialGroup.MaterialGroupNumber,
  57 + &productMaterialGroup.CreatedAt,
  58 + &productMaterialGroup.UpdatedAt,
  59 + &productMaterialGroup.DeletedAt,
  60 + &productMaterialGroup.Ext,
  61 + ),
  62 + fmt.Sprintf("INSERT INTO manufacture.product_material_group (%s) VALUES (%s) RETURNING %s", insertFieldsSnippet, insertPlaceHoldersSnippet, returningFieldsSnippet),
  63 + productMaterialGroup.CompanyId,
  64 + productMaterialGroup.OrgId,
  65 + productMaterialGroup.Pid,
  66 + //productMaterialGroup.Path,
  67 + productMaterialGroup.MaterialGroupName,
  68 + productMaterialGroup.MaterialGroupNumber,
  69 + productMaterialGroup.CreatedAt,
  70 + productMaterialGroup.UpdatedAt,
  71 + productMaterialGroup.Ext,
  72 + ); err != nil {
  73 + return productMaterialGroup, err
  74 + }
  75 + } else {
  76 + if _, err := tx.QueryOne(
  77 + pg.Scan(
  78 + &productMaterialGroup.ProductMaterialGroupId,
  79 + &productMaterialGroup.CompanyId,
  80 + &productMaterialGroup.OrgId,
  81 + &productMaterialGroup.Pid,
  82 + //&productMaterialGroup.Path,
  83 + &productMaterialGroup.MaterialGroupName,
  84 + &productMaterialGroup.MaterialGroupNumber,
  85 + &productMaterialGroup.CreatedAt,
  86 + &productMaterialGroup.UpdatedAt,
  87 + &productMaterialGroup.DeletedAt,
  88 + &productMaterialGroup.Ext,
  89 + ),
  90 + fmt.Sprintf("UPDATE manufacture.product_material_group SET %s WHERE product_material_group_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet),
  91 + productMaterialGroup.CompanyId,
  92 + productMaterialGroup.OrgId,
  93 + productMaterialGroup.Pid,
  94 + //productMaterialGroup.Path,
  95 + productMaterialGroup.MaterialGroupName,
  96 + productMaterialGroup.MaterialGroupNumber,
  97 + productMaterialGroup.CreatedAt,
  98 + productMaterialGroup.UpdatedAt,
  99 + productMaterialGroup.Ext,
  100 + productMaterialGroup.Identify(),
  101 + ); err != nil {
  102 + return productMaterialGroup, err
  103 + }
  104 + }
  105 + return productMaterialGroup, nil
  106 +}
  107 +func (repository *ProductMaterialGroupRepository) Remove(productMaterialGroup *domain.ProductMaterialGroup) (*domain.ProductMaterialGroup, error) {
  108 + tx := repository.transactionContext.PgTx
  109 + productMaterialGroupModel := new(models.ProductMaterialGroup)
  110 + productMaterialGroupModel.ProductMaterialGroupId = productMaterialGroup.Identify().(int)
  111 + if _, err := tx.Model(productMaterialGroupModel).WherePK().Delete(); err != nil {
  112 + return productMaterialGroup, err
  113 + }
  114 + return productMaterialGroup, nil
  115 +}
  116 +func (repository *ProductMaterialGroupRepository) FindOne(queryOptions map[string]interface{}) (*domain.ProductMaterialGroup, error) {
  117 + tx := repository.transactionContext.PgTx
  118 + productMaterialGroupModel := new(models.ProductMaterialGroup)
  119 + query := sqlbuilder.BuildQuery(tx.Model(productMaterialGroupModel), queryOptions)
  120 + query.SetWhereByQueryOption("product_material_group_id = ?", "productMaterialGroupId")
  121 + query.SetWhereByQueryOption("company_id = ?", "companyId")
  122 + query.SetWhereByQueryOption("material_group_number = ?", "materialGroupNumber")
  123 + if _, ok := queryOptions["allWithDeleted"]; ok {
  124 + query.AllWithDeleted()
  125 + }
  126 + if err := query.First(); err != nil {
  127 + if err.Error() == "pg: no rows in result set" {
  128 + return nil, domain.ErrorNotFound
  129 + } else {
  130 + return nil, err
  131 + }
  132 + }
  133 + if productMaterialGroupModel.ProductMaterialGroupId == 0 {
  134 + return nil, nil
  135 + } else {
  136 + return transform.TransformToProductMaterialGroupDomainModelFromPgModels(productMaterialGroupModel)
  137 + }
  138 +}
  139 +func (repository *ProductMaterialGroupRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ProductMaterialGroup, error) {
  140 + tx := repository.transactionContext.PgTx
  141 + var productMaterialGroupModels []*models.ProductMaterialGroup
  142 + productMaterialGroups := make([]*domain.ProductMaterialGroup, 0)
  143 + query := sqlbuilder.BuildQuery(tx.Model(&productMaterialGroupModels), queryOptions)
  144 + query.SetOffsetAndLimit(domain.MaxQueryRow)
  145 + query.SetWhereByQueryOption("company_id = ?", "companyId")
  146 + if v, ok := queryOptions["orderByProductMaterialGroupId"]; ok {
  147 + query.SetOrderDirect("product_material_group_id", v.(string))
  148 + } else {
  149 + query.SetOrderDirect("product_material_group_id", "DESC")
  150 + }
  151 + if count, err := query.SelectAndCount(); err != nil {
  152 + return 0, productMaterialGroups, err
  153 + } else {
  154 + for _, productMaterialGroupModel := range productMaterialGroupModels {
  155 + if productMaterialGroup, err := transform.TransformToProductMaterialGroupDomainModelFromPgModels(productMaterialGroupModel); err != nil {
  156 + return 0, productMaterialGroups, err
  157 + } else {
  158 + productMaterialGroups = append(productMaterialGroups, productMaterialGroup)
  159 + }
  160 + }
  161 + return int64(count), productMaterialGroups, nil
  162 + }
  163 +}
  164 +func NewProductMaterialGroupRepository(transactionContext *pgTransaction.TransactionContext) (*ProductMaterialGroupRepository, error) {
  165 + if transactionContext == nil {
  166 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  167 + } else {
  168 + return &ProductMaterialGroupRepository{
  169 + transactionContext: transactionContext,
  170 + }, nil
  171 + }
  172 +}
  1 +package repository
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/go-pg/pg/v10"
  6 +
  7 + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
  8 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  9 + "github.com/linmadan/egglib-go/utils/snowflake"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  11 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
  12 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/transform"
  13 +)
  14 +
  15 +type ProductMaterialRepository struct {
  16 + transactionContext *pgTransaction.TransactionContext
  17 +}
  18 +
  19 +func (repository *ProductMaterialRepository) nextIdentify() (int64, error) {
  20 + IdWorker, err := snowflake.NewIdWorker(1)
  21 + if err != nil {
  22 + return 0, err
  23 + }
  24 + id, err := IdWorker.NextId()
  25 + return id, err
  26 +}
  27 +func (repository *ProductMaterialRepository) Save(productMaterial *domain.ProductMaterial) (*domain.ProductMaterial, error) {
  28 + sqlBuildFields := []string{
  29 + "product_material_id",
  30 + "company_id",
  31 + "org_id",
  32 + "product_material_group_id",
  33 + "material_number",
  34 + "material_name",
  35 + "material_attribute",
  36 + "material_category",
  37 + "product_material_ext",
  38 + "created_at",
  39 + "updated_at",
  40 + "deleted_at",
  41 + "ext",
  42 + }
  43 + insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_material_id", "deleted_at"))
  44 + insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_material_id", "deleted_at"))
  45 + returningFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields)
  46 + updateFields := sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_material_id", "deleted_at")
  47 + updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields)
  48 + tx := repository.transactionContext.PgTx
  49 + if productMaterial.Identify() == nil {
  50 + if _, err := tx.QueryOne(
  51 + pg.Scan(
  52 + &productMaterial.ProductMaterialId,
  53 + &productMaterial.CompanyId,
  54 + &productMaterial.OrgId,
  55 + &productMaterial.ProductMaterialGroupId,
  56 + &productMaterial.MaterialNumber,
  57 + &productMaterial.MaterialName,
  58 + &productMaterial.MaterialAttribute,
  59 + &productMaterial.MaterialCategory,
  60 + &productMaterial.ProductMaterialExt,
  61 + &productMaterial.CreatedAt,
  62 + &productMaterial.UpdatedAt,
  63 + &productMaterial.DeletedAt,
  64 + &productMaterial.Ext,
  65 + ),
  66 + fmt.Sprintf("INSERT INTO manufacture.product_material (%s) VALUES (%s) RETURNING %s", insertFieldsSnippet, insertPlaceHoldersSnippet, returningFieldsSnippet),
  67 + productMaterial.CompanyId,
  68 + productMaterial.OrgId,
  69 + productMaterial.ProductMaterialGroupId,
  70 + productMaterial.MaterialNumber,
  71 + productMaterial.MaterialName,
  72 + productMaterial.MaterialAttribute,
  73 + productMaterial.MaterialCategory,
  74 + productMaterial.ProductMaterialExt,
  75 + productMaterial.CreatedAt,
  76 + productMaterial.UpdatedAt,
  77 + productMaterial.Ext,
  78 + ); err != nil {
  79 + return productMaterial, err
  80 + }
  81 + } else {
  82 + if _, err := tx.QueryOne(
  83 + pg.Scan(
  84 + &productMaterial.ProductMaterialId,
  85 + &productMaterial.CompanyId,
  86 + &productMaterial.OrgId,
  87 + &productMaterial.ProductMaterialGroupId,
  88 + &productMaterial.MaterialNumber,
  89 + &productMaterial.MaterialName,
  90 + &productMaterial.MaterialAttribute,
  91 + &productMaterial.MaterialCategory,
  92 + &productMaterial.ProductMaterialExt,
  93 + &productMaterial.CreatedAt,
  94 + &productMaterial.UpdatedAt,
  95 + &productMaterial.DeletedAt,
  96 + &productMaterial.Ext,
  97 + ),
  98 + fmt.Sprintf("UPDATE manufacture.product_material SET %s WHERE product_material_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet),
  99 + productMaterial.CompanyId,
  100 + productMaterial.OrgId,
  101 + productMaterial.ProductMaterialGroupId,
  102 + productMaterial.MaterialNumber,
  103 + productMaterial.MaterialName,
  104 + productMaterial.MaterialAttribute,
  105 + productMaterial.MaterialCategory,
  106 + productMaterial.ProductMaterialExt,
  107 + productMaterial.CreatedAt,
  108 + productMaterial.UpdatedAt,
  109 + productMaterial.Ext,
  110 + productMaterial.Identify(),
  111 + ); err != nil {
  112 + return productMaterial, err
  113 + }
  114 + }
  115 + return productMaterial, nil
  116 +}
  117 +func (repository *ProductMaterialRepository) Remove(productMaterial *domain.ProductMaterial) (*domain.ProductMaterial, error) {
  118 + tx := repository.transactionContext.PgTx
  119 + productMaterialModel := new(models.ProductMaterial)
  120 + productMaterialModel.ProductMaterialId = productMaterial.Identify().(int)
  121 + if _, err := tx.Model(productMaterialModel).WherePK().Delete(); err != nil {
  122 + return productMaterial, err
  123 + }
  124 + return productMaterial, nil
  125 +}
  126 +
  127 +// query compose
  128 +// 1. company_id,material_number
  129 +
  130 +func (repository *ProductMaterialRepository) FindOne(queryOptions map[string]interface{}) (*domain.ProductMaterial, error) {
  131 + tx := repository.transactionContext.PgTx
  132 + productMaterialModel := new(models.ProductMaterial)
  133 + query := sqlbuilder.BuildQuery(tx.Model(productMaterialModel), queryOptions)
  134 + query.SetWhereByQueryOption("product_material.product_material_id = ?", "productMaterialId")
  135 +
  136 + query.SetWhereByQueryOption("product_material.company_id = ?", "companyId")
  137 + query.SetWhereByQueryOption("product_material.material_number = ?", "materialNumber")
  138 + if err := query.First(); err != nil {
  139 + if err.Error() == "pg: no rows in result set" {
  140 + return nil, domain.ErrorNotFound
  141 + } else {
  142 + return nil, err
  143 + }
  144 + }
  145 + if productMaterialModel.ProductMaterialId == 0 {
  146 + return nil, nil
  147 + } else {
  148 + return transform.TransformToProductMaterialDomainModelFromPgModels(productMaterialModel)
  149 + }
  150 +}
  151 +func (repository *ProductMaterialRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ProductMaterial, error) {
  152 + tx := repository.transactionContext.PgTx
  153 + var productMaterialModels []*models.ProductMaterial
  154 + productMaterials := make([]*domain.ProductMaterial, 0)
  155 + query := sqlbuilder.BuildQuery(tx.Model(&productMaterialModels), queryOptions)
  156 + query.SetWhereByQueryOption("company_id = ?", "companyId")
  157 + if v, ok := queryOptions["productMaterialIds"]; ok && len(v.([]int)) > 0 {
  158 + query.Where("product_material_id in (?)", pg.In(v))
  159 + }
  160 + if v, ok := queryOptions["productMaterialGroupIds"]; ok && len(v.([]int)) > 0 {
  161 + query.Where("product_material_group_id in (?)", pg.In(v))
  162 + }
  163 + if v, ok := queryOptions["materialName"]; ok && v != "" {
  164 + query.Where("material_name like ?", fmt.Sprintf("%%%v%%", v))
  165 + }
  166 + if v, ok := queryOptions["materialCategory"]; ok && v != "" {
  167 + query.Where(fmt.Sprintf(`material_category->>'category' like '%%%v%%'`, v))
  168 + }
  169 + if v, ok := queryOptions["materialNumbers"]; ok && len(v.([]string)) > 0 {
  170 + query.Where("material_number in (?)", pg.In(v))
  171 + }
  172 + query.SetOffsetAndLimit(domain.MaxQueryRow)
  173 + query.SetOrderDirect("product_material_id", "DESC")
  174 + if count, err := query.SelectAndCount(); err != nil {
  175 + return 0, productMaterials, err
  176 + } else {
  177 + for _, productMaterialModel := range productMaterialModels {
  178 + if productMaterial, err := transform.TransformToProductMaterialDomainModelFromPgModels(productMaterialModel); err != nil {
  179 + return 0, productMaterials, err
  180 + } else {
  181 + productMaterials = append(productMaterials, productMaterial)
  182 + }
  183 + }
  184 + return int64(count), productMaterials, nil
  185 + }
  186 +}
  187 +func NewProductMaterialRepository(transactionContext *pgTransaction.TransactionContext) (*ProductMaterialRepository, error) {
  188 + if transactionContext == nil {
  189 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  190 + } else {
  191 + return &ProductMaterialRepository{
  192 + transactionContext: transactionContext,
  193 + }, nil
  194 + }
  195 +}
@@ -2,6 +2,7 @@ package k3cloud @@ -2,6 +2,7 @@ package k3cloud
2 2
3 import ( 3 import (
4 "errors" 4 "errors"
  5 + "fmt"
5 "io" 6 "io"
6 "time" 7 "time"
7 8
@@ -87,3 +88,20 @@ func (c *Client) ExecuteBillQuery(param RequestExecuteBillQuery) (*BillQueryResu @@ -87,3 +88,20 @@ func (c *Client) ExecuteBillQuery(param RequestExecuteBillQuery) (*BillQueryResu
87 queryResult := newBillQueryResult(dataByte, param.Data.FieldKeys) 88 queryResult := newBillQueryResult(dataByte, param.Data.FieldKeys)
88 return queryResult, queryResult.Error() 89 return queryResult, queryResult.Error()
89 } 90 }
  91 +
  92 +// ExecuteMetaDataQuery 元数据查询
  93 +func (c *Client) ExecuteMetaDataQuery(param RequestMetaDataQuery) ([]byte, error) {
  94 + api := "/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.QueryBusinessInfo.common.kdsvc"
  95 + resp, err := c.PostRequest(api, param)
  96 + if err != nil {
  97 + return nil, err
  98 + }
  99 + defer resp.Body.Close()
  100 + var dataByte []byte
  101 + dataByte, err = io.ReadAll(resp.Body)
  102 + if err != nil {
  103 + return nil, err
  104 + }
  105 + fmt.Println("data ", string(dataByte))
  106 + return dataByte, nil
  107 +}
1 package k3cloud 1 package k3cloud
2 2
3 import ( 3 import (
  4 + "fmt"
4 "strings" 5 "strings"
5 "testing" 6 "testing"
  7 + "time"
6 ) 8 )
7 9
8 var ( 10 var (
@@ -40,7 +42,7 @@ func TestExecuteBillQuery(t *testing.T) { @@ -40,7 +42,7 @@ func TestExecuteBillQuery(t *testing.T) {
40 "FDocumentStatus", "FForbidStatus", "FErpClsID", 42 "FDocumentStatus", "FForbidStatus", "FErpClsID",
41 "FBaseUnitId", "FBaseUnitId.FName", "FCreateDate", "FModifyDate", 43 "FBaseUnitId", "FBaseUnitId.FName", "FCreateDate", "FModifyDate",
42 "FForbidDate", "FApproveDate", "FMaterialGroup", "FMaterialGroup.FName", 44 "FForbidDate", "FApproveDate", "FMaterialGroup", "FMaterialGroup.FName",
43 - "FRefStatus", "FMaterialGroup.FNumber", "FUseOrgId", "FUseOrgId.FName", 45 + "FRefStatus", "FMaterialGroup.FNumber", "FUseOrgId", "FUseOrgId.FName", "FCategoryID",
44 } 46 }
45 result, err := client.ExecuteBillQuery(RequestExecuteBillQuery{ 47 result, err := client.ExecuteBillQuery(RequestExecuteBillQuery{
46 FormId: "BD_MATERIAL", 48 FormId: "BD_MATERIAL",
@@ -85,3 +87,52 @@ func TestExecuteBillQuery2(t *testing.T) { @@ -85,3 +87,52 @@ func TestExecuteBillQuery2(t *testing.T) {
85 return 87 return
86 } 88 }
87 } 89 }
  90 +
  91 +func TestMetaDataQuery(t *testing.T) {
  92 + client, err := NewClient(hostUrl, acctID, username, password)
  93 + if err != nil {
  94 + t.Error(err)
  95 + return
  96 + }
  97 + inputs := []struct {
  98 + formId string
  99 + desc string
  100 + }{
  101 + {"BD_MATERIALCATEGORY", "货类别没"},
  102 + {"BD_MATERIALCATEGORY", "货类别没"},
  103 + }
  104 + for _, v := range inputs {
  105 + result, err := client.ExecuteMetaDataQuery(RequestMetaDataQuery{Data{FormId: v.formId}, v.formId})
  106 + if err != nil {
  107 + fmt.Println(err.Error())
  108 + }
  109 + t.Log(v.formId, v.desc, string(result))
  110 + }
  111 + time.Sleep(time.Second)
  112 +}
  113 +
  114 +func TestExecuteMATERIALCATEGORYQuery(t *testing.T) {
  115 + client, err := NewClient(hostUrl, acctID, username, password)
  116 + if err != nil {
  117 + t.Error(err)
  118 + return
  119 + }
  120 + fieldKeys := []string{
  121 + "FName", "FNUMBER", "FMasterId",
  122 + }
  123 + result, err := client.ExecuteBillQuery(RequestExecuteBillQuery{
  124 + FormId: "PRD_MO",
  125 + Data: ExecuteBillQueryData{
  126 + FormId: "BD_MATERIALCATEGORY",
  127 + FieldKeys: strings.Join(fieldKeys, ","), //查询的字段
  128 + //TopRowCount: 4,
  129 +
  130 + FilterString: "",
  131 + },
  132 + })
  133 + t.Logf("result buf===> %s \n", string(result.Buf))
  134 + if err != nil {
  135 + t.Error(err)
  136 + return
  137 + }
  138 +}
@@ -51,3 +51,13 @@ type ( @@ -51,3 +51,13 @@ type (
51 Data ExecuteBillQueryData `json:"data"` 51 Data ExecuteBillQueryData `json:"data"`
52 } 52 }
53 ) 53 )
  54 +
  55 +type (
  56 + RequestMetaDataQuery struct {
  57 + Data Data `json:"data"`
  58 + FormId string `json:"FormId"` //必录,查询表单元数据唯一标识
  59 + }
  60 + Data struct {
  61 + FormId string `json:"FormId"` //必录,查询表单元数据唯一标识
  62 + }
  63 +)
  1 +package utils
  2 +
  3 +const (
  4 + unmanaged = iota
  5 + untyped
  6 + intType
  7 + int64Type
  8 + uintType
  9 + uint64Type
  10 + stringType
  11 +)
  12 +
  13 +type PlaceholderType = struct{}
  14 +
  15 +// Set is not thread-safe, for concurrent use, make sure to use it with synchronization.
  16 +type Set struct {
  17 + data map[interface{}]PlaceholderType
  18 + tp int
  19 +}
  20 +
  21 +// NewSet returns a managed Set, can only put the values with the same type.
  22 +func NewSet() *Set {
  23 + return &Set{
  24 + data: make(map[interface{}]PlaceholderType),
  25 + tp: untyped,
  26 + }
  27 +}
  28 +
  29 +// NewUnmanagedSet returns a unmanaged Set, which can put values with different types.
  30 +func NewUnmanagedSet() *Set {
  31 + return &Set{
  32 + data: make(map[interface{}]PlaceholderType),
  33 + tp: unmanaged,
  34 + }
  35 +}
  36 +
  37 +// Add adds i into s.
  38 +func (s *Set) Add(i ...interface{}) {
  39 + for _, each := range i {
  40 + s.add(each)
  41 + }
  42 +}
  43 +
  44 +// AddInt adds int values ii into s.
  45 +func (s *Set) AddInt(ii ...int) {
  46 + for _, each := range ii {
  47 + s.add(each)
  48 + }
  49 +}
  50 +
  51 +// AddInt64 adds int64 values ii into s.
  52 +func (s *Set) AddInt64(ii ...int64) {
  53 + for _, each := range ii {
  54 + s.add(each)
  55 + }
  56 +}
  57 +
  58 +// AddUint adds uint values ii into s.
  59 +func (s *Set) AddUint(ii ...uint) {
  60 + for _, each := range ii {
  61 + s.add(each)
  62 + }
  63 +}
  64 +
  65 +// AddUint64 adds uint64 values ii into s.
  66 +func (s *Set) AddUint64(ii ...uint64) {
  67 + for _, each := range ii {
  68 + s.add(each)
  69 + }
  70 +}
  71 +
  72 +// AddStr adds string values ss into s.
  73 +func (s *Set) AddStr(ss ...string) {
  74 + for _, each := range ss {
  75 + s.add(each)
  76 + }
  77 +}
  78 +
  79 +// Contains checks if i is in s.
  80 +func (s *Set) Contains(i interface{}) bool {
  81 + if len(s.data) == 0 {
  82 + return false
  83 + }
  84 +
  85 + s.validate(i)
  86 + _, ok := s.data[i]
  87 + return ok
  88 +}
  89 +
  90 +// Keys returns the keys in s.
  91 +func (s *Set) Keys() []interface{} {
  92 + var keys []interface{}
  93 +
  94 + for key := range s.data {
  95 + keys = append(keys, key)
  96 + }
  97 +
  98 + return keys
  99 +}
  100 +
  101 +// KeysInt returns the int keys in s.
  102 +func (s *Set) KeysInt() []int {
  103 + var keys []int
  104 +
  105 + for key := range s.data {
  106 + if intKey, ok := key.(int); ok {
  107 + keys = append(keys, intKey)
  108 + }
  109 + }
  110 +
  111 + return keys
  112 +}
  113 +
  114 +// KeysInt64 returns int64 keys in s.
  115 +func (s *Set) KeysInt64() []int64 {
  116 + var keys []int64
  117 +
  118 + for key := range s.data {
  119 + if intKey, ok := key.(int64); ok {
  120 + keys = append(keys, intKey)
  121 + }
  122 + }
  123 +
  124 + return keys
  125 +}
  126 +
  127 +// KeysUint returns uint keys in s.
  128 +func (s *Set) KeysUint() []uint {
  129 + var keys []uint
  130 +
  131 + for key := range s.data {
  132 + if intKey, ok := key.(uint); ok {
  133 + keys = append(keys, intKey)
  134 + }
  135 + }
  136 +
  137 + return keys
  138 +}
  139 +
  140 +// KeysUint64 returns uint64 keys in s.
  141 +func (s *Set) KeysUint64() []uint64 {
  142 + var keys []uint64
  143 +
  144 + for key := range s.data {
  145 + if intKey, ok := key.(uint64); ok {
  146 + keys = append(keys, intKey)
  147 + }
  148 + }
  149 +
  150 + return keys
  151 +}
  152 +
  153 +// KeysStr returns string keys in s.
  154 +func (s *Set) KeysStr() []string {
  155 + var keys []string
  156 +
  157 + for key := range s.data {
  158 + if strKey, ok := key.(string); ok {
  159 + keys = append(keys, strKey)
  160 + }
  161 + }
  162 +
  163 + return keys
  164 +}
  165 +
  166 +// Remove removes i from s.
  167 +func (s *Set) Remove(i interface{}) {
  168 + s.validate(i)
  169 + delete(s.data, i)
  170 +}
  171 +
  172 +// Count returns the number of items in s.
  173 +func (s *Set) Count() int {
  174 + return len(s.data)
  175 +}
  176 +
  177 +func (s *Set) add(i interface{}) {
  178 + switch s.tp {
  179 + case unmanaged:
  180 + // do nothing
  181 + case untyped:
  182 + s.setType(i)
  183 + default:
  184 + s.validate(i)
  185 + }
  186 + s.data[i] = PlaceholderType{}
  187 +}
  188 +
  189 +func (s *Set) setType(i interface{}) {
  190 + // s.tp can only be untyped here
  191 + switch i.(type) {
  192 + case int:
  193 + s.tp = intType
  194 + case int64:
  195 + s.tp = int64Type
  196 + case uint:
  197 + s.tp = uintType
  198 + case uint64:
  199 + s.tp = uint64Type
  200 + case string:
  201 + s.tp = stringType
  202 + }
  203 +}
  204 +
  205 +func (s *Set) validate(i interface{}) {
  206 + if s.tp == unmanaged {
  207 + return
  208 + }
  209 +
  210 + switch i.(type) {
  211 + case int:
  212 + if s.tp != intType {
  213 + //logx.Errorf("Error: element is int, but set contains elements with type %d", s.tp)
  214 + }
  215 + case int64:
  216 + if s.tp != int64Type {
  217 + //logx.Errorf("Error: element is int64, but set contains elements with type %d", s.tp)
  218 + }
  219 + case uint:
  220 + if s.tp != uintType {
  221 + //logx.Errorf("Error: element is uint, but set contains elements with type %d", s.tp)
  222 + }
  223 + case uint64:
  224 + if s.tp != uint64Type {
  225 + //logx.Errorf("Error: element is uint64, but set contains elements with type %d", s.tp)
  226 + }
  227 + case string:
  228 + if s.tp != stringType {
  229 + //logx.Errorf("Error: element is string, but set contains elements with type %d", s.tp)
  230 + }
  231 + }
  232 +}
1 package utils 1 package utils
2 2
3 import ( 3 import (
  4 + "github.com/linmadan/egglib-go/utils/xtime"
4 "strconv" 5 "strconv"
5 "time" 6 "time"
6 ) 7 )
@@ -103,3 +104,32 @@ func TimeBeforeEqual(t1, t2 time.Time) bool { @@ -103,3 +104,32 @@ func TimeBeforeEqual(t1, t2 time.Time) bool {
103 } 104 }
104 return false 105 return false
105 } 106 }
  107 +
  108 +type TimeString time.Time
  109 +
  110 +func (timeString *TimeString) UnmarshalJSON(data []byte) error {
  111 + if len(data) == 2 {
  112 + return nil
  113 + }
  114 + t, err := xtime.Parse(string(data[1 : len(data)-1]))
  115 + if err != nil {
  116 + return err
  117 + }
  118 + *timeString = TimeString(t)
  119 + return nil
  120 +}
  121 +
  122 +func (timeString TimeString) MarshalJSON() ([]byte, error) {
  123 + if xtime.IsZero(time.Time(timeString)) {
  124 + return []byte(`""`), nil
  125 + }
  126 + b := make([]byte, 0)
  127 + b = append(b, '"')
  128 + b = time.Time(timeString).AppendFormat(b, time.RFC3339)
  129 + b = append(b, '"')
  130 + return b, nil
  131 +}
  132 +
  133 +func (timeString TimeString) Time() time.Time {
  134 + return time.Time(timeString)
  135 +}
@@ -24,6 +24,20 @@ func NewTree(nodes []TreeNode) *Tree { @@ -24,6 +24,20 @@ func NewTree(nodes []TreeNode) *Tree {
24 return tree 24 return tree
25 } 25 }
26 26
  27 +func NewTreeWithNodes(nodes ...TreeNode) *Tree {
  28 + var tree = &Tree{
  29 + Node: nil,
  30 + Nodes: make([]*Tree, 0),
  31 + }
  32 + for i := range nodes {
  33 + match := traverseAdd(tree, nodes[i])
  34 + if !match {
  35 + tree.Nodes = append(tree.Nodes, newTree(nodes[i]))
  36 + }
  37 + }
  38 + return tree
  39 +}
  40 +
27 func newTree(node TreeNode) *Tree { 41 func newTree(node TreeNode) *Tree {
28 return &Tree{ 42 return &Tree{
29 Node: node, 43 Node: node,
@@ -144,6 +144,16 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context) @@ -144,6 +144,16 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context)
144 }) 144 })
145 } 145 }
146 } 146 }
  147 + case "11":
  148 + crontab.SyncMaterialGroup(nil)
  149 + case "12":
  150 + bc := c.Background()
  151 + bc = c.WithValue(bc, "pullType", "full")
  152 + err := crontab.SyncMaterial(bc)
  153 + if err != nil {
  154 + Response(ctx, nil, err)
  155 + return
  156 + }
147 } 157 }
148 Response(ctx, nil, nil) 158 Response(ctx, nil, nil)
149 } 159 }
@@ -19,7 +19,7 @@ func (controller *ProductController) CreateProduct() { @@ -19,7 +19,7 @@ func (controller *ProductController) CreateProduct() {
19 op := ParseOperateInfo(controller.BaseController) 19 op := ParseOperateInfo(controller.BaseController)
20 createProductCommand.CompanyId = op.CompanyId 20 createProductCommand.CompanyId = op.CompanyId
21 createProductCommand.OrgId = op.OrgId 21 createProductCommand.OrgId = op.OrgId
22 - data, err := productService.CreateProduct(createProductCommand) 22 + data, err := productService.CreateProduct(ParseOperateInfo(controller.BaseController), createProductCommand)
23 controller.Response(data, err) 23 controller.Response(data, err)
24 } 24 }
25 25
@@ -29,7 +29,7 @@ func (controller *ProductController) UpdateProduct() { @@ -29,7 +29,7 @@ func (controller *ProductController) UpdateProduct() {
29 Must(controller.Unmarshal(updateProductCommand)) 29 Must(controller.Unmarshal(updateProductCommand))
30 productId, _ := controller.GetInt(":productId") 30 productId, _ := controller.GetInt(":productId")
31 updateProductCommand.ProductId = productId 31 updateProductCommand.ProductId = productId
32 - data, err := productService.UpdateProduct(updateProductCommand) 32 + data, err := productService.UpdateProduct(ParseOperateInfo(controller.BaseController), updateProductCommand)
33 controller.Response(data, err) 33 controller.Response(data, err)
34 } 34 }
35 35
  1 +package controllers
  2 +
  3 +import (
  4 + "github.com/linmadan/egglib-go/web/beego"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterial/command"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterial/query"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterial/service"
  8 +)
  9 +
  10 +type ProductMaterialController struct {
  11 + beego.BaseController
  12 +}
  13 +
  14 +func (controller *ProductMaterialController) CreateProductMaterial() {
  15 + productMaterialService := service.NewProductMaterialService(nil)
  16 + cmd := &command.CreateProductMaterialCommand{}
  17 + controller.Unmarshal(cmd)
  18 + operateInfo := ParseOperateInfo(controller.BaseController)
  19 + cmd.CompanyId = operateInfo.CompanyId
  20 + cmd.OrgId = operateInfo.OrgId
  21 + data, err := productMaterialService.CreateProductMaterial(operateInfo, cmd)
  22 + controller.Response(data, err)
  23 +}
  24 +
  25 +func (controller *ProductMaterialController) UpdateProductMaterial() {
  26 + productMaterialService := service.NewProductMaterialService(nil)
  27 + updateProductMaterialCommand := &command.UpdateProductMaterialCommand{}
  28 + controller.Unmarshal(updateProductMaterialCommand)
  29 + productMaterialId, _ := controller.GetInt(":productMaterialId")
  30 + updateProductMaterialCommand.ProductMaterialId = productMaterialId
  31 + operateInfo := ParseOperateInfo(controller.BaseController)
  32 + //updateProductMaterialCommand.CompanyId = operateInfo.CompanyId
  33 + //updateProductMaterialCommand.OrgId = operateInfo.OrgId
  34 + data, err := productMaterialService.UpdateProductMaterial(operateInfo, updateProductMaterialCommand)
  35 + controller.Response(data, err)
  36 +}
  37 +
  38 +func (controller *ProductMaterialController) GetProductMaterial() {
  39 + productMaterialService := service.NewProductMaterialService(nil)
  40 + getProductMaterialQuery := &query.GetProductMaterialQuery{}
  41 + productMaterialId, _ := controller.GetInt(":productMaterialId")
  42 + getProductMaterialQuery.ProductMaterialId = productMaterialId
  43 + operateInfo := ParseOperateInfo(controller.BaseController)
  44 + data, err := productMaterialService.GetProductMaterial(operateInfo, getProductMaterialQuery)
  45 + controller.Response(data, err)
  46 +}
  47 +
  48 +func (controller *ProductMaterialController) RemoveProductMaterial() {
  49 + productMaterialService := service.NewProductMaterialService(nil)
  50 + removeProductMaterialCommand := &command.RemoveProductMaterialCommand{}
  51 + controller.Unmarshal(removeProductMaterialCommand)
  52 + productMaterialId, _ := controller.GetInt(":productMaterialId")
  53 + removeProductMaterialCommand.ProductMaterialId = productMaterialId
  54 + operateInfo := ParseOperateInfo(controller.BaseController)
  55 + data, err := productMaterialService.RemoveProductMaterial(operateInfo, removeProductMaterialCommand)
  56 + controller.Response(data, err)
  57 +}
  58 +
  59 +//没用到
  60 +func (controller *ProductMaterialController) ListProductMaterial() {
  61 + productMaterialService := service.NewProductMaterialService(nil)
  62 + listProductMaterialQuery := &query.ListProductMaterialQuery{}
  63 + operateInfo := ParseOperateInfo(controller.BaseController)
  64 + data, err := productMaterialService.ListProductMaterial(operateInfo, listProductMaterialQuery)
  65 + controller.Response(data, err)
  66 +}
  67 +
  68 +func (controller *ProductMaterialController) SearchProductMaterial() {
  69 + productMaterialService := service.NewProductMaterialService(nil)
  70 + listProductMaterialQuery := &query.SearchProductMaterialQuery{}
  71 + controller.Unmarshal(listProductMaterialQuery)
  72 + operateInfo := ParseOperateInfo(controller.BaseController)
  73 + total, data, err := productMaterialService.SearchProductMaterial(operateInfo, listProductMaterialQuery)
  74 + ResponseGrid(controller.BaseController, total, data, err)
  75 +}
  76 +
  77 +func (controller *ProductMaterialController) BatchRemoveProductMaterial() {
  78 + productMaterialService := service.NewProductMaterialService(nil)
  79 + batchremoveProductMaterialCommand := &command.BatchRemoveProductMaterialCommand{}
  80 + controller.Unmarshal(batchremoveProductMaterialCommand)
  81 + operateInfo := ParseOperateInfo(controller.BaseController)
  82 + data, err := productMaterialService.BatchRemoveProductMaterial(operateInfo, batchremoveProductMaterialCommand)
  83 + controller.Response(data, err)
  84 +}
  1 +package controllers
  2 +
  3 +import (
  4 + "github.com/linmadan/egglib-go/web/beego"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterialGroup/command"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterialGroup/query"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productMaterialGroup/service"
  8 +)
  9 +
  10 +type ProductMaterialGroupController struct {
  11 + beego.BaseController
  12 +}
  13 +
  14 +func (controller *ProductMaterialGroupController) CreateProductMaterialGroup() {
  15 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  16 + cmd := &command.CreateProductMaterialGroupCommand{}
  17 + controller.Unmarshal(cmd)
  18 + operateInfo := ParseOperateInfo(controller.BaseController)
  19 + cmd.CompanyId = operateInfo.CompanyId
  20 + cmd.OrgId = operateInfo.OrgId
  21 + data, err := productMaterialGroupService.CreateProductMaterialGroup(operateInfo, cmd)
  22 + controller.Response(data, err)
  23 +}
  24 +
  25 +func (controller *ProductMaterialGroupController) UpdateProductMaterialGroup() {
  26 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  27 + updateProductMaterialGroupCommand := &command.UpdateProductMaterialGroupCommand{}
  28 + controller.Unmarshal(updateProductMaterialGroupCommand)
  29 + productMaterialGroupId, _ := controller.GetInt(":productMaterialGroupId")
  30 + updateProductMaterialGroupCommand.ProductMaterialGroupId = productMaterialGroupId
  31 + operateInfo := ParseOperateInfo(controller.BaseController)
  32 + data, err := productMaterialGroupService.UpdateProductMaterialGroup(operateInfo, updateProductMaterialGroupCommand)
  33 + controller.Response(data, err)
  34 +}
  35 +
  36 +func (controller *ProductMaterialGroupController) GetProductMaterialGroup() {
  37 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  38 + getProductMaterialGroupQuery := &query.GetProductMaterialGroupQuery{}
  39 + productMaterialGroupId, _ := controller.GetInt(":productMaterialGroupId")
  40 + getProductMaterialGroupQuery.ProductMaterialGroupId = productMaterialGroupId
  41 + data, err := productMaterialGroupService.GetProductMaterialGroup(getProductMaterialGroupQuery)
  42 + controller.Response(data, err)
  43 +}
  44 +
  45 +func (controller *ProductMaterialGroupController) RemoveProductMaterialGroup() {
  46 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  47 + removeProductMaterialGroupCommand := &command.RemoveProductMaterialGroupCommand{}
  48 + controller.Unmarshal(removeProductMaterialGroupCommand)
  49 + productMaterialGroupId, _ := controller.GetInt(":productMaterialGroupId")
  50 + removeProductMaterialGroupCommand.ProductMaterialGroupId = productMaterialGroupId
  51 + data, err := productMaterialGroupService.RemoveProductMaterialGroup(removeProductMaterialGroupCommand)
  52 + controller.Response(data, err)
  53 +}
  54 +
  55 +func (controller *ProductMaterialGroupController) ListProductMaterialGroup() {
  56 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  57 + listProductMaterialGroupQuery := &query.ListProductMaterialGroupQuery{}
  58 + offset, _ := controller.GetInt("offset")
  59 + listProductMaterialGroupQuery.Offset = offset
  60 + limit, _ := controller.GetInt("limit")
  61 + listProductMaterialGroupQuery.Limit = limit
  62 + data, err := productMaterialGroupService.ListProductMaterialGroup(listProductMaterialGroupQuery)
  63 + controller.Response(data, err)
  64 +}
  65 +
  66 +func (controller *ProductMaterialGroupController) SearchProductMaterialGroup() {
  67 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  68 + cmd := &query.SearchProductMaterialGroupQuery{}
  69 + offset, _ := controller.GetInt("offset")
  70 + cmd.Offset = offset
  71 + limit, _ := controller.GetInt("limit")
  72 + cmd.Limit = limit
  73 + operateInfo := ParseOperateInfo(controller.BaseController)
  74 + cmd.CompanyId = operateInfo.CompanyId
  75 + total, data, err := productMaterialGroupService.SearchProductMaterialGroup(ParseOperateInfo(controller.BaseController), cmd)
  76 + ResponseGrid(controller.BaseController, total, data, err)
  77 +}
  78 +
  79 +func (controller *ProductMaterialGroupController) SelectorProductMaterialGroup() {
  80 + productMaterialGroupService := service.NewProductMaterialGroupService(nil)
  81 + cmd := &query.SelectorProductMaterialGroupQuery{}
  82 + operateInfo := ParseOperateInfo(controller.BaseController)
  83 + cmd.CompanyId = operateInfo.CompanyId
  84 + count, data, err := productMaterialGroupService.SelectorProductMaterialGroup(ParseOperateInfo(controller.BaseController), cmd)
  85 + controller.Response(map[string]interface{}{
  86 + "groups": data,
  87 + "count": count,
  88 + }, err)
  89 +}
  1 +package routers
  2 +
  3 +import (
  4 + "github.com/beego/beego/v2/server/web"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/beego/controllers"
  6 +)
  7 +
  8 +func init() {
  9 + web.Router("/product-material-groups/", &controllers.ProductMaterialGroupController{}, "Post:CreateProductMaterialGroup")
  10 + web.Router("/product-material-groups/:productMaterialGroupId", &controllers.ProductMaterialGroupController{}, "Put:UpdateProductMaterialGroup")
  11 + web.Router("/product-material-groups/:productMaterialGroupId", &controllers.ProductMaterialGroupController{}, "Get:GetProductMaterialGroup")
  12 + web.Router("/product-material-groups/:productMaterialGroupId", &controllers.ProductMaterialGroupController{}, "Delete:RemoveProductMaterialGroup")
  13 + web.Router("/product-material-groups/", &controllers.ProductMaterialGroupController{}, "Get:ListProductMaterialGroup")
  14 + web.Router("/product-material-groups/search", &controllers.ProductMaterialGroupController{}, "Post:SearchProductMaterialGroup")
  15 + web.Router("/product-material-groups/selector", &controllers.ProductMaterialGroupController{}, "Post:SelectorProductMaterialGroup")
  16 +}
  1 +package routers
  2 +
  3 +import (
  4 + "github.com/beego/beego/v2/server/web"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/beego/controllers"
  6 +)
  7 +
  8 +func init() {
  9 + web.Router("/product-materials/", &controllers.ProductMaterialController{}, "Post:CreateProductMaterial") //新增单个物料
  10 + web.Router("/product-materials/:productMaterialId", &controllers.ProductMaterialController{}, "Put:UpdateProductMaterial") //更新单个物料
  11 + web.Router("/product-materials/:productMaterialId", &controllers.ProductMaterialController{}, "Get:GetProductMaterial") //获取单个物料
  12 + web.Router("/product-materials/:productMaterialId", &controllers.ProductMaterialController{}, "Delete:RemoveProductMaterial") //删除单个物料
  13 + web.Router("/product-materials/", &controllers.ProductMaterialController{}, "Get:ListProductMaterial")
  14 + web.Router("/product-materials/search", &controllers.ProductMaterialController{}, "Post:SearchProductMaterial") //搜索返回列表
  15 + web.Router("/product-materials/batch-remove", &controllers.ProductMaterialController{}, "Post:BatchRemoveProductMaterial") //批量删除物料
  16 +}
  1 +package product_material
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + . "github.com/onsi/ginkgo"
  8 + . "github.com/onsi/gomega"
  9 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  10 +)
  11 +
  12 +var _ = Describe("创建生产物料服务", func() {
  13 + Describe("提交数据创建生产物料服务", func() {
  14 + Context("提交正确的新生产物料数据", func() {
  15 + It("返回生产物料数据", func() {
  16 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  17 + body := map[string]interface{}{
  18 + "productMaterialGroupId": "int",
  19 + "materialNumber": "string",
  20 + "materialName": "string",
  21 + "materialAttribute": "string",
  22 + "materialCategory": "string",
  23 + "productMaterialExt": "string",
  24 + }
  25 + httpExpect.POST("/product-materials/").
  26 + WithJSON(body).
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object().
  34 + ContainsKey("productMaterialId").ValueNotEqual("productMaterialId", BeZero())
  35 + })
  36 + })
  37 + })
  38 + AfterEach(func() {
  39 + _, err := pG.DB.Exec("DELETE FROM product_materials WHERE true")
  40 + Expect(err).NotTo(HaveOccurred())
  41 + })
  42 +})
  1 +package product_material
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回生产物料服务", func() {
  14 + var productMaterialId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialId),
  18 + "INSERT INTO product_materials (product_material_id, company_id, org_id, product_material_group_id, material_number, material_name, material_attribute, material_category, product_material_ext, created_at, updated_at, deleted_at, ext) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_id",
  19 + "testProductMaterialId", "testCompanyId", "testOrgId", "testProductMaterialGroupId", "testMaterialNumber", "testMaterialName", "testMaterialAttribute", "testMaterialCategory", "testProductMaterialExt", "testCreatedAt", "testUpdatedAt", "testDeletedAt", "testExt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据productMaterialId参数返回生产物料", func() {
  23 + Context("传入有效的productMaterialId", func() {
  24 + It("返回生产物料数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/product-materials/{productMaterialId}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM product_materials WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package product_material
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回生产物料服务列表", func() {
  14 + var productMaterialId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialId),
  18 + "INSERT INTO product_materials (product_material_id, company_id, org_id, product_material_group_id, material_number, material_name, material_attribute, material_category, product_material_ext, created_at, updated_at, deleted_at, ext) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_id",
  19 + "testProductMaterialId", "testCompanyId", "testOrgId", "testProductMaterialGroupId", "testMaterialNumber", "testMaterialName", "testMaterialAttribute", "testMaterialCategory", "testProductMaterialExt", "testCreatedAt", "testUpdatedAt", "testDeletedAt", "testExt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数返回生产物料列表", func() {
  23 + Context("传入有效的参数", func() {
  24 + It("返回生产物料数据列表", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/product-materials/").
  27 + WithQuery("offset", "int").
  28 + WithQuery("limit", "int").
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object().
  36 + ContainsKey("count").ValueEqual("count", 1).
  37 + ContainsKey("productMaterials").Value("productMaterials").Array()
  38 + })
  39 + })
  40 + })
  41 + AfterEach(func() {
  42 + _, err := pG.DB.Exec("DELETE FROM product_materials WHERE true")
  43 + Expect(err).NotTo(HaveOccurred())
  44 + })
  45 +})
  1 +package product_material
  2 +
  3 +import (
  4 + "net/http"
  5 + "net/http/httptest"
  6 + "testing"
  7 +
  8 + "github.com/beego/beego/v2/server/web"
  9 + . "github.com/onsi/ginkgo"
  10 + . "github.com/onsi/gomega"
  11 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application"
  12 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  13 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/beego"
  14 +)
  15 +
  16 +func TestProductMaterial(t *testing.T) {
  17 + RegisterFailHandler(Fail)
  18 + RunSpecs(t, "Beego Port ProductMaterial Correlations Test Case Suite")
  19 +}
  20 +
  21 +var handler http.Handler
  22 +var server *httptest.Server
  23 +
  24 +var _ = BeforeSuite(func() {
  25 + handler = web.BeeApp.Handlers
  26 + server = httptest.NewServer(handler)
  27 +})
  28 +
  29 +var _ = AfterSuite(func() {
  30 + server.Close()
  31 +})
  1 +package product_material
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("移除生产物料服务", func() {
  14 + var productMaterialId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialId),
  18 + "INSERT INTO product_materials (product_material_id, company_id, org_id, product_material_group_id, material_number, material_name, material_attribute, material_category, product_material_ext, created_at, updated_at, deleted_at, ext) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_id",
  19 + "testProductMaterialId", "testCompanyId", "testOrgId", "testProductMaterialGroupId", "testMaterialNumber", "testMaterialName", "testMaterialAttribute", "testMaterialCategory", "testProductMaterialExt", "testCreatedAt", "testUpdatedAt", "testDeletedAt", "testExt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数移除生产物料服务", func() {
  23 + Context("传入有效的productMaterialId", func() {
  24 + It("返回被移除生产物料的数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.DELETE("/product-materials/{productMaterialId}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM product_materials WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package product_material
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("更新生产物料服务", func() {
  14 + var productMaterialId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialId),
  18 + "INSERT INTO product_materials (product_material_id, company_id, org_id, product_material_group_id, material_number, material_name, material_attribute, material_category, product_material_ext, created_at, updated_at, deleted_at, ext) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_id",
  19 + "testProductMaterialId", "testCompanyId", "testOrgId", "testProductMaterialGroupId", "testMaterialNumber", "testMaterialName", "testMaterialAttribute", "testMaterialCategory", "testProductMaterialExt", "testCreatedAt", "testUpdatedAt", "testDeletedAt", "testExt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("提交数据更新生产物料服务", func() {
  23 + Context("提交正确的生产物料数据", func() {
  24 + It("返回更新后的生产物料数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + body := map[string]interface{}{}
  27 + httpExpect.PUT("/product-materials/{productMaterialId}").
  28 + WithJSON(body).
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object().
  36 + ContainsKey("productMaterialId").ValueEqual("productMaterialId", productMaterialId)
  37 + })
  38 + })
  39 + })
  40 + AfterEach(func() {
  41 + _, err := pG.DB.Exec("DELETE FROM product_materials WHERE true")
  42 + Expect(err).NotTo(HaveOccurred())
  43 + })
  44 +})
  1 +package product_material_group
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + . "github.com/onsi/ginkgo"
  8 + . "github.com/onsi/gomega"
  9 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  10 +)
  11 +
  12 +var _ = Describe("创建物料分组服务", func() {
  13 + Describe("提交数据创建物料分组服务", func() {
  14 + Context("提交正确的新物料分组数据", func() {
  15 + It("返回物料分组数据", func() {
  16 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  17 + body := map[string]interface{}{
  18 + "pid": "int",
  19 + "materialGroupName": "string",
  20 + "materialGroupNumber": "string",
  21 + }
  22 + httpExpect.POST("/product-material-groups/").
  23 + WithJSON(body).
  24 + Expect().
  25 + Status(http.StatusOK).
  26 + JSON().
  27 + Object().
  28 + ContainsKey("code").ValueEqual("code", 0).
  29 + ContainsKey("msg").ValueEqual("msg", "ok").
  30 + ContainsKey("data").Value("data").Object().
  31 + ContainsKey("productMaterialGroupId").ValueNotEqual("productMaterialGroupId", BeZero())
  32 + })
  33 + })
  34 + })
  35 + AfterEach(func() {
  36 + _, err := pG.DB.Exec("DELETE FROM product_material_groups WHERE true")
  37 + Expect(err).NotTo(HaveOccurred())
  38 + })
  39 +})
  1 +package product_material_group
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回物料分组服务", func() {
  14 + var productMaterialGroupId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialGroupId),
  18 + "INSERT INTO product_material_groups (product_material_group_id, company_id, org_id, pid, path, material_group_name, material_group_number, created_at, updated_at, deleted_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_group_id",
  19 + "testProductMaterialGroupId", "testCompanyId", "testOrgId", "testPid", "testPath", "testMaterialGroupName", "testMaterialGroupNumber", "testCreatedAt", "testUpdatedAt", "testDeletedAt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据productMaterialGroupId参数返回物料分组", func() {
  23 + Context("传入有效的productMaterialGroupId", func() {
  24 + It("返回物料分组数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/product-material-groups/{productMaterialGroupId}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM product_material_groups WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package product_material_group
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回物料分组服务列表", func() {
  14 + var productMaterialGroupId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialGroupId),
  18 + "INSERT INTO product_material_groups (product_material_group_id, company_id, org_id, pid, path, material_group_name, material_group_number, created_at, updated_at, deleted_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_group_id",
  19 + "testProductMaterialGroupId", "testCompanyId", "testOrgId", "testPid", "testPath", "testMaterialGroupName", "testMaterialGroupNumber", "testCreatedAt", "testUpdatedAt", "testDeletedAt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数返回物料分组列表", func() {
  23 + Context("传入有效的参数", func() {
  24 + It("返回物料分组数据列表", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/product-material-groups/").
  27 + WithQuery("offset", "int").
  28 + WithQuery("limit", "int").
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object().
  36 + ContainsKey("count").ValueEqual("count", 1).
  37 + ContainsKey("productMaterialGroups").Value("productMaterialGroups").Array()
  38 + })
  39 + })
  40 + })
  41 + AfterEach(func() {
  42 + _, err := pG.DB.Exec("DELETE FROM product_material_groups WHERE true")
  43 + Expect(err).NotTo(HaveOccurred())
  44 + })
  45 +})
  1 +package product_material_group
  2 +
  3 +import (
  4 + "net/http"
  5 + "net/http/httptest"
  6 + "testing"
  7 +
  8 + "github.com/beego/beego/v2/server/web"
  9 + . "github.com/onsi/ginkgo"
  10 + . "github.com/onsi/gomega"
  11 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application"
  12 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  13 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/port/beego"
  14 +)
  15 +
  16 +func TestProductMaterialGroup(t *testing.T) {
  17 + RegisterFailHandler(Fail)
  18 + RunSpecs(t, "Beego Port ProductMaterialGroup Correlations Test Case Suite")
  19 +}
  20 +
  21 +var handler http.Handler
  22 +var server *httptest.Server
  23 +
  24 +var _ = BeforeSuite(func() {
  25 + handler = web.BeeApp.Handlers
  26 + server = httptest.NewServer(handler)
  27 +})
  28 +
  29 +var _ = AfterSuite(func() {
  30 + server.Close()
  31 +})
  1 +package product_material_group
  2 +
  3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "net/http"
  6 +
  7 + "github.com/gavv/httpexpect"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("移除物料分组服务", func() {
  14 + var productMaterialGroupId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&productMaterialGroupId),
  18 + "INSERT INTO product_material_groups (product_material_group_id, company_id, org_id, pid, path, material_group_name, material_group_number, created_at, updated_at, deleted_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING product_material_group_id",
  19 + "testProductMaterialGroupId", "testCompanyId", "testOrgId", "testPid", "testPath", "testMaterialGroupName", "testMaterialGroupNumber", "testCreatedAt", "testUpdatedAt", "testDeletedAt")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数移除物料分组服务", func() {
  23 + Context("传入有效的productMaterialGroupId", func() {
  24 + It("返回被移除物料分组的数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.DELETE("/product-material-groups/{productMaterialGroupId}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM product_material_groups WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})