|
|
package repository
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
"github.com/go-pg/pg/v10"
|
|
|
|
|
|
"github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
|
|
|
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
|
|
|
"github.com/linmadan/egglib-go/utils/snowflake"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/transform"
|
|
|
)
|
|
|
|
|
|
type ProductPlanDispatchRecordRepository struct {
|
|
|
transactionContext *pgTransaction.TransactionContext
|
|
|
}
|
|
|
|
|
|
func (repository *ProductPlanDispatchRecordRepository) nextIdentify() (int64, error) {
|
|
|
IdWorker, err := snowflake.NewIdWorker(1)
|
|
|
if err != nil {
|
|
|
return 0, err
|
|
|
}
|
|
|
id, err := IdWorker.NextId()
|
|
|
return id, err
|
|
|
}
|
|
|
func (repository *ProductPlanDispatchRecordRepository) Save(productPlanDispatchRecord *domain.ProductPlanDispatchRecord) (*domain.ProductPlanDispatchRecord, error) {
|
|
|
sqlBuildFields := []string{
|
|
|
"product_plan_dispatch_record_id",
|
|
|
"company_id",
|
|
|
"org_id",
|
|
|
"batch_number",
|
|
|
"product_date",
|
|
|
"plan_dispatch_status",
|
|
|
"work_station",
|
|
|
"created_at",
|
|
|
"updated_at",
|
|
|
"deleted_at",
|
|
|
"plan_dispatch_record_ext",
|
|
|
"ext",
|
|
|
}
|
|
|
insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_plan_dispatch_record_id", "deleted_at"))
|
|
|
insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_plan_dispatch_record_id", "deleted_at"))
|
|
|
returningFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields)
|
|
|
updateFields := sqlbuilder.RemoveSqlFields(sqlBuildFields, "product_plan_dispatch_record_id", "deleted_at")
|
|
|
updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields)
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
if productPlanDispatchRecord.Identify() == nil {
|
|
|
if _, err := tx.QueryOne(
|
|
|
pg.Scan(
|
|
|
&productPlanDispatchRecord.ProductPlanDispatchRecordId,
|
|
|
&productPlanDispatchRecord.CompanyId,
|
|
|
&productPlanDispatchRecord.OrgId,
|
|
|
&productPlanDispatchRecord.BatchNumber,
|
|
|
&productPlanDispatchRecord.ProductDate,
|
|
|
&productPlanDispatchRecord.PlanDispatchStatus,
|
|
|
&productPlanDispatchRecord.WorkStation,
|
|
|
&productPlanDispatchRecord.CreatedAt,
|
|
|
&productPlanDispatchRecord.UpdatedAt,
|
|
|
&productPlanDispatchRecord.DeletedAt,
|
|
|
&productPlanDispatchRecord.PlanDispatchRecordExt,
|
|
|
&productPlanDispatchRecord.Ext,
|
|
|
),
|
|
|
fmt.Sprintf("INSERT INTO manufacture.product_plan_dispatch_record (%s) VALUES (%s) RETURNING %s", insertFieldsSnippet, insertPlaceHoldersSnippet, returningFieldsSnippet),
|
|
|
//productPlanDispatchRecord.ProductPlanDispatchRecordId,
|
|
|
productPlanDispatchRecord.CompanyId,
|
|
|
productPlanDispatchRecord.OrgId,
|
|
|
productPlanDispatchRecord.BatchNumber,
|
|
|
productPlanDispatchRecord.ProductDate,
|
|
|
productPlanDispatchRecord.PlanDispatchStatus,
|
|
|
productPlanDispatchRecord.WorkStation,
|
|
|
productPlanDispatchRecord.CreatedAt,
|
|
|
productPlanDispatchRecord.UpdatedAt,
|
|
|
//productPlanDispatchRecord.DeletedAt,
|
|
|
productPlanDispatchRecord.PlanDispatchRecordExt,
|
|
|
productPlanDispatchRecord.Ext,
|
|
|
); err != nil {
|
|
|
return productPlanDispatchRecord, err
|
|
|
}
|
|
|
} else {
|
|
|
if _, err := tx.QueryOne(
|
|
|
pg.Scan(
|
|
|
&productPlanDispatchRecord.ProductPlanDispatchRecordId,
|
|
|
&productPlanDispatchRecord.CompanyId,
|
|
|
&productPlanDispatchRecord.OrgId,
|
|
|
&productPlanDispatchRecord.BatchNumber,
|
|
|
&productPlanDispatchRecord.ProductDate,
|
|
|
&productPlanDispatchRecord.PlanDispatchStatus,
|
|
|
&productPlanDispatchRecord.WorkStation,
|
|
|
&productPlanDispatchRecord.CreatedAt,
|
|
|
&productPlanDispatchRecord.UpdatedAt,
|
|
|
&productPlanDispatchRecord.DeletedAt,
|
|
|
&productPlanDispatchRecord.PlanDispatchRecordExt,
|
|
|
&productPlanDispatchRecord.Ext,
|
|
|
),
|
|
|
fmt.Sprintf("UPDATE manufacture.product_plan_dispatch_record SET %s WHERE product_plan_dispatch_record_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet),
|
|
|
//productPlanDispatchRecord.ProductPlanDispatchRecordId,
|
|
|
productPlanDispatchRecord.CompanyId,
|
|
|
productPlanDispatchRecord.OrgId,
|
|
|
productPlanDispatchRecord.BatchNumber,
|
|
|
productPlanDispatchRecord.ProductDate,
|
|
|
productPlanDispatchRecord.PlanDispatchStatus,
|
|
|
productPlanDispatchRecord.WorkStation,
|
|
|
productPlanDispatchRecord.CreatedAt,
|
|
|
productPlanDispatchRecord.UpdatedAt,
|
|
|
//productPlanDispatchRecord.DeletedAt,
|
|
|
productPlanDispatchRecord.PlanDispatchRecordExt,
|
|
|
productPlanDispatchRecord.Ext,
|
|
|
productPlanDispatchRecord.Identify(),
|
|
|
); err != nil {
|
|
|
return productPlanDispatchRecord, err
|
|
|
}
|
|
|
}
|
|
|
return productPlanDispatchRecord, nil
|
|
|
}
|
|
|
func (repository *ProductPlanDispatchRecordRepository) Remove(productPlanDispatchRecord *domain.ProductPlanDispatchRecord) (*domain.ProductPlanDispatchRecord, error) {
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
productPlanDispatchRecordModel := new(models.ProductPlanDispatchRecord)
|
|
|
productPlanDispatchRecordModel.ProductPlanDispatchRecordId = productPlanDispatchRecord.Identify().(int)
|
|
|
if _, err := tx.Model(productPlanDispatchRecordModel).WherePK().Delete(); err != nil {
|
|
|
return productPlanDispatchRecord, err
|
|
|
}
|
|
|
return productPlanDispatchRecord, nil
|
|
|
}
|
|
|
func (repository *ProductPlanDispatchRecordRepository) FindOne(queryOptions map[string]interface{}) (*domain.ProductPlanDispatchRecord, error) {
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
productPlanDispatchRecordModel := new(models.ProductPlanDispatchRecord)
|
|
|
query := sqlbuilder.BuildQuery(tx.Model(productPlanDispatchRecordModel), queryOptions)
|
|
|
query.SetWhereByQueryOption("product_plan_dispatch_record.product_plan_dispatch_record_id = ?", "productPlanDispatchRecordId")
|
|
|
query.SetWhereByQueryOption("company_id = ?", "companyId")
|
|
|
query.SetWhereByQueryOption("org_id = ?", "orgId")
|
|
|
query.SetWhereByQueryOption("product_date = ?", "productDate")
|
|
|
query.SetWhereByQueryOption("work_station->>'workStationId'='?'", "workStationId")
|
|
|
query.SetWhereByQueryOption("plan_dispatch_record_ext->>'productPlanId'='?'", "productPlanId")
|
|
|
if err := query.First(); err != nil {
|
|
|
if err.Error() == "pg: no rows in result set" {
|
|
|
return nil, domain.ErrorNotFound
|
|
|
} else {
|
|
|
return nil, err
|
|
|
}
|
|
|
}
|
|
|
if productPlanDispatchRecordModel.ProductPlanDispatchRecordId == 0 {
|
|
|
return nil, nil
|
|
|
} else {
|
|
|
return transform.TransformToProductPlanDispatchRecordDomainModelFromPgModels(productPlanDispatchRecordModel)
|
|
|
}
|
|
|
}
|
|
|
func (repository *ProductPlanDispatchRecordRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ProductPlanDispatchRecord, error) {
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
var productPlanDispatchRecordModels []*models.ProductPlanDispatchRecord
|
|
|
productPlanDispatchRecords := make([]*domain.ProductPlanDispatchRecord, 0)
|
|
|
query := sqlbuilder.BuildQuery(tx.Model(&productPlanDispatchRecordModels), queryOptions)
|
|
|
query.SetOffsetAndLimit(domain.MaxQueryRow)
|
|
|
query.SetOrderDirect("product_plan_dispatch_record_id", "DESC")
|
|
|
if count, err := query.SelectAndCount(); err != nil {
|
|
|
return 0, productPlanDispatchRecords, err
|
|
|
} else {
|
|
|
for _, productPlanDispatchRecordModel := range productPlanDispatchRecordModels {
|
|
|
if productPlanDispatchRecord, err := transform.TransformToProductPlanDispatchRecordDomainModelFromPgModels(productPlanDispatchRecordModel); err != nil {
|
|
|
return 0, productPlanDispatchRecords, err
|
|
|
} else {
|
|
|
productPlanDispatchRecords = append(productPlanDispatchRecords, productPlanDispatchRecord)
|
|
|
}
|
|
|
}
|
|
|
return int64(count), productPlanDispatchRecords, nil
|
|
|
}
|
|
|
}
|
|
|
func NewProductPlanDispatchRecordRepository(transactionContext *pgTransaction.TransactionContext) (*ProductPlanDispatchRecordRepository, error) {
|
|
|
if transactionContext == nil {
|
|
|
return nil, fmt.Errorf("transactionContext参数不能为nil")
|
|
|
} else {
|
|
|
return &ProductPlanDispatchRecordRepository{
|
|
|
transactionContext: transactionContext,
|
|
|
}, nil
|
|
|
}
|
|
|
} |
...
|
...
|
|