package formview import ( "fmt" "go_dreamfactory/cmd/v2/lib/common" pb2 "go_dreamfactory/cmd/v2/lib/pb" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/pb" "go_dreamfactory/utils" "strings" "sync" cfg "go_dreamfactory/sys/configure/structs" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/widget" "github.com/sirupsen/logrus" "github.com/spf13/cast" ) type RtaskTestView struct { BaseformView itemList *common.ItemList result chan int } func (this *RtaskTestView) CreateView(t *model.TestCase) fyne.CanvasObject { defer this.loadProtocol() this.itemList = common.NewItemList() this.itemList.ItemList = this.itemList.CreateDefaultCheckList() this.result = make(chan int) go func() { }() rtaskTypeInput := widget.NewEntry() paramsInput := widget.NewEntry() paramsInput.PlaceHolder = "多个数值使用,分隔" condiInput := widget.NewEntry() condiInput.PlaceHolder = "条件ID为空时走触发逻辑否则走校验逻辑" input := widget.NewEntry() input.PlaceHolder = "分组编号" this.form.AppendItem(widget.NewFormItem("任务类型", rtaskTypeInput)) this.form.AppendItem(widget.NewFormItem("参数", paramsInput)) this.form.AppendItem(widget.NewFormItem("条件ID", condiInput)) this.form.AppendItem(widget.NewFormItem("分组编号", input)) testBtn := widget.NewButton("手动触发", func() { this.form.OnSubmit = func() { if err := service.GetPttService().SendToClient( t.MainType, t.SubType, &pb.RtaskTestReq{ RtaskType: cast.ToInt32(rtaskTypeInput.Text), Params: utils.TrInt32(paramsInput.Text), CondiId: cast.ToInt32(condiInput.Text), }, ); err != nil { logrus.Error(err) return } } paiWin := dialog.NewCustom("手动触发", "关闭", this.form, this.w) paiWin.Resize(fyne.NewSize(600, 300)) paiWin.Show() }) //"F:\\projects\\workspace\\go_dreamfactory\\bin\\json" jsonPathEntry := widget.NewEntry() jsonPathEntry.SetText("F:\\projects\\workspace\\go_dreamfactory\\bin\\json") reportEntry := widget.NewEntry() reportEntry.SetText("F:\\result.txt") autoTestForm := widget.NewForm( widget.NewFormItem("Json配置", jsonPathEntry), widget.NewFormItem("报告目录", reportEntry), ) autoTestForm.OnSubmit = func() { commCfg := &common.Config{ Path: jsonPathEntry.Text, } var wg sync.WaitGroup if tb, err := cfg.NewTables(commCfg.Loader); err == nil { for _, v := range tb.RdtaskCondi.GetDataList() { wg.Add(1) params := []int32{v.Data1, v.Data2, v.Data3, v.Data4, v.Data5} var p []int32 for _, v := range params { if v > 0 { p = append(p, v) } } go func(condId, rtype int32, p []int32) { defer wg.Done() if err := service.GetPttService().SendToClient( t.MainType, t.SubType, &pb.RtaskTestReq{ RtaskType: rtype, Params: p, }, ); err != nil { logrus.Error(err) return } logrus.Debugf("执行任务 id:%v rtype:%v params:%v", condId, rtype, p) }(v.Id, v.Type, p) wg.Wait() // time.Sleep(time.Millisecond * 100) } } } autoTestBtn := widget.NewButton("自动触发配置", func() { paiWin := dialog.NewCustom("自动触发配置", "关闭", autoTestForm, this.w) paiWin.Resize(fyne.NewSize(600, 300)) paiWin.Show() }) autoBtn := widget.NewButton("模拟API测试", func() { for k, v := range pb2.TaskCase { if k != "" && strings.Contains(k, ".") && v.Enabled { if err := service.GetPttService().SendToClient( v.MainType, v.SubType, v.Req, ); err != nil { logrus.Errorf("%v.%v err:%v", v.MainType, v.SubType, err) return } logrus.Debugf("%v.%v", v.MainType, v.SubType) } } }) c := container.NewBorder( container.NewHBox(testBtn, autoTestBtn, autoBtn), nil, nil, nil, this.itemList.ItemList) return c } func (this *RtaskTestView) loadProtocol() { for k, v := range pb2.TaskCase { if k != "" && strings.Contains(k, ".") && v.Enabled { item := common.Item{ Id: k, Text: fmt.Sprintf("%v (%v)", v.NavLabel, k), } this.itemList.AddItem(item) } } }