github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/pkg/service/main.go (about)

     1  package service
     2  
     3  import (
     4  	"time"
     5  
     6  	consts "github.com/easysoft/zendata/internal/pkg/const"
     7  	fileUtils "github.com/easysoft/zendata/pkg/utils/file"
     8  	i118Utils "github.com/easysoft/zendata/pkg/utils/i118"
     9  	logUtils "github.com/easysoft/zendata/pkg/utils/log"
    10  	stringUtils "github.com/easysoft/zendata/pkg/utils/string"
    11  	"github.com/easysoft/zendata/pkg/utils/vari"
    12  )
    13  
    14  type MainService struct {
    15  	ResService      *ResService      `inject:""`
    16  	FieldService    *FieldService    `inject:""`
    17  	CombineService  *CombineService  `inject:""`
    18  	OutputService   *OutputService   `inject:""`
    19  	ProtobufService *ProtobufService `inject:""`
    20  	FileService     *FileService     `inject:""`
    21  	DefService      *DefService      `inject:""`
    22  	ParamService    *ParamService    `inject:""`
    23  }
    24  
    25  func (s *MainService) GenerateFromContents(files []string) {
    26  	startTime := time.Now().Unix()
    27  
    28  	count, err := s.GenerateDataByFile(files)
    29  	if err != nil {
    30  		return
    31  	}
    32  
    33  	s.PrintOutput()
    34  
    35  	// print end msg
    36  	entTime := time.Now().Unix()
    37  	if vari.GlobalVars.RunMode == consts.RunModeServerRequest {
    38  		logUtils.PrintTo(i118Utils.I118Prt.Sprintf("server_response", count, entTime-startTime))
    39  	}
    40  }
    41  
    42  func (s *MainService) GenerateDataByFile(files []string) (count int, err error) {
    43  	if files[0] != "" {
    44  		vari.GlobalVars.ConfigFileDir = fileUtils.GetAbsDir(files[0])
    45  	} else {
    46  		vari.GlobalVars.ConfigFileDir = fileUtils.GetAbsDir(files[1])
    47  	}
    48  
    49  	// get def and res data
    50  	contents := s.FileService.LoadFilesContents(files)
    51  	count, err = s.GenerateDataByContents(contents)
    52  
    53  	return
    54  }
    55  
    56  func (s *MainService) GenerateDataByContents(contents [][]byte) (count int, err error) {
    57  	vari.GlobalVars.DefData = s.DefService.LoadDataContentDef(contents, &vari.GlobalVars.ExportFields)
    58  
    59  	s.ParamService.FixTotalNum()
    60  
    61  	s.ResService.LoadResDef(vari.GlobalVars.ExportFields)
    62  
    63  	err = s.ParamService.CheckParams()
    64  	if err != nil {
    65  		return
    66  	}
    67  
    68  	join := false
    69  	if vari.GlobalVars.OutputFormat != consts.FormatJson && vari.GlobalVars.ExportChildField == "" {
    70  		join = true
    71  	}
    72  
    73  	// gen for each field
    74  	for i, field := range vari.GlobalVars.DefData.Fields {
    75  		if !stringUtils.StrInArr(field.Field, vari.GlobalVars.ExportFields) {
    76  			continue
    77  		}
    78  
    79  		s.FieldService.Generate(&vari.GlobalVars.DefData.Fields[i], join)
    80  
    81  		vari.GlobalVars.ColIsNumArr = append(vari.GlobalVars.ColIsNumArr, vari.GlobalVars.DefData.Fields[i].IsNumb)
    82  	}
    83  
    84  	// combine children fields
    85  	for i, field := range vari.GlobalVars.DefData.Fields {
    86  		if !stringUtils.StrInArr(field.Field, vari.GlobalVars.ExportFields) {
    87  			continue
    88  		}
    89  
    90  		// combine child
    91  		s.CombineService.CombineChildrenIfNeeded(&vari.GlobalVars.DefData.Fields[i], false)
    92  	}
    93  
    94  	return
    95  }
    96  
    97  func (s *MainService) PrintOutput() {
    98  	// get output
    99  	if vari.GlobalVars.OutputFormat == consts.FormatText { // text
   100  		s.OutputService.GenText(false)
   101  	} else if vari.GlobalVars.OutputFormat == consts.FormatJson { // json
   102  		s.OutputService.GenJson()
   103  	} else if vari.GlobalVars.OutputFormat == consts.FormatXml { // xml
   104  		s.OutputService.GenXml()
   105  	} else if vari.GlobalVars.OutputFormat == consts.FormatExcel || vari.GlobalVars.OutputFormat == consts.FormatCsv { // excel
   106  		s.OutputService.GenExcel()
   107  	} else if vari.GlobalVars.OutputFormat == consts.FormatSql { // excel
   108  		s.OutputService.GenSql()
   109  	}
   110  
   111  }
   112  
   113  func (s *MainService) GenerateFromProtobuf(files []string) {
   114  	startTime := time.Now().Unix()
   115  	count := 0
   116  
   117  	buf, pth := s.ProtobufService.GenerateProtobuf(files[0])
   118  
   119  	if vari.Verbose {
   120  		logUtils.PrintTo(i118Utils.I118Prt.Sprintf("protobuf_path", pth))
   121  	}
   122  	logUtils.PrintLine(buf)
   123  
   124  	count = 1
   125  	entTime := time.Now().Unix()
   126  	if vari.GlobalVars.RunMode == consts.RunModeServerRequest {
   127  		logUtils.PrintTo(i118Utils.I118Prt.Sprintf("server_response", count, entTime-startTime))
   128  	}
   129  }