zhangqian
2023-11-01 530fed8ec225453572d57b15c200ab062c335457
model/index.go
@@ -1,108 +1,164 @@
package model
import (
   "aps_crm/conf"
   "aps_crm/pkg/logx"
   "aps_crm/pkg/mysqlx"
   "aps_crm/pkg/safe"
   "gorm.io/gorm/schema"
)
func Init() error {
   if err := mysqlx.Init(&conf.Conf.Mysql, logx.GetLogger()); err != nil {
      return err
   }
   if err := RegisterTables(); err != nil {
      return err
   }
   safe.Go(func() {
      InsertDefaultData()
   })
   return nil
}
func RegisterTables() error {
   db := mysqlx.GetDB()
   err := db.AutoMigrate(
      User{},
      Menu{},
      JwtBlacklist{},
      Country{},
      Province{},
      City{},
      Client{},
      ClientLevel{},
      ClientOrigin{},
      ClientStatus{},
      ClientType{},
      Contact{},
      EnterpriseNature{},
      EnterpriseScale{},
      FollowRecord{},
      Industry{},
      RegisteredCapital{},
      SaleChance{},
      SalesLeads{},
      SalesSources{},
      SaleStage{},
      SaleType{},
      RegularCustomers{},
      Possibility{},
      Status{},
      Quotation{},
      MasterOrder{},
      SubOrder{},
      Product{},
      SalesDetails{},
      SalesReturn{},
      SalesRefund{},
      Contract{},
      Plan{},
      ServiceContract{},
      OrderManage{},
      ServiceFollowup{},
      CustomerServiceSheet{},
      ServiceFeeManage{},
      Authority{},
      Api{},
      Department{},
      Satisfaction{},
      TimelyRate{},
      SolveRate{},
      IsVisit{},
      IsVisit{},
      ReportSource{},
      OrderType{},
      ServiceContractStatus{},
      ServiceContractType{},
      RefundMethod{},
      IsInvoice{},
      AccountId{},
      SalesReturnStatus{},
      Repository{},
      QuotationStatus{},
      Currency{},
   )
   return err
}
type InitDefaultData interface {
   InitDefaultData() error
}
func InsertDefaultData() {
   models := []interface{}{
      NewServiceTypeSearch(),
      NewPriorityLevelSearch(),
      NewSeveritySearch(),
      NewTimeSpentSearch(),
   }
   for _, model := range models {
      if id, ok := model.(InitDefaultData); ok {
         if err := id.InitDefaultData(); err != nil {
            logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error())
         }
      }
   }
}
package model
import (
   "aps_crm/conf"
   "aps_crm/pkg/logx"
   "aps_crm/pkg/mysqlx"
   "aps_crm/pkg/safe"
   "sync"
)
func Init() error {
   if err := mysqlx.Init(&conf.Conf.Mysql, logx.GetLogger()); err != nil {
      return err
   }
   if err := RegisterTables(); err != nil {
      return err
   }
   safe.Go(func() {
      InsertDefaultData()
   })
   return nil
}
func RegisterTables() error {
   db := mysqlx.GetDB()
   err := db.AutoMigrate(
      User{},
      Menu{},
      JwtBlacklist{},
      Country{},
      Province{},
      City{},
      Client{},
      ClientLevel{},
      ClientOrigin{},
      ClientStatus{},
      ClientType{},
      Contact{},
      EnterpriseNature{},
      EnterpriseScale{},
      FollowRecord{},
      Industry{},
      RegisteredCapital{},
      SaleChance{},
      SalesLeads{},
      SalesSources{},
      SaleStage{},
      SaleType{},
      RegularCustomers{},
      Possibility{},
      Status{},
      Quotation{},
      MasterOrder{},
      SubOrder{},
      Product{},
      SalesDetails{},
      SalesReturn{},
      SalesRefund{},
      Contract{},
      Plan{},
      ServiceContract{},
      OrderManage{},
      ServiceFollowup{},
      CustomerServiceSheet{},
      ServiceFeeManage{},
      Authority{},
      Api{},
      Department{},
      Satisfaction{},
      TimelyRate{},
      SolveRate{},
      IsVisit{},
      IsVisit{},
      ReportSource{},
      OrderType{},
      ServiceContractStatus{},
      ServiceContractType{},
      RefundMethod{},
      IsInvoice{},
      AccountId{},
      SalesReturnStatus{},
      Repository{},
      QuotationStatus{},
      Currency{},
      CollectionProjection{},
      ContactInformation{},
      SalesReturn{},
      SalesRefund{},
      ServiceCollectionPlan{},
      Receipt{},
      ServiceOrder{},
      CourierCompany{},
      InvoiceStatus{},
      InvoiceType{},
      Invoice{},
      RefundType{},
   )
   return err
}
type InitDefaultData interface {
   InitDefaultData(errCh chan<- error, wg *sync.WaitGroup)
}
func InsertDefaultData() {
   errCh := make(chan error, 2)
   var wg sync.WaitGroup
   models := []interface{}{
      NewServiceTypeSearch(),
      NewPriorityLevelSearch(),
      NewSeveritySearch(),
      NewTimeSpentSearch(),
      NewInvoiceTypeSearch(),
      NewInvoiceStatusSearch(),
      NewCourierCompanySearch(),
      NewServiceContractStatusSearch(),
      NewServiceContractTypeSearch(),
      NewServiceOrderStatusSearch(),
      NewSatisfactionSearch(),
      NewSolveRateSearch(),
      NewIsVisitSearch(),
      NewTimelyRateSearch(),
      NewFaultTypeSearch(),
      NewRepositorySearch(),
      NewSaleStageSearch(),
      NewQuotationStatusSearch(),
      NewSalesSourcesSearch(),
      NewClientStatusSearch(),
      NewClientTypeSearch(),
      NewClientOriginSearch(),
      NewClientLevelSearch(),
      NewIndustrySearch(),
      NewRegisteredCapitalSearch(),
      NewEnterpriseNatureSearch(),
      NewEnterpriseScaleSearch(),
      NewContactInformationSearch(),
      NewSaleTypeSearch(),
      NewPossibilitySearch(),
      NewStatusSearch(),
      NewPaymentTypeSearch(),
      NewBankAccountSearch(),
      NewRefundTypeSearch(),
   }
   for _, model := range models {
      if id, ok := model.(InitDefaultData); ok {
         wg.Add(1)
         go id.InitDefaultData(errCh, &wg)
      }
   }
   go func() {
      wg.Wait()    // 等待所有goroutine完成
      close(errCh) // 关闭错误通道
   }()
   for err := range errCh {
      if err != nil {
         logx.Errorf("InitDefaultData err: %v", err.Error())
      }
   }
}