Skip to content

Commit

Permalink
+ 修复连续创建用户时注册功能异常的问题
Browse files Browse the repository at this point in the history
+ 优化了用户界面,超级管理员不得更改角色,更改密码只会在当前用户为admin时才会生效
+ 优化角色文案: 原admin,guest,perform 分别对应为 审核人,提交人,执行人
+ 优化执行逻辑,提高多条语句执行效率。
+ 实现以工单为基准的事务回滚操作(如一个订单内一条语句执行错误则该工单之前已执行成功的语句自动回滚)
+ 优化审核规则, 取消允许设置字符集,允许设置排列顺序 开关。 用户在允许的Charset范围/允许的Collate范围 内填写相关字符集即可,不再需要开启2个开关。
+ 优化用户赋权返回提示文案
+ UI细节调整
+ 审核规则新增基于主键回滚开关
+ 修复初始化语句导致超级管理员权限异常的问题
+ 使用yee 框架替换echo
  • Loading branch information
cookieY committed Jun 8, 2020
1 parent 4cf2b0c commit 18b21d4
Show file tree
Hide file tree
Showing 22 changed files with 432 additions and 739 deletions.
23 changes: 11 additions & 12 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,19 @@ go 1.13

require (
github.com/BurntSushi/toml v0.3.1
github.com/cookieY/sqlx v1.3.0
github.com/cookieY/yee v0.0.3
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/go-sql-driver/mysql v1.4.1
github.com/golang/protobuf v1.3.1
github.com/jinzhu/gorm v1.9.8
github.com/jmoiron/sqlx v1.2.0
github.com/labstack/echo/v4 v4.1.5
github.com/pingcap/errors v0.11.4
github.com/pingcap/parser v0.0.0-20190531122720-f244897cfc07
github.com/pingcap/tidb v0.0.0-20190603053416-d71ce873bb23
github.com/prometheus/common v0.2.0
github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7 // indirect
github.com/siddontang/go-mysql v0.0.0-20190618002340-dbe0224ac097
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f
google.golang.org/grpc v1.19.0
github.com/golang/protobuf v1.3.4
github.com/jinzhu/gorm v1.9.12
github.com/onsi/ginkgo v1.7.0 // indirect
github.com/onsi/gomega v1.4.3 // indirect
github.com/pingcap/parser v0.0.0-20200317021010-cd90cc2a7d87
github.com/pingcap/tidb v1.1.0-beta.0.20200325035537-a8561e4d459e
github.com/sirupsen/logrus v1.4.1 // indirect
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413
google.golang.org/grpc v1.25.1
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
Expand Down
117 changes: 117 additions & 0 deletions src/apis/audit.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package apis

import (
"Yearning-go/src/lib"
"Yearning-go/src/model"
pb "Yearning-go/src/proto"
"time"
)

type OSC struct {
WorkId string `json:"work_id"`
}

type Review struct {
WorkId string `json:"work_id"`
Type int `json:"type"`
Juno pb.LibraAuditOrder
Order model.CoreSqlOrder
}

type Reviewer interface {
DelayKill() string
IsKill() bool
}

type OSCer interface {
Kill() string
Percent() map[string]int
}

func (r *Review) DelayKill() string {
model.DB().Model(model.CoreSqlOrder{}).Where("work_id =?", r).Update(&model.CoreSqlOrder{IsKill: 1})
model.DB().Model(&model.CoreSqlOrder{}).Where("work_id =?", r).Updates(map[string]interface{}{"status": 4, "execute_time": time.Now().Format("2006-01-02 15:04")})
return "kill指令已发送!将在到达执行时间时自动取消,状态已更改为执行失败!"
}

func (r *Review) IsKill() bool {
var c model.CoreSqlOrder
model.DB().Where("work_id =?", r.WorkId).First(&c)
return c.IsKill == 1
}

func (r *Review) Init() *Review {
var sor model.CoreDataSource
model.DB().Where("source =?", r.Order.Source).First(&sor)

ps := lib.Decrypt(sor.Password)
r.Juno = pb.LibraAuditOrder{
SQL: r.Order.SQL,
Backup: r.Order.Backup == 1,
Execute: true,
Source: &pb.Source{Addr: sor.IP, Port: int32(sor.Port), User: sor.Username, Password: ps},
WorkId: r.Order.WorkId,
IsDML: false,
DataBase: r.Order.DataBase,
Table: r.Order.Table,
}
return r
}

func (r *Review) Executor() {
switch r.Order.Type {
case 0:
go func() {
t1 := lib.TimerEx(&r.Order)
if t1 > 0 {
tick := time.NewTicker(t1)
for {
select {
case <-tick.C:
lib.ExDDLClient(&r.Juno)
tick.Stop()
goto ENDCHECK
}
ENDCHECK:
break
}
} else {
lib.ExDDLClient(&r.Juno)
}
}()
model.DB().Model(&model.CoreSqlOrder{}).Where("work_id =?", r.Order.WorkId).Updates(map[string]interface{}{"status": 3})

case 1:
go func() {
r.Juno.IsDML = true
t1 := lib.TimerEx(&r.Order)
if t1 > 0 {
tick := time.NewTicker(t1)
for {
select {
case <-tick.C:
lib.ExDMLClient(&r.Juno)
tick.Stop()
goto ENDCHECK
}
ENDCHECK:
break
}
} else {
lib.ExDMLClient(&r.Juno)
}
}()
model.DB().Model(&model.CoreSqlOrder{}).Where("work_id =?", r.Order.WorkId).Updates(map[string]interface{}{"status": 3})
}
}

func (o *OSC) Percent() map[string]int {
var d model.CoreSqlOrder
model.DB().Where("work_id =?", o.WorkId).First(&d)
return map[string]int{"p": d.Percent, "s": d.Current}
}

func (o *OSC) Kill() string {
lib.ExKillOsc(&pb.LibraAuditOrder{WorkId:o.WorkId})
return "kill指令已发送!如工单最后显示为执行失败则生效!"
}
Loading

0 comments on commit 18b21d4

Please sign in to comment.