作者 Your Name

更新

@@ -59,6 +59,7 @@ func (data *importAttendance) validField() error { @@ -59,6 +59,7 @@ func (data *importAttendance) validField() error {
59 return nil 59 return nil
60 } 60 }
61 61
  62 +// 导入生产计划
62 func (srv ExcelDataService) ImportDataAttendance(importDataCommand *command.ImportDataCommand) (interface{}, error) { 63 func (srv ExcelDataService) ImportDataAttendance(importDataCommand *command.ImportDataCommand) (interface{}, error) {
63 excelImport := excel.NewExcelImport() 64 excelImport := excel.NewExcelImport()
64 excelImport.RowBegin = 2 //第二行开始读取 65 excelImport.RowBegin = 2 //第二行开始读取
  1 +package service
  2 +
  3 +import (
  4 + "github.com/linmadan/egglib-go/core/application"
  5 + "github.com/linmadan/egglib-go/utils/excel"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/ecelData/command"
  7 + productRecordCommand "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/command"
  8 + productRecordService "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productRecord/service"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils/converter"
  10 +)
  11 +
  12 +// ImportProductRecord 导入生产记录
  13 +func (srv ExcelDataService) ImportProductRecord(importDataCommand *command.ImportDataCommand) (interface{}, error) {
  14 + excelImport := excel.NewExcelImport()
  15 + excelImport.RowBegin = 3 //第二行开始读取
  16 + excelImport.DataFields = []excel.DataField{
  17 + {EnName: "CreatedDate", CnName: "日期"},
  18 + {EnName: "WorkshopName", CnName: "车间"},
  19 + {EnName: "LineName", CnName: "线别"},
  20 + {EnName: "SectionName", CnName: "工段"},
  21 + {EnName: "WorkerName", CnName: "姓名"},
  22 + {EnName: "ProductGroupName", CnName: "班组"},
  23 + {EnName: "Weigh", CnName: "二级品重量"},
  24 + }
  25 + excelData, err := converter.OpenImportFileFromIoReader(excelImport, importDataCommand.Reader, importDataCommand.FileExt) //excelImport.OpenExcelFromIoReader(importDataCommand.Reader)
  26 + if err != nil {
  27 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  28 + }
  29 + items := make([]productRecordCommand.BatchAddProductRecordCommand, 0, len(excelData))
  30 + item := productRecordCommand.BatchAddProductRecordCommand{}
  31 + for _, v := range excelData {
  32 + item = productRecordCommand.BatchAddProductRecordCommand{
  33 + CreatedDate: v["CreatedDate"],
  34 + WorkshopName: v["WorkshopName"],
  35 + LineName: v["LineName"],
  36 + SectionName: v["SectionName"],
  37 + WorkerName: v["WorkerName"],
  38 + BatchNumber: v["BatchNumber"],
  39 + ProductGroupName: v["ProductGroupName"],
  40 + Weigh: v["Weigh"],
  41 + FailReason: "",
  42 + }
  43 + items = append(items, item)
  44 + }
  45 +
  46 + svr := productRecordService.NewProductRecordService(nil)
  47 + failRows, err := svr.BatchAddProductRecord(importDataCommand.Operator, items)
  48 + if err != nil {
  49 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  50 + }
  51 + return srv.importResultWithHeader(excelImport.DataFields, failRows, len(items)), nil
  52 +}
@@ -6,6 +6,8 @@ import ( @@ -6,6 +6,8 @@ import (
6 "strings" 6 "strings"
7 "time" 7 "time"
8 8
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
  10 +
9 "github.com/linmadan/egglib-go/core/application" 11 "github.com/linmadan/egglib-go/core/application"
10 "github.com/linmadan/egglib-go/transaction/pg" 12 "github.com/linmadan/egglib-go/transaction/pg"
11 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 13 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
@@ -414,7 +416,7 @@ func (productRecordService *ProductRecordService) CancelProductRecord(cmd *comma @@ -414,7 +416,7 @@ func (productRecordService *ProductRecordService) CancelProductRecord(cmd *comma
414 return struct{}{}, nil 416 return struct{}{}, nil
415 } 417 }
416 418
417 -//BatchAddProductRecord 从文件导入的数据,批量添加生产记录 419 +// BatchAddProductRecord 从文件导入的数据,批量添加生产记录
418 func (productRecordService *ProductRecordService) BatchAddProductRecord(operate *domain.OperateInfo, param []command.BatchAddProductRecordCommand) ( 420 func (productRecordService *ProductRecordService) BatchAddProductRecord(operate *domain.OperateInfo, param []command.BatchAddProductRecordCommand) (
419 failRows []interface{}, err error) { 421 failRows []interface{}, err error) {
420 transactionContext, err := factory.CreateTransactionContext(nil) 422 transactionContext, err := factory.CreateTransactionContext(nil)
@@ -570,7 +572,7 @@ func (productRecordService *ProductRecordService) BatchAddProductRecord(operate @@ -570,7 +572,7 @@ func (productRecordService *ProductRecordService) BatchAddProductRecord(operate
570 Weigh: weigh, 572 Weigh: weigh,
571 WeighBefore: weigh, 573 WeighBefore: weigh,
572 WeighAfter: weigh, 574 WeighAfter: weigh,
573 - ApproveStatus: domain.ProductRecordNotApprove, 575 + ApproveStatus: domain.ProductRecordAutoApproved,
574 ApproveAt: nowTime.Unix(), 576 ApproveAt: nowTime.Unix(),
575 ApproveUser: operateUser, 577 ApproveUser: operateUser,
576 UnitConversionId: productPlanData.Ext.ProductPlanExt.ProductId, 578 UnitConversionId: productPlanData.Ext.ProductPlanExt.ProductId,
@@ -603,7 +605,13 @@ func (productRecordService *ProductRecordService) BatchAddProductRecord(operate @@ -603,7 +605,13 @@ func (productRecordService *ProductRecordService) BatchAddProductRecord(operate
603 if err := transactionContext.CommitTransaction(); err != nil { 605 if err := transactionContext.CommitTransaction(); err != nil {
604 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 606 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
605 } 607 }
606 - //自动审核  
607 - //  
608 - return nil, nil 608 + for i := range productRecordList {
  609 + err = domainService.SendProductRecordStaticsJob(productRecordList[i])
  610 + if err != nil {
  611 + e := fmt.Sprintf("【发送产量统计任务失败】 ProductRecordId=%d, %s", productRecordList[i].ProductRecordId, err.Error())
  612 + log.Logger.Error(e)
  613 + return failRows, err
  614 + }
  615 + }
  616 + return failRows, err
609 } 617 }
  1 +package command
  2 +
  3 +//创建事故记录
  4 +type CreatedProductTroubleCommand struct{}
  1 +package query
  2 +
  3 +type GetProductTroubleQuery struct {
  4 + // 生产记录ID
  5 + Id int `json:"id" valid:"Required"`
  6 +}
  1 +package service
  2 +
  3 +import (
  4 + "github.com/linmadan/egglib-go/core/application"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/productTrouble/command"
  7 +)
  8 +
  9 +// 事故管理
  10 +type ProductTroubleService struct{}
  11 +
  12 +func NewProductTroubleService(options map[string]interface{}) *ProductTroubleService {
  13 + newService := &ProductTroubleService{}
  14 + return newService
  15 +}
  16 +
  17 +func (srv ProductTroubleService) SaveProductTrouble(param *command.CreatedProductTroubleCommand) (map[string]interface{}, error) {
  18 + transactionContext, err := factory.CreateTransactionContext(nil)
  19 + if err != nil {
  20 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  21 + }
  22 + if err := transactionContext.StartTransaction(); err != nil {
  23 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  24 + }
  25 + defer func() {
  26 + transactionContext.RollbackTransaction()
  27 + }()
  28 +
  29 + if err := transactionContext.CommitTransaction(); err != nil {
  30 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  31 + }
  32 + return map[string]interface{}{
  33 + "id": 0,
  34 + }, nil
  35 +}
  36 +
  37 +func (srv ProductTroubleService) GetProductTrouble(id int64) (map[string]interface{}, error) {
  38 + transactionContext, err := factory.CreateTransactionContext(nil)
  39 + if err != nil {
  40 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  41 + }
  42 + if err := transactionContext.StartTransaction(); err != nil {
  43 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  44 + }
  45 + defer func() {
  46 + transactionContext.RollbackTransaction()
  47 + }()
  48 +
  49 + if err := transactionContext.CommitTransaction(); err != nil {
  50 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  51 + }
  52 + return map[string]interface{}{
  53 + "id": 0,
  54 + }, nil
  55 +}
  56 +
  57 +func (srv ProductTroubleService) DeleteProductTrouble(id int64) error {
  58 + transactionContext, err := factory.CreateTransactionContext(nil)
  59 + if err != nil {
  60 + return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  61 + }
  62 + if err := transactionContext.StartTransaction(); err != nil {
  63 + return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  64 + }
  65 + defer func() {
  66 + transactionContext.RollbackTransaction()
  67 + }()
  68 +
  69 + if err := transactionContext.CommitTransaction(); err != nil {
  70 + return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  71 + }
  72 + return nil
  73 +}
  74 +
  75 +func (srv ProductTroubleService) ApproveProductTrouble(id int64) error {
  76 + transactionContext, err := factory.CreateTransactionContext(nil)
  77 + if err != nil {
  78 + return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  79 + }
  80 + if err := transactionContext.StartTransaction(); err != nil {
  81 + return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  82 + }
  83 + defer func() {
  84 + transactionContext.RollbackTransaction()
  85 + }()
  86 +
  87 + if err := transactionContext.CommitTransaction(); err != nil {
  88 + return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  89 + }
  90 + return nil
  91 +}
  1 +package domain
  2 +
  3 +import (
  4 + "errors"
  5 + "time"
  6 +)
  7 +
  8 +// 事故管理数据结构
  9 +type ProductTrouble struct {
  10 + Id int `json:"id"` // id
  11 + CompanyId int `json:"companyId"` //企业id
  12 + OrgId int `json:"orgId"` //组织ID
  13 + WorkStation WorkStation `json:"workStation"` // 工作位置
  14 + ProductWorker *User `json:"productWorker,omitempty"` // 生产工人
  15 + AmountLoss float64 `json:"amountLoss"` // 损失的金额
  16 + Types TroubleType `json:"types"` // 事故类型
  17 + RecordData time.Time `json:"recordData"` // 事故发生的日期
  18 + Remark string `json:"remakr"` // 备注
  19 + ApproveStatus ProductTroubleApprove `json:"approveStatus"` // 审核状态 1:未审核 2:已审核 3.自动审核
  20 + ApproveAt *time.Time `json:"approveAt"` // 审核时间
  21 + ApproveUser *User `json:"approveUser"` // 审核人
  22 + CreatedAt time.Time `json:"createdAt,omitempty"` // 创建时间
  23 + UpdatedAt time.Time `json:"updatedAt,omitempty"` // 更新时间
  24 + DeletedAt *time.Time `json:"deletedAt,omitempty"` // 删除时间
  25 +}
  26 +
  27 +// 事故类型
  28 +type TroubleType int
  29 +
  30 +// 事故类型 1 安全事故 ,2 质量事故, 3 金属事故 ,4 非金属事故
  31 +const (
  32 + TroubleType1 TroubleType = 1
  33 + TroubleType2 TroubleType = 2
  34 + TroubleType3 TroubleType = 3
  35 + TroubleType4 TroubleType = 4
  36 +)
  37 +
  38 +// 事故管理 审核状态
  39 +type ProductTroubleApprove int
  40 +
  41 +// 审核状态 1:未审核 2:已审核
  42 +const (
  43 + TroubleWaitApprove ProductTroubleApprove = 1
  44 + TroubleIsApprove ProductTroubleApprove = 2
  45 +)
  46 +
  47 +type ProductTroubleRepository interface {
  48 + Save(param *ProductTrouble) (*ProductTrouble, error)
  49 + Remove(param *ProductTrouble) (*ProductTrouble, error)
  50 + FindOne(queryOptions map[string]interface{}) (*ProductTrouble, error)
  51 + Find(queryOptions map[string]interface{}) (int64, []*ProductTrouble, error)
  52 +}
  53 +
  54 +func (m *ProductTrouble) SetTypes(v int) error {
  55 + troubleType := TroubleType(v)
  56 + switch troubleType {
  57 + case TroubleType1, TroubleType2, TroubleType3, TroubleType4:
  58 + m.Types = troubleType
  59 + default:
  60 + return errors.New("ProductTrouble.Types 值错误")
  61 + }
  62 + return nil
  63 +}
  64 +
  65 +// 审核事故数据
  66 +func (m *ProductTrouble) Approve() error {
  67 + nowTime := time.Now()
  68 + switch m.ApproveStatus {
  69 + case TroubleIsApprove:
  70 + return errors.New("事故不需要重复审核")
  71 + default:
  72 + m.ApproveAt = &nowTime
  73 + m.ApproveStatus = TroubleIsApprove
  74 + }
  75 + return nil
  76 +}
  1 +package models
  2 +
  3 +import (
  4 + "time"
  5 +
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  7 +)
  8 +
  9 +// 事故管理数据结构
  10 +type ProductTrouble struct {
  11 + tableName string `comment:" 事故管理" pg:"manufacture.product_trouble,alias:product_trouble"`
  12 + Id int ` pg:"pk:id"` // id
  13 + CompanyId int //企业id
  14 + OrgId int //组织ID
  15 + WorkStation domain.WorkStation // 工作位置
  16 + ProductWorker *domain.User // 生产工人
  17 + AmountLoss float64 // 损失的金额
  18 + Types int // 事故类型
  19 + RecordData time.Time // 事故发生的日期
  20 + Remark string // 备注
  21 + ApproveStatus int // 审核状态 1:未审核 2:已审核 3.自动审核
  22 + ApproveAt *time.Time // 审核时间
  23 + ApproveUser *domain.User // 审核人
  24 + CreatedAt time.Time // 创建时间
  25 + UpdatedAt time.Time // 更新时间
  26 + DeletedAt *time.Time // 删除时间
  27 +}
  1 +package repository
  2 +
  3 +import (
  4 + "fmt"
  5 + "time"
  6 +
  7 + "github.com/go-pg/pg/v10"
  8 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg/models"
  11 +)
  12 +
  13 +type ProductTroubleRepository struct {
  14 + transactionContext *pgTransaction.TransactionContext
  15 +}
  16 +
  17 +var _ domain.ProductTroubleRepository = (*ProductTroubleRepository)(nil)
  18 +
  19 +func NewProductTroubleRepository(transactionContext *pgTransaction.TransactionContext) (*ProductTroubleRepository, error) {
  20 + if transactionContext == nil {
  21 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  22 + } else {
  23 + return &ProductTroubleRepository{
  24 + transactionContext: transactionContext,
  25 + }, nil
  26 + }
  27 +}
  28 +
  29 +func (repo *ProductTroubleRepository) Save(param *domain.ProductTrouble) (*domain.ProductTrouble, error) {
  30 + m := models.ProductTrouble{
  31 + Id: param.Id,
  32 + CompanyId: param.CompanyId,
  33 + OrgId: param.OrgId,
  34 + WorkStation: param.WorkStation,
  35 + ProductWorker: param.ProductWorker,
  36 + AmountLoss: param.AmountLoss,
  37 + Types: int(param.Types),
  38 + RecordData: param.RecordData,
  39 + Remark: param.Remark,
  40 + ApproveStatus: int(param.ApproveStatus),
  41 + ApproveAt: param.ApproveAt,
  42 + ApproveUser: param.ApproveUser,
  43 + CreatedAt: param.CreatedAt,
  44 + UpdatedAt: param.UpdatedAt,
  45 + DeletedAt: param.DeletedAt,
  46 + }
  47 + tx := repo.transactionContext.PgTx
  48 + if param.Id == 0 {
  49 + _, err := tx.Model(&m).Insert()
  50 + if err != nil {
  51 + return nil, err
  52 + }
  53 + param.Id = m.Id
  54 + } else {
  55 + _, err := tx.Model(&m).WherePK().Update()
  56 + if err != nil {
  57 + return nil, err
  58 + }
  59 + }
  60 +
  61 + return param, nil
  62 +}
  63 +
  64 +func (repo *ProductTroubleRepository) Remove(param *domain.ProductTrouble) (*domain.ProductTrouble, error) {
  65 + tx := repo.transactionContext.PgTx
  66 + m := new(models.ProductTrouble)
  67 + m.Id = param.Id
  68 + nowTime := time.Now()
  69 + param.DeletedAt = &nowTime
  70 + _, err := tx.Model(m).
  71 + WherePK().Set("deleted_at=?", nowTime).
  72 + Update()
  73 + if err != nil {
  74 + return param, err
  75 + }
  76 +
  77 + return nil, nil
  78 +}
  79 +
  80 +func (repo *ProductTroubleRepository) FindOne(queryOptions map[string]interface{}) (*domain.ProductTrouble, error) {
  81 + tx := repo.transactionContext.PgTx
  82 + m := new(models.ProductTrouble)
  83 + query := tx.Model(m).Where("deleted_at isnull")
  84 + if v, ok := queryOptions["id"]; ok {
  85 + query.Where("id=?", v)
  86 + }
  87 + err := query.First()
  88 + if err != nil {
  89 + if err == pg.ErrNoRows {
  90 + return nil, domain.ErrorNotFound
  91 + } else {
  92 + return nil, err
  93 + }
  94 + }
  95 + result := repo.TransformToDomain(m)
  96 + return result, nil
  97 +}
  98 +
  99 +func (repo *ProductTroubleRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ProductTrouble, error) {
  100 + tx := repo.transactionContext.PgTx
  101 + m := []models.ProductTrouble{}
  102 + query := tx.Model(&m).
  103 + Where("deleted_at isnull").
  104 + Limit(20)
  105 + if v, ok := queryOptions["limit"].(int); ok {
  106 + query.Limit(v)
  107 + }
  108 +
  109 + if v, ok := queryOptions["offset"].(int); ok {
  110 + query.Offset(v)
  111 + }
  112 +
  113 + cnt, err := query.SelectAndCount()
  114 + if err != nil {
  115 + return 0, nil, err
  116 + }
  117 +
  118 + var listData []*domain.ProductTrouble
  119 + for i := range m {
  120 + temp := repo.TransformToDomain(&m[i])
  121 + listData = append(listData, temp)
  122 + }
  123 + return int64(cnt), listData, nil
  124 +}
  125 +
  126 +func (repo *ProductTroubleRepository) TransformToDomain(param *models.ProductTrouble) *domain.ProductTrouble {
  127 + return &domain.ProductTrouble{
  128 + Id: param.Id,
  129 + CompanyId: param.CompanyId,
  130 + OrgId: param.OrgId,
  131 + WorkStation: param.WorkStation,
  132 + ProductWorker: param.ProductWorker,
  133 + AmountLoss: param.AmountLoss,
  134 + Types: domain.TroubleType(param.Types),
  135 + RecordData: param.RecordData,
  136 + Remark: param.Remark,
  137 + ApproveStatus: domain.ProductTroubleApprove(param.ApproveStatus),
  138 + ApproveAt: param.ApproveAt,
  139 + ApproveUser: param.ApproveUser,
  140 + CreatedAt: param.CreatedAt,
  141 + UpdatedAt: param.UpdatedAt,
  142 + DeletedAt: param.DeletedAt,
  143 + }
  144 +}
@@ -55,6 +55,8 @@ func (controller *ExcelDataController) FileImport() { @@ -55,6 +55,8 @@ func (controller *ExcelDataController) FileImport() {
55 // data, err = excelService.ImportCooperationUser(cmd) 55 // data, err = excelService.ImportCooperationUser(cmd)
56 //case domain.ImportOrganization: 56 //case domain.ImportOrganization:
57 // data, err = excelService.ImportOrganization(cmd) 57 // data, err = excelService.ImportOrganization(cmd)
  58 + case "ImportProductRecord":
  59 + data, err = excelService.ImportProductRecord(cmd)
58 case "ImportAttendance": 60 case "ImportAttendance":
59 data, err = excelService.ImportDataAttendance(cmd) 61 data, err = excelService.ImportDataAttendance(cmd)
60 default: 62 default:
@@ -112,7 +114,7 @@ func (controller *ExcelDataController) FileExport() { @@ -112,7 +114,7 @@ func (controller *ExcelDataController) FileExport() {
112 controller.responseExcelByFile(controller.Ctx, excelTool, filename) 114 controller.responseExcelByFile(controller.Ctx, excelTool, filename)
113 } 115 }
114 116
115 -//GetExcelDataFields 获取导出excel数据的可选字段 117 +// GetExcelDataFields 获取导出excel数据的可选字段
116 func (controller *ExcelDataController) GetExcelDataFields() { 118 func (controller *ExcelDataController) GetExcelDataFields() {
117 119
118 } 120 }