diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f86fdb4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Binaries for programs and plugins + diff --git a/.idea/community_team.iml b/.idea/community_team.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/community_team.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..de50cfd --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..28977ea --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +# 多重构建,减少镜像大小 +# 构建:使用golang:1.13版本 +FROM registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/golang:1.18.4 as build + +# 容器环境变量添加,会覆盖默认的变量值 +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,direct +ENV TZ="Asia/Shanghai" +ENV PHONE_DATA_DIR="./static/bat" +# 设置工作区 +WORKDIR /go/release + +# 把全部文件添加到/go/release目录 +ADD . . + +# 编译:把main.go编译成可执行的二进制文件,命名为zyos +RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -tags netgo -ldflags="-s -w" -installsuffix cgo -o zyos main.go + +FROM ubuntu:xenial as prod +LABEL maintainer="zengzhengrong" +ENV TZ="Asia/Shanghai" +ENV PHONE_DATA_DIR="./static/bat" + +COPY static/html static/html +COPY static/bat static/bat +# 时区纠正 +RUN rm -f /etc/localtime \ + && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && echo "Asia/Shanghai" > /etc/timezone +# 在build阶段复制可执行的go二进制文件app +COPY --from=build /go/release/zyos ./zyos + +COPY --from=build /go/release/etc/cfg.yml /var/zyos/cfg.yml + +# 启动服务 +CMD ["./zyos","-c","/var/zyos/cfg.yml"] + diff --git a/Dockerfile-prd b/Dockerfile-prd new file mode 100644 index 0000000..beb5959 --- /dev/null +++ b/Dockerfile-prd @@ -0,0 +1,39 @@ +# 多重构建,减少镜像大小 +# 构建:使用golang:1.18版本(直接使用自己从香港下载回来的镜像版本,提高打包速度) +FROM registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/golang:1.18.4 as build + +# 容器环境变量添加,会覆盖默认的变量值 +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,direct +ENV TZ="Asia/Shanghai" +ENV PHONE_DATA_DIR="./static/bat" +# 设置工作区 +WORKDIR /go/release + +# 把全部文件添加到/go/release目录 +ADD . . + +# 编译:把main.go编译成可执行的二进制文件,命名为zyos +RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -tags netgo -ldflags="-s -w" -installsuffix cgo -o zyos main.go + +FROM ubuntu:xenial as prod +LABEL maintainer="zengzhengrong" +ENV TZ="Asia/Shanghai" +ENV PHONE_DATA_DIR="./static/bat" + +COPY static/html static/html +COPY static/bat static/bat +# 时区纠正 +RUN rm -f /etc/localtime \ + && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && echo "Asia/Shanghai" > /etc/timezone +# 在build阶段复制可执行的go二进制文件app +COPY --from=build /go/release/zyos ./zyos + +COPY --from=build /go/release/etc/cfg.yml /var/zyos/cfg.yml + +# 启动服务 +# CMD ["./zyos","-c","/var/zyos/cfg.yml"] +CMD ["bash","-c","sysctl -w net.ipv4.tcp_tw_reuse=1 && sysctl -w net.ipv4.tcp_fin_timeout=10 && sysctl -w net.ipv4.ip_local_port_range='1024 65535' && sysctl -p && ./zyos -c /var/zyos/cfg.yml"] + + diff --git a/Dockerfile-task b/Dockerfile-task new file mode 100644 index 0000000..6e86a95 --- /dev/null +++ b/Dockerfile-task @@ -0,0 +1,38 @@ +# 多重构建,减少镜像大小 +# 构建:使用golang:1.15版本 +FROM registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/golang:1.18.4 as build + +# 容器环境变量添加,会覆盖默认的变量值 +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,direct +ENV TZ="Asia/Shanghai" +ENV PHONE_DATA_DIR="./static/bat" +# 设置工作区 +WORKDIR /go/release + +# 把全部文件添加到/go/release目录 +ADD . . + +# 编译:把main.go编译成可执行的二进制文件,命名为zyos +RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -tags netgo -ldflags="-s -w" -installsuffix cgo -o zyos_order_task cmd/task/main.go + +FROM ubuntu:xenial as prod +LABEL maintainer="zengzhengrong" +ENV TZ="Asia/Shanghai" +ENV PHONE_DATA_DIR="./static/bat" + +COPY static/html static/html +COPY static/bat static/bat + +# 时区纠正 +RUN rm -f /etc/localtime \ + && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && echo "Asia/Shanghai" > /etc/timezone +# 在build阶段复制可执行的go二进制文件app +COPY --from=build /go/release/zyos_order_task ./zyos_order_task + +COPY --from=build /go/release/etc/task.yml /var/zyos/task.yml + +# 启动服务 +CMD ["./zyos_order_task","-c","/var/zyos/task.yml"] + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e7e30c2 --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +.PHONY: build clean tool lint help + +APP=applet + +all: build + +build: + go build -o ./bin/$(APP) ./cmd/main.go + +lite: + go build -ldflags "-s -w" -o ./bin/$(APP) ./cmd/main.go + +install: + #@go build -v . + go install ./cmd/... + +tool: + go vet ./...; true + gofmt -w . + +lint: + golint ./... + +clean: + rm -rf go-gin-example + go clean -i . + +help: + @echo "make: compile packages and dependencies" + @echo "make tool: run specified go tool" + @echo "make lint: golint ./..." + @echo "make clean: remove object files and cached files" \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..de4d11e --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# applet + +## 要看 nginx.conf 和 wap conf + +## 层级介绍 + +- hdl 做接收数据的报错, 数据校验 +- svc 做数据处理的报错, 数据转换 +- lib 只抛出错误给hdl或者svc进行处理, 不做数据校验 +- db 可以处理db错误,其它错误返回给svc进行处理 +- mw 中间件 +- md 结构体 + +#### 介绍 + +基于gin的接口小程序 + +#### 软件架构 + +软件架构说明 + +#### 安装教程 + +1. xxxx +2. xxxx +3. xxxx + +#### 使用说明 + +1. xxxx +2. xxxx +3. xxxx + +#### 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 +4. 新建 Pull Request + +## swagger + +``` +// 参考:https://segmentfault.com/a/1190000013808421 +// 安装命令行 +go get -u github.com/swaggo/swag/cmd/swag +// 生成 +swag init +``` \ No newline at end of file diff --git a/app/cfg/cfg_app.go b/app/cfg/cfg_app.go new file mode 100644 index 0000000..3caf9f6 --- /dev/null +++ b/app/cfg/cfg_app.go @@ -0,0 +1,122 @@ +package cfg + +import ( + "time" +) + +type Config struct { + Debug bool `yaml:"debug"` + Prd bool `yaml:"prd"` + CurlDebug bool `yaml:"curldebug"` + SrvAddr string `yaml:"srv_addr"` + RedisAddr string `yaml:"redis_addr"` + RedisAddrSecond RedisAddrSeconds `yaml:"redis_addr_second"` + DB DBCfg `yaml:"db"` + MQ MQCfg `yaml:"mq"` + ES ESCfg `yaml:"es"` + Log LogCfg `yaml:"log"` + ArkID ArkIDCfg `yaml:"arkid"` + Admin AdminCfg `yaml:"admin"` + Official OfficialCfg `yaml:"official"` + WebsiteBackend WebsiteBackendCfg `yaml:"website_backend"` + WxappletFilepath WxappletFilepathCfg `yaml:"wxapplet_filepath"` + H5Filepath H5FilepathCfg `yaml:"h5_filepath"` + ImBusinessRpc ImBusinessRpcCfg `yaml:"im_business_rpc"` + Local bool + AppComm AppCommCfg `yaml:"app_comm"` + Zhimeng ZhimengCfg `yaml:"zm"` + Supply SupplyCfg `yaml:"supply"` + ZhiosOpen ZhiosOpenCfg `yaml:"zhios_open"` + ZhimengDB DBCfg `yaml:"zhimeng_db"` +} +type RedisAddrSeconds struct { + Addr string `json:"addr"` + Pwd string `json:"pwd"` +} +type ZhiosOpenCfg struct { + URL string `yaml:"url"` +} +type ImBusinessRpcCfg struct { + URL string `yaml:"url"` + PORT string `yaml:"port"` +} + +// 公共模块 +type AppCommCfg struct { + URL string `yaml:"url"` +} +type SupplyCfg struct { + URL string `yaml:"url"` +} +type ZhimengCfg struct { + URL string `yaml:"url"` +} + +// OfficialCfg is 官网 + +type OfficialCfg struct { + URL string `yaml:"url"` +} +type WxappletFilepathCfg struct { + URL string `yaml:"url"` +} +type H5FilepathCfg struct { + URL string `yaml:"url"` +} +type WebsiteBackendCfg struct { + URL string `yaml:"url"` +} + +// AdminCfg is 后台接口调用需要 +type AdminCfg struct { + URL string `yaml:"url"` + IURL string `yaml:"iurl"` + AesKey string `yaml:"api_aes_key"` + AesIV string `yaml:"api_aes_iv"` +} + +type ArkIDCfg struct { + Admin string `yaml:"admin"` + AdminPassword string `yaml:"admin_password"` + Url string `yaml:"url` +} + +//数据库配置结构体 +type DBCfg struct { + Host string `yaml:"host"` //ip及端口 + Name string `yaml:"name"` //库名 + User string `yaml:"user"` //用户 + Psw string `yaml:"psw"` //密码 + ShowLog bool `yaml:"show_log"` //是否显示SQL语句 + MaxLifetime time.Duration `yaml:"max_lifetime"` + MaxOpenConns int `yaml:"max_open_conns"` + MaxIdleConns int `yaml:"max_idle_conns"` + Path string `yaml:"path"` //日志文件存放路径 +} + +type MQCfg struct { + Host string `yaml:"host"` + Port string `yaml:"port"` + User string `yaml:"user"` + Pwd string `yaml:"pwd"` +} +type ESCfg struct { + Url string `yaml:"url"` + User string `yaml:"user"` + Pwd string `yaml:"pwd"` +} + +//日志配置结构体 +type LogCfg struct { + AppName string `yaml:"app_name" ` + Level string `yaml:"level"` + IsStdOut bool `yaml:"is_stdout"` + TimeFormat string `yaml:"time_format"` // second, milli, nano, standard, iso, + Encoding string `yaml:"encoding"` // console, json + + IsFileOut bool `yaml:"is_file_out"` + FileDir string `yaml:"file_dir"` + FileName string `yaml:"file_name"` + FileMaxSize int `yaml:"file_max_size"` + FileMaxAge int `yaml:"file_max_age"` +} diff --git a/app/cfg/cfg_cache_key.go b/app/cfg/cfg_cache_key.go new file mode 100644 index 0000000..c091909 --- /dev/null +++ b/app/cfg/cfg_cache_key.go @@ -0,0 +1,3 @@ +package cfg + +// 统一管理缓存 diff --git a/app/cfg/cfg_task.go b/app/cfg/cfg_task.go new file mode 100644 index 0000000..cbaa432 --- /dev/null +++ b/app/cfg/cfg_task.go @@ -0,0 +1,4 @@ +package cfg + +type TaskConfig struct { +} diff --git a/app/cfg/init_cache.go b/app/cfg/init_cache.go new file mode 100644 index 0000000..873657f --- /dev/null +++ b/app/cfg/init_cache.go @@ -0,0 +1,9 @@ +package cfg + +import ( + "applet/app/utils/cache" +) + +func InitCache() { + cache.NewRedis(RedisAddr) +} diff --git a/app/cfg/init_cache_second.go b/app/cfg/init_cache_second.go new file mode 100644 index 0000000..6b3e6a2 --- /dev/null +++ b/app/cfg/init_cache_second.go @@ -0,0 +1,9 @@ +package cfg + +import ( + "applet/app/utils/cachesecond" +) + +func InitCacheSecond() { + cachesecond.NewRedis(RedisAddrSecond.Addr, RedisAddrSecond.Pwd) +} diff --git a/app/cfg/init_cfg.go b/app/cfg/init_cfg.go new file mode 100644 index 0000000..7ffae1d --- /dev/null +++ b/app/cfg/init_cfg.go @@ -0,0 +1,81 @@ +package cfg + +import ( + "flag" + "io/ioutil" + + "gopkg.in/yaml.v2" +) + +//配置文件数据,全局变量 +var ( + Debug bool + Prd bool + CurlDebug bool + SrvAddr string + RedisAddr string + RedisAddrSecond *RedisAddrSeconds + DB *DBCfg + MQ *MQCfg + ES *ESCfg + Log *LogCfg + ArkID *ArkIDCfg + Admin *AdminCfg + Official *OfficialCfg + WxappletFilepath *WxappletFilepathCfg + H5Filepath *H5FilepathCfg + Local bool + AppComm *AppCommCfg + Zhimeng *ZhimengCfg + WebsiteBackend *WebsiteBackendCfg + Supply *SupplyCfg + ImBusinessRpc *ImBusinessRpcCfg + ZhiosOpen *ZhiosOpenCfg + ZhimengDB *DBCfg +) + +//初始化配置文件,将cfg.yml读入到内存 +func InitCfg() { + //用指定的名称、默认值、使用信息注册一个string类型flag。 + path := flag.String("c", "etc/cfg.yml", "config file") + //解析命令行参数写入注册的flag里。 + //解析之后,flag的值可以直接使用。 + flag.Parse() + var ( + c []byte + err error + conf *Config + ) + if c, err = ioutil.ReadFile(*path); err != nil { + panic(err) + } + //yaml.Unmarshal反序列化映射到Config + if err = yaml.Unmarshal(c, &conf); err != nil { + panic(err) + } + //数据读入内存 + Prd = conf.Prd + Debug = conf.Debug + Local = conf.Local + CurlDebug = conf.CurlDebug + DB = &conf.DB + MQ = &conf.MQ + Log = &conf.Log + ArkID = &conf.ArkID + RedisAddr = conf.RedisAddr + RedisAddrSecond = &conf.RedisAddrSecond + SrvAddr = conf.SrvAddr + Admin = &conf.Admin + Official = &conf.Official + WxappletFilepath = &conf.WxappletFilepath + AppComm = &conf.AppComm + Zhimeng = &conf.Zhimeng + Supply = &conf.Supply + H5Filepath = &conf.H5Filepath + WebsiteBackend = &conf.WebsiteBackend + ImBusinessRpc = &conf.ImBusinessRpc + ES = &conf.ES + ZhiosOpen = &conf.ZhiosOpen + ZhimengDB = &conf.ZhimengDB + +} diff --git a/app/cfg/init_es.go b/app/cfg/init_es.go new file mode 100644 index 0000000..ab5595b --- /dev/null +++ b/app/cfg/init_es.go @@ -0,0 +1,12 @@ +package cfg + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es" + "encoding/json" +) + +func InitEs() { + data, _ := json.Marshal(ES) + filePutContents("init_es", string(data)) + es.Init(ES.Url, ES.User, ES.Pwd) +} diff --git a/app/cfg/init_log.go b/app/cfg/init_log.go new file mode 100644 index 0000000..0f31eb5 --- /dev/null +++ b/app/cfg/init_log.go @@ -0,0 +1,20 @@ +package cfg + +import "applet/app/utils/logx" + +func InitLog() { + logx.InitDefaultLogger(&logx.LogConfig{ + AppName: Log.AppName, + Level: Log.Level, + StacktraceLevel: "error", + IsStdOut: Log.IsStdOut, + TimeFormat: Log.TimeFormat, + Encoding: Log.Encoding, + IsFileOut: Log.IsFileOut, + FileDir: Log.FileDir, + FileName: Log.FileName, + FileMaxSize: Log.FileMaxSize, + FileMaxAge: Log.FileMaxAge, + Skip: 2, + }) +} diff --git a/app/cfg/init_rabbitmq.go b/app/cfg/init_rabbitmq.go new file mode 100644 index 0000000..f04cd5e --- /dev/null +++ b/app/cfg/init_rabbitmq.go @@ -0,0 +1,28 @@ +package cfg + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" + "encoding/json" + "os" + "strings" + "time" +) + +func InitMq() { + data, _ := json.Marshal(MQ) + filePutContents("init_rabbit_mq", string(data)) + err := rabbit.Init(MQ.Host, MQ.Port, MQ.User, MQ.Pwd) + if err != nil { + filePutContents("init_rabbit_mq", err.Error()) + return + } +} + +func filePutContents(fileName string, content string) { + fd, _ := os.OpenFile("./tmp/"+fileName+".log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) + fd_time := time.Now().Format("2006-01-02 15:04:05") + fd_content := strings.Join([]string{"[", fd_time, "] ", content, "\n"}, "") + buf := []byte(fd_content) + fd.Write(buf) + fd.Close() +} diff --git a/app/cfg/init_task.go b/app/cfg/init_task.go new file mode 100644 index 0000000..e2f4a22 --- /dev/null +++ b/app/cfg/init_task.go @@ -0,0 +1,53 @@ +package cfg + +import ( + "flag" + "io/ioutil" + + "gopkg.in/yaml.v2" + + mc "applet/app/utils/cache/cache" + "applet/app/utils/logx" +) + +func InitTaskCfg() { + path := flag.String("c", "etc/task.yml", "config file") + flag.Parse() + var ( + c []byte + err error + conf *Config + ) + if c, err = ioutil.ReadFile(*path); err != nil { + panic(err) + } + if err = yaml.Unmarshal(c, &conf); err != nil { + panic(err) + } + Prd = conf.Prd + Debug = conf.Debug + DB = &conf.DB + MQ = &conf.MQ + ES = &conf.ES + Log = &conf.Log + Admin = &conf.Admin + RedisAddr = conf.RedisAddr + RedisAddrSecond = &conf.RedisAddrSecond + Local = conf.Local + AppComm = &conf.AppComm + Zhimeng = &conf.Zhimeng + Supply = &conf.Supply + ZhiosOpen = &conf.ZhiosOpen + ZhimengDB = &conf.ZhimengDB + +} + +var MemCache mc.Cache + +func InitMemCache() { + var err error + MemCache, err = mc.NewCache("memory", `{"interval":60}`) + if err != nil { + logx.Fatal(err.Error()) + } +} diff --git a/app/db/db.go b/app/db/db.go new file mode 100644 index 0000000..d2aa2f6 --- /dev/null +++ b/app/db/db.go @@ -0,0 +1,105 @@ +package db + +import ( + "fmt" + "os" + "time" + + _ "github.com/go-sql-driver/mysql" //必须导入mysql驱动,否则会panic + "xorm.io/xorm" + "xorm.io/xorm/log" + + "applet/app/cfg" + "applet/app/utils/logx" +) + +var Db *xorm.Engine + +// 根据DB配置文件初始化数据库 +func InitDB(c *cfg.DBCfg) error { + var ( + err error + f *os.File + ) + //创建Orm引擎 + if Db, err = xorm.NewEngine("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", c.User, c.Psw, c.Host, c.Name)); err != nil { + return err + } + Db.SetConnMaxLifetime(c.MaxLifetime * time.Second) //设置最长连接时间 + Db.SetMaxOpenConns(c.MaxOpenConns) //设置最大打开连接数 + Db.SetMaxIdleConns(c.MaxIdleConns) //设置连接池的空闲数大小 + if err = Db.Ping(); err != nil { //尝试ping数据库 + return err + } + if c.ShowLog { //根据配置文件设置日志 + Db.ShowSQL(true) //设置是否打印sql + Db.Logger().SetLevel(0) //设置日志等级 + //修改日志文件存放路径文件名是%s.log + path := fmt.Sprintf(c.Path, c.Name) + f, err = os.OpenFile(path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777) + if err != nil { + os.RemoveAll(c.Path) + if f, err = os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777); err != nil { + return err + } + } + logger := log.NewSimpleLogger(f) + logger.ShowSQL(true) + Db.SetLogger(logger) + } + return nil +} + +/********************************************* 公用方法 *********************************************/ + +// 数据批量插入 +func DbInsertBatch(Db *xorm.Engine, m ...interface{}) error { + if len(m) == 0 { + return nil + } + id, err := Db.Insert(m...) + if id == 0 || err != nil { + return logx.Warn("cannot insert data :", err) + } + return nil +} + +// QueryNativeString 查询原生sql +func QueryNativeString(Db *xorm.Engine, sql string, args ...interface{}) ([]map[string]string, error) { + results, err := Db.SQL(sql, args...).QueryString() + return results, err +} +func QueryNativeStringWithSess(sess *xorm.Session, sql string, args ...interface{}) ([]map[string]string, error) { + results, err := sess.SQL(sql, args...).QueryString() + return results, err +} + +// UpdateComm common update +func UpdateComm(Db *xorm.Engine, id interface{}, model interface{}) (int64, error) { + row, err := Db.ID(id).Update(model) + return row, err +} + +// InsertComm common insert +func InsertComm(Db *xorm.Engine, model interface{}) (int64, error) { + row, err := Db.InsertOne(model) + return row, err +} + +// InsertCommWithSession common insert +func InsertCommWithSession(session *xorm.Session, model interface{}) (int64, error) { + row, err := session.InsertOne(model) + return row, err +} + +// GetComm +// payload *model +// return *model,has,err +func GetComm(Db *xorm.Engine, model interface{}) (interface{}, bool, error) { + has, err := Db.Get(model) + if err != nil { + _ = logx.Warn(err) + return nil, false, err + } + return model, has, nil +} diff --git a/app/db/db_cate.go b/app/db/db_cate.go new file mode 100644 index 0000000..f355a86 --- /dev/null +++ b/app/db/db_cate.go @@ -0,0 +1,15 @@ +package db + +import ( + "applet/app/db/model" + "xorm.io/xorm" +) + +func GetCate(eg *xorm.Engine, storeId string) *[]model.CommunityTeamCate { + var data []model.CommunityTeamCate + err := eg.Where("is_show=1 and uid=?", storeId).OrderBy("sort desc,id desc").Find(&data) + if err != nil { + return nil + } + return &data +} diff --git a/app/db/db_cloud_bundle.go b/app/db/db_cloud_bundle.go new file mode 100644 index 0000000..27a3f60 --- /dev/null +++ b/app/db/db_cloud_bundle.go @@ -0,0 +1,111 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/md" + "errors" + "fmt" + "github.com/gin-gonic/gin" + + "xorm.io/xorm" +) + +// GetCloudBundleByVersion is 根据版本 获取打包记录 +func GetCloudBundleByVersion(Db *xorm.Engine, appverison string, os, ep int) (*model.CloudBundle, error) { + m := new(model.CloudBundle) + has, err := Db.Where("version = ? and os = ? and template_during_audit<>'' and ep=?", appverison, os, ep).Get(m) + if err != nil { + return nil, err + } + if !has { + return nil, errors.New("not Found") + } + return m, nil +} + +// GetCloudBundleByVersionPlatform is 根据版本\os 获取打包记录 +func GetCloudBundleByVersionPlatform(Db *xorm.Engine, appverison string, platform string, appType string) (*model.CloudBundle, error) { + m := new(model.CloudBundle) + var tag int + var ep = 0 + if platform == "ios" { + tag = 2 + } else { + tag = 1 + } + if appType == "daogou" || appType == "" { + ep = 0 + } else { + ep = 1 + } + has, err := Db.Where("version = ? and os=? and ep=?", appverison, tag, ep).Desc("build_number").Get(m) + if err != nil { + return nil, err + } + if !has { + return nil, errors.New("not Found") + } + return m, nil +} + +// GetCloudBundleByVersionPlatformWithAudit is 根据版本\os 获取打包记录 +func GetCloudBundleByVersionPlatformWithAudit(Db *xorm.Engine, appverison string, platform string, appType string) (*model.CloudBundle, error) { + m := new(model.CloudBundle) + var tag int + var ep = 0 + if platform == "ios" { + tag = 2 + } else { + tag = 1 + } + if appType == "daogou" || appType == "" { + ep = 0 + } else { + ep = 1 + } + has, err := Db.Where("version = ? and os=? and ep=? and template_during_audit<>''", appverison, tag, ep).Desc("build_number").Get(m) + if err != nil { + return nil, err + } + if !has { + return nil, errors.New("not Found") + } + return m, nil +} +func GetCloudBuild(c *gin.Context, platform string) string { + appVersion := c.GetHeader("app_version_name") + ep := 0 + if c.GetString("app_type") != "" && c.GetString("app_type") != "daogou" { + ep = 1 + } + if platform == "" { + platform = c.GetHeader("platform") + } + + version := "" + os := 0 + switch platform { + case md.PLATFORM_ANDROID: + if ep == 1 { + version = SysCfgGet(c, "biz_android_audit_version") + } else { + version = SysCfgGet(c, "android_audit_version") + } + os = 1 + case md.PLATFORM_IOS: + if ep == 1 { + version = SysCfgGet(c, "biz_ios_audit_version") + } else { + version = SysCfgGet(c, "ios_audit_version") + } + os = 2 + } + var data model.CloudBundle + get, err := DBs[c.GetString("mid")].Where("is_auditing=1 and os=? and ep=? and version=?", os, ep, appVersion).Get(&data) + fmt.Println(get) + fmt.Println(err) + if data.Version != "" { + version = data.Version + } + return version +} diff --git a/app/db/db_coupon.go b/app/db/db_coupon.go new file mode 100644 index 0000000..3a49c63 --- /dev/null +++ b/app/db/db_coupon.go @@ -0,0 +1 @@ +package db diff --git a/app/db/db_goods.go b/app/db/db_goods.go new file mode 100644 index 0000000..42e151f --- /dev/null +++ b/app/db/db_goods.go @@ -0,0 +1,31 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils" + "xorm.io/xorm" +) + +func GetGoods(eg *xorm.Engine, arg map[string]string) *[]model.CommunityTeamGoods { + var data []model.CommunityTeamGoods + sess := eg.Where("store_type=0 and state=0") + if arg["cid"] != "" { + sess.And("cid=?", arg["cid"]) + } + limit := utils.StrToInt(arg["size"]) + start := (utils.StrToInt(arg["p"]) - 1) * limit + err := sess.OrderBy("sale_count desc,id desc").Limit(limit, start).Find(&data) + if err != nil { + return nil + } + return &data +} + +func GetGoodsSess(sess *xorm.Session, id int) *model.CommunityTeamGoods { + var data model.CommunityTeamGoods + get, err := sess.Where("id=?", id).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} diff --git a/app/db/db_goods_sku.go b/app/db/db_goods_sku.go new file mode 100644 index 0000000..f386b19 --- /dev/null +++ b/app/db/db_goods_sku.go @@ -0,0 +1,15 @@ +package db + +import ( + "applet/app/db/model" + "xorm.io/xorm" +) + +func GetGoodsSku(eg *xorm.Engine, goodsId string) *[]model.CommunityTeamSku { + var data []model.CommunityTeamSku + err := eg.Where("goods_id=?", goodsId).Find(&data) + if err != nil { + return nil + } + return &data +} diff --git a/app/db/db_order.go b/app/db/db_order.go new file mode 100644 index 0000000..29d4879 --- /dev/null +++ b/app/db/db_order.go @@ -0,0 +1,72 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils" + "xorm.io/xorm" +) + +func GetOrderEg(eg *xorm.Engine, oid string) *model.CommunityTeamOrder { + var data model.CommunityTeamOrder + get, err := eg.Where("oid=?", oid).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} +func GetOrder(sess *xorm.Session, oid string) *model.CommunityTeamOrder { + var data model.CommunityTeamOrder + get, err := sess.Where("oid=?", oid).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} +func GetOrderInfo(sess *xorm.Session, oid string) *[]model.CommunityTeamOrderInfo { + var data []model.CommunityTeamOrderInfo + err := sess.Where("oid=?", oid).Find(&data) + if err != nil { + return nil + } + return &data +} +func GetOrderInfoAllEg(eg *xorm.Engine, oid string) *[]model.CommunityTeamOrderInfo { + var data []model.CommunityTeamOrderInfo + err := eg.Where("oid=?", oid).Find(&data) + if err != nil { + return nil + } + return &data +} +func GetOrderInfoEg(eg *xorm.Engine, oid string) *model.CommunityTeamOrderInfo { + var data model.CommunityTeamOrderInfo + get, err := eg.Where("oid=?", oid).Asc("id").Get(&data) + if get == false || err != nil { + return nil + } + return &data +} + +func GetOrderList(eg *xorm.Engine, arg map[string]string) *[]model.CommunityTeamOrder { + var data []model.CommunityTeamOrder + sess := eg.Where("1=1") + if arg["uid"] != "" { + sess.And("uid=?", arg["uid"]) + } + if arg["state"] != "" { + sess.And("state=?", arg["state"]) + } + if arg["store_uid"] != "" { + sess.And("store_uid=?", arg["store_uid"]) + } + if arg["code"] != "" { + sess.And("code=?", arg["code"]) + } + limit := utils.StrToInt(arg["size"]) + start := (utils.StrToInt(arg["p"]) - 1) * limit + err := sess.OrderBy("id desc").Limit(limit, start).Find(&data) + if err != nil { + return nil + } + return &data +} diff --git a/app/db/db_store.go b/app/db/db_store.go new file mode 100644 index 0000000..7600c85 --- /dev/null +++ b/app/db/db_store.go @@ -0,0 +1,86 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils" + "fmt" + "xorm.io/xorm" +) + +func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string { + lng := utils.StrToFloat64(arg["lng"]) + lat := utils.StrToFloat64(arg["lat"]) + sel := ` *,sqrt( ( (( %f - lng)*PI()*12656*cos((( %f +lat)/2)*PI()/180)/180) * (( %f - lng)*PI()*12656*cos (((%f+lat)/2)*PI()/180)/180) ) + ( ((%f-lat)*PI()*12656/180) * ((%f-lat)*PI()*12656/180) ) ) AS km` + sel = fmt.Sprintf(sel, lng, lat, lng, lat, lat, lat) + sql := `select %s from community_team_store where %s %s` + where := "1=1" + if arg["parent_uid"] != "" { + where += " and store_type=2 and parent_uid=" + arg["parent_uid"] + } else if arg["uid"] != "" { + where += " and store_type=1 and uid=" + arg["parent_uid"] + } else { + where += " and store_type=" + arg["store_type"] + } + if arg["city"] != "" { + where += " and city='" + arg["city"] + "'" + } + if arg["name"] != "" { + where += " and name like '%" + arg["name"] + "'" + } + start := (utils.StrToInt(arg["p"]) - 1) * utils.StrToInt(arg["size"]) + group := " order by %s limit " + utils.IntToStr(start) + "," + arg["size"] + groupStr := "fan desc,km asc,id asc" + if arg["cid"] == "1" { + groupStr = "km asc,id asc" + } + group = fmt.Sprintf(group, groupStr) + sql = fmt.Sprintf(sql, sel, where, group) + fmt.Println(sql) + nativeString, _ := QueryNativeString(eg, sql) + return nativeString +} +func GetStoreLike(eg *xorm.Engine, arg map[string]string) []map[string]string { + lng := utils.StrToFloat64(arg["lng"]) + lat := utils.StrToFloat64(arg["lat"]) + sel := ` cts.*,sqrt( ( (( %f - cts.lng)*PI()*12656*cos((( %f +cts.lat)/2)*PI()/180)/180) * (( %f - cts.lng)*PI()*12656*cos (((%f+cts.lat)/2)*PI()/180)/180) ) + ( ((%f-cts.lat)*PI()*12656/180) * ((%f-cts.lat)*PI()*12656/180) ) ) AS km` + sel = fmt.Sprintf(sel, lng, lat, lng, lat, lat, lat) + sql := `select %s from community_team_store_like ctsl + left join community_team_store cts on ctsl.store_id=cts.id +where %s %s` + where := "cts.state=1" + if arg["parent_uid"] != "" { + where += " and cts.store_type=2 and cts.parent_uid=" + arg["parent_uid"] + } else if arg["uid"] != "" { + where += " and cts.store_type=1 and cts.uid=" + arg["parent_uid"] + } else { + where += " and cts.store_type=" + arg["store_type"] + } + if arg["city"] != "" { + where += " and cts.city='" + arg["city"] + "'" + } + if arg["name"] != "" { + where += " and cts.name like '%" + arg["name"] + "'" + } + start := (utils.StrToInt(arg["p"]) - 1) * utils.StrToInt(arg["size"]) + group := " order by km asc,cts.id asc limit " + utils.IntToStr(start) + "," + arg["size"] + sql = fmt.Sprintf(sql, sel, where, group) + fmt.Println(sql) + nativeString, _ := QueryNativeString(eg, sql) + return nativeString +} +func GetStoreId(sess *xorm.Session, id string) *model.CommunityTeamStore { + var data model.CommunityTeamStore + get, err := sess.Where("id=?", id).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} +func GetStoreIdEg(eg *xorm.Engine, id string) *model.CommunityTeamStore { + var data model.CommunityTeamStore + get, err := eg.Where("id=?", id).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} diff --git a/app/db/db_sys_cfg.go b/app/db/db_sys_cfg.go new file mode 100644 index 0000000..8eeb247 --- /dev/null +++ b/app/db/db_sys_cfg.go @@ -0,0 +1,120 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/md" + "applet/app/utils/cache" + "applet/app/utils/logx" + "fmt" + "xorm.io/xorm" +) + +// 系统配置get +func SysCfgGetAll(Db *xorm.Engine) (*[]model.SysCfg, error) { + var cfgList []model.SysCfg + if err := Db.Cols("key,val,memo").Find(&cfgList); err != nil { + return nil, logx.Error(err) + } + return &cfgList, nil +} + +// 获取一条记录 +func SysCfgGetOne(Db *xorm.Engine, key string) (*model.SysCfg, error) { + var cfgList model.SysCfg + if has, err := Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false { + return nil, logx.Error(err) + } + return &cfgList, nil +} +func SysCfgGetOneData(Db *xorm.Engine, key string) string { + var cfgList model.SysCfg + if has, err := Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false { + return "" + } + return cfgList.Val +} + +// 返回最后插入id +func SysCfgInsert(Db *xorm.Engine, key, val, memo string) bool { + cfg := model.SysCfg{Key: key, Val: val, Memo: memo} + _, err := Db.InsertOne(&cfg) + if err != nil { + logx.Error(err) + return false + } + return true +} + +func SysCfgUpdate(Db *xorm.Engine, key, val, memo string) bool { + cfg := model.SysCfg{Key: key, Val: val, Memo: memo} + _, err := Db.Where("`key`=?", key).Cols("val,memo").Update(&cfg) + if err != nil { + logx.Error(err) + return false + } + return true +} + +// 单条记录获取DB +func SysCfgGetWithDb(eg *xorm.Engine, masterId string, HKey string) string { + cacheKey := fmt.Sprintf(md.AppCfgCacheKey, masterId) + HKey + get, err := cache.GetString(cacheKey) + if err != nil || get == "" { + cfg, err := SysCfgGetOne(eg, HKey) + if err != nil || cfg == nil { + _ = logx.Error(err) + return "" + } + + // key是否存在 + cacheKeyExist := false + if cache.Exists(cacheKey) { + cacheKeyExist = true + } + + // 设置缓存 + _, err = cache.SetEx(cacheKey, cfg.Val, 30) + if err != nil { + _ = logx.Error(err) + return "" + } + if !cacheKeyExist { // 如果是首次设置 设置过期时间 + _, err := cache.Expire(cacheKey, md.CfgCacheTime) + if err != nil { + _ = logx.Error(err) + return "" + } + } + return cfg.Val + } + return get +} +func SysCfgGetWithStr(eg *xorm.Engine, masterId string, HKey string) string { + + cfg, err := SysCfgGetOne(eg, HKey) + if err != nil || cfg == nil { + _ = logx.Error(err) + return "" + } + return cfg.Val +} + +// 多条记录获取DB +func SysCfgFindWithDb(eg *xorm.Engine, masterId string, keys ...string) map[string]string { + res := map[string]string{} + //TODO::判断keys长度(大于10个直接查数据库) + if len(keys) > 10 { + cfgList, _ := SysCfgGetAll(eg) + if cfgList == nil { + return nil + } + for _, v := range *cfgList { + res[v.Key] = v.Val + } + } else { + for _, key := range keys { + res[key] = SysCfgGetWithDb(eg, masterId, key) + } + } + return res +} diff --git a/app/db/db_sys_mod.go b/app/db/db_sys_mod.go new file mode 100644 index 0000000..da57360 --- /dev/null +++ b/app/db/db_sys_mod.go @@ -0,0 +1,688 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/e" + "applet/app/utils" + "applet/app/utils/logx" + "errors" + "fmt" + "strconv" + "strings" + + "github.com/gin-gonic/gin" + "github.com/tidwall/gjson" + "xorm.io/xorm" +) + +// 返回所有, 不管是否显示 +func SysModFindAll(Db *xorm.Engine) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.Find(&m); err != nil { + return nil, err + } + return &m, nil +} + +// 查找主模块数据 +func SysModFindMain(Db *xorm.Engine) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.Where("mod_pid = 0 AND state = 1 AND position = 'base'"). + Asc("sort"). + Find(&m); err != nil { + return nil, err + } + return &m, nil +} + +// 用父ID查找子模块数据 +func SysModFindByPId(c *gin.Context, Db *xorm.Engine, id int) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.Where("state = 1").Where("mod_pid = ?", id). + Asc("sort"). + Find(&m); err != nil { + return nil, err + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + var ms []model.SysModule + modname_list := []string{"product", "search_result_taobao_item", "hot_rank_tab_view"} + for _, item := range *mm.(*[]model.SysModule) { + if item.ModName == "product_detail_title" { + if strings.Contains(item.Data, "tmall") == false { + item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"天猫\",\"type\":\"tmall\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1) + } + if strings.Contains(item.Data, "kuaishou") == false { + item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"快手\",\"type\":\"kuaishou\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1) + } + if strings.Contains(item.Data, "tikTok") == false { + item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"抖音\",\"type\":\"tikTok\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1) + } + } + + if strings.Contains(item.Data, "tmall") == false && utils.InArr(item.ModName, modname_list) { + item.Data = strings.Replace(item.Data, "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"index\":\"7\",\"type\":\"tmall\",\"platform_name\":\"天猫\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1) + item.Data = strings.Replace(item.Data, "{\"type\":\"kaola\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"type\":\"kaola\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"type\":\"tmall\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1) + } + if strings.Contains(item.Data, "优惠卷") { + item.Data = strings.Replace(item.Data, "优惠卷", "优惠券", -1) + } + item.Data = strings.ReplaceAll(item.Data, "\\/", "/") + item.Data = strings.ReplaceAll(item.Data, "\\u0026", "&") + + ms = append(ms, item) + } + return &ms, nil +} + +// 用父ID查找子模块数据 +func SysModFindByPIds(c *gin.Context, Db *xorm.Engine, ids ...int) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.In("mod_pid", ids).Where("state = 1"). + Asc("sort"). + Find(&m); err != nil { + return nil, err + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + var ms []model.SysModule + for _, item := range *mm.(*[]model.SysModule) { + //数据里面 + if strings.Contains(item.Data, "tmall") == false && item.ModName == "product" { + item.Data = strings.Replace(item.Data, "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"index\":\"7\",\"type\":\"tmall\",\"platform_name\":\"天猫\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1) + } + item = SysModDataByReplace(c, item) + ms = append(ms, item) + } + + return &ms, nil +} + +// 用IDS找对应模块数据 +func SysModFindByIds(Db *xorm.Engine, ids ...int) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.In("mod_id", ids).Where("state = 1"). + Cols("mod_id,mod_pid,mod_name,position,skip_identifier,title,subtitle,url,margin,aspect_ratio,icon,img,font_color,bg_img,bg_color,bg_color_t,badge,path,data,sort"). + Asc("sort").Find(&m); err != nil { + return nil, err + } + + return &m, nil +} + +// ID查找对应模块 +func SysModFindById(c *gin.Context, Db *xorm.Engine, id string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND mod_id = ?", id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + + return mm.(*model.SysModule), nil +} + +// SysModFindByTmpId is 根据模板 +func SysModFindByTmpId(c *gin.Context, Db *xorm.Engine, id string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND template_id = ?", id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +// Name查找对应模块 +func SysModFindByName(c *gin.Context, Db *xorm.Engine, name string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND mod_name = ?", name). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +// SysModFindByName is Name查找对应模块 +func SysModFindByNames(names ...string) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.In("mod_name", names).Where("state = 1"). + Cols("mod_id,mod_pid,mod_name,position,skip_identifier,title,subtitle,url,margin,aspect_ratio,icon,img,font_color,bg_img,bg_color,bg_color_t,badge,path,data,sort"). + Find(&m); err != nil { + return nil, err + } + return &m, nil +} + +// SysModFindByPosition is 根据位置查找对应模块 +func SysModFindByPosition(Db *xorm.Engine, positions ...string) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.In("position", positions).Where("state = 1").Find(&m); err != nil { + return nil, err + } + return &m, nil +} + +// 根据跳转标识 查找对应模块 +func SysModFindBySkipIdentifier(c *gin.Context, Db *xorm.Engine, name string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND skip_identifier = ?", name). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +func SysModFindBySkipIdentifierWithUid(c *gin.Context, Db *xorm.Engine, name string, uid int) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND skip_identifier = ? and uid=?", name, uid). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +// 根据跳转标识和位置 查找对应模块list +func SysModFindBySkipIdentifierAndPosition(c *gin.Context, Db *xorm.Engine, name string, position string) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.Where("state = 1 AND skip_identifier = ? AND position = ?", name, position). + Cols("mod_id,mod_pid,mod_name,position,skip_identifier,title,subtitle,url,margin,aspect_ratio,icon,img,font_color,bg_img,bg_color,bg_color_t,badge,path,data,sort"). + Asc("sort").Find(&m); err != nil { + return nil, err + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*[]model.SysModule), nil +} +func SysModFindByTempId(Db *xorm.Engine, ids []int) (*[]model.SysModule, error) { + var m []model.SysModule + if err := Db.Where("state = 1 ").In("template_id", ids).Asc("sort").Find(&m); err != nil { + return nil, err + } + return &m, nil +} + +// SysModFindByTemplateIDAndSkip is 根据模板id 查找对应模块 +func SysModFindByTemplateIDAndSkip(Db *xorm.Engine, id interface{}, skip string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND template_id = ? AND skip_identifier = ?", id, skip). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// SysModFindByTemplateIDAndPID is 根据模板id 和pid =0 查找父模块 +func SysModFindByTemplateIDAndPID(Db *xorm.Engine, id interface{}, pid interface{}) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_pid = ?", id, pid). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + + return &m, nil +} + +// SysModFindByTemplateIDAndModName is 根据模板id 和mod name 查找模块 +func SysModFindByTemplateIDAndModName(Db *xorm.Engine, id interface{}, modName string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = ?", id, modName). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +func SysModFindByTemplateIDAndModNameWithIds(Db *xorm.Engine, ids []int, modName string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.In("template_id", ids).And(" mod_name = ?", modName). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// SysModFindNavIsUsed 查找正在使用的底部导航栏模板 +func SysModFindNavIsUsedByPlatform(c *gin.Context, Db *xorm.Engine, platform string) (*model.SysModule, error) { + var ( + tm model.SysTemplate + m model.SysModule + ) + + mid := c.GetString("mid") + fmt.Println("===================================app_type", c.GetString("app_type")) + if c.GetString("app_type") != "" && c.GetString("app_type") != "daogou" { + var ( + tempType string + ) + switch c.GetString("app_type") { + case "o2o": + tempType = "o2o_store_bottomNav" + + } + + switch platform { + case "ios": + if has, err := Db.Where("is_use = 1 AND type = ? AND platform = 2 ", tempType). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + appVersion := GetCloudBuild(c, platform) + if c.GetHeader("app_version_name") == appVersion && c.GetHeader("app_version_name") != "" { + m, err := GetCloudBundleByVersion(Db, appVersion, 2, 1) + if err != nil { + return nil, logx.Warn(err) + } + tm.Id = int(gjson.Get(m.TemplateDuringAudit, "bottom").Int()) + } + case "android": + has, err := Db.Where("is_use = 1 AND type = ? AND platform = 2 ", tempType).Cols("id,uid,name,is_use,is_system").Get(&tm) + if err != nil || has == false { + return nil, logx.Warn(err) + } + fmt.Println("===================================app_type", tm) + + appVersion := GetCloudBuild(c, platform) + fmt.Println("===================================app_type", appVersion) + + if appVersion != "" && c.GetHeader("app_version_name") == appVersion { + m, err := GetCloudBundleByVersion(Db, appVersion, 1, 1) + if err != nil { + return nil, logx.Warn(err) + } + fmt.Println("===================================app_type", m) + + tm.Id = int(gjson.Get(m.TemplateDuringAudit, "bottom").Int()) + } + case "wx_applet", "wap": + if has, err := Db.Where("is_use = 1 AND type = ? AND platform = 4 ", tempType). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + case "baidu_applet": + if has, err := Db.Where("is_use = 1 AND type = ? AND platform = 4 ", tempType). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + case "toutiao_applet": + if has, err := Db.Where("is_use = 1 AND type = ? AND platform = 4 ", tempType). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + case "alipay_applet": + if has, err := Db.Where("is_use = 1 AND type = ? AND platform = 4 ", tempType). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + default: + return &m, errors.New("Platform not support") + } + if has, err := Db.Where("state = 1 AND template_id = ?", tm.Id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + + fmt.Println("===================================app_type", m) + if tempType == "o2o_store_bottomNav" { + bottomMap := make(map[string]interface{}) + utils.Unserialize([]byte(m.Data), &bottomMap) + list, ok := bottomMap["list"] + if ok { + m.Data = string(utils.MarshalJSONCamelCase2JsonSnakeCase(utils.SerializeStr(list))) + } + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + } + switch platform { + case "ios": + if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 2 "). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + appVersion := GetCloudBuild(c, platform) + if c.GetHeader("app_version_name") == appVersion && c.GetHeader("app_version_name") != "" { + m, err := GetCloudBundleByVersion(Db, appVersion, 2, 0) + if err != nil { + return nil, logx.Warn(err) + } + tm.Id = int(gjson.Get(m.TemplateDuringAudit, "bottom").Int()) + } + + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + case "android": + has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 2 ").Cols("id,uid,name,is_use,is_system").Get(&tm) + if err != nil || has == false { + return nil, logx.Warn(err) + } + appVersion := GetCloudBuild(c, platform) + if appVersion != "" && c.GetHeader("app_version_name") == appVersion { + m, err := GetCloudBundleByVersion(Db, appVersion, 1, 0) + if err != nil { + return nil, logx.Warn(err) + } + tm.Id = int(gjson.Get(m.TemplateDuringAudit, "bottom").Int()) + } + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + case "wx_applet", "wap": + wxAppletCfg := GetAppletKey(c, Db) + id := utils.StrToInt(wxAppletCfg["bottom_nav_css_id"]) + if id == 0 { + return nil, e.NewErr(400, "找不到模板配置") + } + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + case "baidu_applet": + if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + appVersion := SysCfgGetWithDb(Db, mid, "baidu_audit_version") + + if appVersion != "" && c.GetHeader("app_version_name") == appVersion { + m := SysCfgGetWithDb(Db, mid, "baidu_audit_template") + if m == "" { + return nil, e.NewErr(400, "找不到模板配置") + } + tm.Id = int(gjson.Get(m, "bottom").Int()) + } + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + case "toutiao_applet": + if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + appVersion := SysCfgGetWithDb(Db, mid, "tt_audit_version") + if appVersion != "" && c.GetHeader("app_version_name") == appVersion { + m := SysCfgGetWithDb(Db, mid, "tt_audit_template") + if m == "" { + return nil, errors.New("找不到模板配置") + } + tm.Id = int(gjson.Get(m, "bottom").Int()) + } + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + case "alipay_applet": + if has, err := Db.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + return nil, logx.Warn(err) + } + appVersion := SysCfgGetWithDb(Db, mid, "zfb_audit_version") + if appVersion != "" && c.GetHeader("app_version_name") == appVersion { + m := SysCfgGetWithDb(Db, mid, "zfb_audit_template") + if m == "" { + return nil, errors.New("找不到模板配置") + } + tm.Id = int(gjson.Get(m, "bottom").Int()) + } + if has, err := Db.Where("state = 1 AND template_id = ? AND mod_name = 'bottom_nav'", tm.Id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil + default: + return &m, errors.New("Platform not support") + } + +} + +// SysModFindBySkipIdentifierAndModName is 根据mod_name和位置 查找对应模块 +func SysModFindBySkipIdentifierAndModName(c *gin.Context, Db *xorm.Engine, name string, modName string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND skip_identifier = ? AND mod_name = ?", name, modName).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +// SysModFindByModName is 根据mod_name和位置 查找对应模块 +func SysModFindByModName(c *gin.Context, Db *xorm.Engine, modName string) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND mod_name = ?", modName).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +// 根据跳转标识和平台类型查找 +func SysModFindBySkipIdentifierAndPlatform(c *gin.Context, Db *xorm.Engine, name string, platform int) (*model.SysModule, error) { + var m model.SysModule + if has, err := Db.Where("state = 1 AND skip_identifier = ? AND platform = ?", name, platform).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + mm, err := sysModFormat(c, &m) + if err != nil { + return nil, err + } + return mm.(*model.SysModule), nil +} + +// 公共处理modData的链接 +func SysModDataByReplace(c *gin.Context, mod model.SysModule) model.SysModule { + //替换链接的一些参数 + if strings.Contains(mod.Data, "[replace_APP_URL]") { + mod.Data = strings.Replace(mod.Data, "[replace_APP_URL]", c.GetString("domain_wap_base"), -1) + } + if strings.Contains(mod.Data, "[replace_masterId]") { + mod.Data = strings.Replace(mod.Data, "[replace_masterId]", c.GetString("mid"), -1) + } + if strings.Contains(mod.Data, "[replace_platform]") { + mod.Data = strings.Replace(mod.Data, "[replace_platform]", c.GetHeader("Platform"), -1) + } + if strings.Contains(mod.Data, "优惠卷") { + mod.Data = strings.Replace(mod.Data, "优惠卷", "优惠券", -1) + } + if strings.Contains(mod.Data, "[replace_uid]") { + token := c.GetHeader("Authorization") + // 按空格分割 + parts := strings.SplitN(token, " ", 2) + if len(parts) == 2 && parts[0] == "Bearer" { + // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 + mc, _ := utils.ParseToken(parts[1]) + mod.Data = strings.Replace(mod.Data, "[replace_uid]", strconv.Itoa(mc.UID), -1) + } + } + //if strings.Contains(mod.Data, "\"child_category_id") && strings.Contains(mod.Data, "\"category_id") { + // //如果存在这两个字段,要换一下 + // mod.Data = strings.ReplaceAll(mod.Data, "\"category_id", "\"null_category_id") + // mod.Data = strings.ReplaceAll(mod.Data, "\"child_category_id", "\"category_id") + //} + return mod +} + +// 公共处理modData的链接 +func StringByReplace(c *gin.Context, skip string) string { + //替换链接的一些参数 + if strings.Contains(skip, "[replace_APP_URL]") { + skip = strings.Replace(skip, "[replace_APP_URL]", c.GetString("domain_wap_base"), -1) + } + if strings.Contains(skip, "[replace_masterId]") { + skip = strings.Replace(skip, "[replace_masterId]", c.GetString("mid"), -1) + } + if strings.Contains(skip, "[replace_platform]") { + skip = strings.Replace(skip, "[replace_platform]", c.GetHeader("Platform"), -1) + } + if strings.Contains(skip, "优惠卷") { + skip = strings.Replace(skip, "优惠卷", "优惠券", -1) + } + if strings.Contains(skip, "[replace_uid]") { + token := c.GetHeader("Authorization") + // 按空格分割 + parts := strings.SplitN(token, " ", 2) + if len(parts) == 2 && parts[0] == "Bearer" { + // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 + mc, _ := utils.ParseToken(parts[1]) + skip = strings.Replace(skip, "[replace_uid]", strconv.Itoa(mc.UID), -1) + } + } + + //if strings.Contains(mod.Data, "\"child_category_id") && strings.Contains(mod.Data, "\"category_id") { + // //如果存在这两个字段,要换一下 + // mod.Data = strings.ReplaceAll(mod.Data, "\"category_id", "\"null_category_id") + // mod.Data = strings.ReplaceAll(mod.Data, "\"child_category_id", "\"category_id") + //} + return skip +} + +// 公共处理modSkip的链接 首页弹窗 +func SysModSkipByReplace(c *gin.Context, mod *model.SysPopup) *model.SysPopup { + //替换链接的一些参数 + if strings.Contains(mod.Skip, "[replace_APP_URL]") { + mod.Skip = strings.Replace(mod.Skip, "[replace_APP_URL]", c.GetString("domain_wap_base"), -1) + } + if strings.Contains(mod.Skip, "[replace_masterId]") { + mod.Skip = strings.Replace(mod.Skip, "[replace_masterId]", c.GetString("mid"), -1) + } + if strings.Contains(mod.Skip, "[replace_platform]") { + mod.Skip = strings.Replace(mod.Skip, "[replace_platform]", c.GetHeader("Platform"), -1) + } + if strings.Contains(mod.Skip, "优惠卷") { + mod.Skip = strings.Replace(mod.Skip, "优惠卷", "优惠券", -1) + } + if strings.Contains(mod.Skip, "[replace_uid]") { + token := c.GetHeader("Authorization") + // 按空格分割 + parts := strings.SplitN(token, " ", 2) + if len(parts) == 2 && parts[0] == "Bearer" { + // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 + mc, _ := utils.ParseToken(parts[1]) + mod.Skip = strings.Replace(mod.Skip, "[replace_uid]", strconv.Itoa(mc.UID), -1) + } + } + + //if strings.Contains(mod.Data, "\"child_category_id") && strings.Contains(mod.Data, "\"category_id") { + // //如果存在这两个字段,要换一下 + // mod.Data = strings.ReplaceAll(mod.Data, "\"category_id", "\"null_category_id") + // mod.Data = strings.ReplaceAll(mod.Data, "\"child_category_id", "\"category_id") + //} + return mod +} + +// 公共处理modData的链接 +func SysModDataByReplaceSecond(c *gin.Context, mod *model.SysModule) *model.SysModule { + //替换链接的一些参数 + if strings.Contains(mod.Data, "[replace_APP_URL]") { + mod.Data = strings.Replace(mod.Data, "[replace_APP_URL]", c.GetString("domain_wap_base"), -1) + } + if strings.Contains(mod.Data, "[replace_masterId]") { + mod.Data = strings.Replace(mod.Data, "[replace_masterId]", c.GetString("mid"), -1) + } + if strings.Contains(mod.Data, "优惠卷") { + mod.Data = strings.Replace(mod.Data, "优惠卷", "优惠券", -1) + } + if strings.Contains(mod.Data, "[replace_uid]") { + token := c.GetHeader("Authorization") + // 按空格分割 + parts := strings.SplitN(token, " ", 2) + if len(parts) == 2 && parts[0] == "Bearer" { + // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 + mc, _ := utils.ParseToken(parts[1]) + if mc == nil { + mod.Data = strings.Replace(mod.Data, "[replace_uid]", "0", -1) + } else { + mod.Data = strings.Replace(mod.Data, "[replace_uid]", strconv.Itoa(mc.UID), -1) + } + } + } + + if mod.ModName == "product" && strings.Contains(mod.Data, "product_3") { + if strings.Contains(mod.Data, "second_kill_style") == false { + mod.Data = strings.ReplaceAll(mod.Data, "\"coupon_commission\"", "\"second_kill_style\":{\"btn_bg_img\":\"http://ossn.izhim.net/gift.png\",\"left_stock_text_color\":\"#D59E21\",\"buy_now_text_color\":\"#D59E21\",\"is_show\":\"0\"},\"coupon_commission\"") + } + } + mod.Data = strings.ReplaceAll(mod.Data, "\\/", "/") + mod.Data = strings.ReplaceAll(mod.Data, "\\u0026", "&") + + //if strings.Contains(mod.Data, "\"child_category_id") && strings.Contains(mod.Data, "\"category_id") { + // //如果存在这两个字段,要换一下 + // mod.Data = strings.ReplaceAll(mod.Data, "\"category_id", "\"null_category_id") + // mod.Data = strings.ReplaceAll(mod.Data, "\"child_category_id", "\"category_id") + //} + return mod +} diff --git a/app/db/db_sys_mod_format_img.go b/app/db/db_sys_mod_format_img.go new file mode 100644 index 0000000..bfeceb3 --- /dev/null +++ b/app/db/db_sys_mod_format_img.go @@ -0,0 +1,194 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils" + "errors" + "fmt" + "github.com/gin-gonic/gin" + "github.com/syyongx/php2go" + "regexp" + "strings" +) + +func sysModFormat(c *gin.Context, m interface{}) (interface{}, error) { + var mods []model.SysModule + protocol := SysCfgGet(c, "file_bucket_scheme") + domain := SysCfgGet(c, "file_bucket_host") + //fmt.Println(protocol, domain) + if protocol == "" || domain == "" { + return nil, errors.New("System configuration error, object storage protocol and domain name not found") + } + modname_list := []string{"product", "search_result_taobao_item", "hot_rank_tab_view"} + switch m.(type) { + case *[]model.SysModule: + ms := m.(*[]model.SysModule) + for _, item := range *ms { + item.Data = ReformatStr(protocol, domain, item.Data, c) + if item.ModName == "product_detail_title" { + if strings.Contains(item.Data, "tmall") == false { + item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"天猫\",\"type\":\"tmall\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1) + } + if strings.Contains(item.Data, "kuaishou") == false { + item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"快手\",\"type\":\"kuaishou\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1) + } + if strings.Contains(item.Data, "tikTok") == false { + item.Data = strings.Replace(item.Data, "\"platform_css\":[", "\"platform_css\":[{\"name\":\"抖音\",\"type\":\"tikTok\",\"text_color\":\"#FFFFFF\",\"bg_color\":\"#FF4242\"},", 1) + } + } + + if strings.Contains(item.Data, "tmall") == false && utils.InArr(item.ModName, modname_list) { + item.Data = strings.Replace(item.Data, "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"index\":\"6\",\"type\":\"kaola\",\"platform_name\":\"考拉\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"index\":\"7\",\"type\":\"tmall\",\"platform_name\":\"天猫\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1) + item.Data = strings.Replace(item.Data, "{\"type\":\"kaola\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", "{\"type\":\"kaola\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"},{\"type\":\"tmall\",\"provider_name_color\":\"#FFFFFF\",\"provider_bg_color\":\"#FF4242\"}", 1) + } + if strings.Contains(item.Data, "\"virtual_coin_pre_fix_name\":") == false && item.ModName == "product" { + item.Data = strings.ReplaceAll(item.Data, "\"virtual_coin_name\":", "\"virtual_coin_pre_fix_name\":\"返\",\"virtual_coin_name\":") + } + item = SysModDataByReplace(c, item) + + mods = append(mods, item) + } + return &mods, nil + case *model.SysModule: + m := m.(*model.SysModule) + m.Data = ReformatStr(protocol, domain, m.Data, c) + m = SysModDataByReplaceSecond(c, m) + return m, nil + case []*model.UserLevel: + ms := m.([]*model.UserLevel) + for _, item := range ms { + item.CssSet = ReformatStr(protocol, domain, item.CssSet, c) + } + return ms, nil + case []*model.SysPushUser: + ms := m.([]*model.SysPushUser) + for _, item := range ms { + item.SendData = ReformatStr(protocol, domain, item.SendData, c) + } + return ms, nil + case *model.SysPushUser: + m := m.(*model.SysPushUser) + m.SendData = ReformatStr(protocol, domain, m.SendData, c) + return m, nil + default: + return nil, nil + } +} + +func ReformatComm(str, protocol, domain string) string { + // PNG + replaceList := reformatImg(str) + l := removeDuplicateElement(replaceList) + for _, s := range l { + if strings.Contains(s, "http") { + continue + } + ss := s + s = strings.ReplaceAll(s, `\`, "") + s = strings.ReplaceAll(s, `"`, "") + s = php2go.Rawurlencode(s) + new := fmt.Sprintf("%s://%s/%s", protocol, domain, s) + //if skipHTTPPng(new) { + // continue + //} + str = strings.Replace(str, ss, `"`+new+`"`, -1) + } + return str +} +func ReformatStr(protocol, domain, str string, c *gin.Context) string { + //protocol := SysCfgGet(c, "file_bucket_scheme") + //domain := SysCfgGet(c, "file_bucket_host") + + // PNG + str = ReformatComm(str, protocol, domain) + return str +} + +// 正则匹配 +func reformatPng(data string) []string { + re, _ := regexp.Compile(`"([^\"]*.png")`) + list := re.FindAllString(data, -1) + return list +} +func reformatJpeg(data string) []string { + re, _ := regexp.Compile(`"([^\"]*.jpeg")`) + list := re.FindAllString(data, -1) + return list +} +func reformatMp4(data string) []string { + re, _ := regexp.Compile(`"([^\"]*.mp4")`) + list := re.FindAllString(data, -1) + return list +} + +func skipHTTPPng(data string) bool { + re, _ := regexp.Compile(`(http|https):\/\/([^\"]*.png)`) + return re.MatchString(data) +} + +// 正则匹配 +func reformatJPG(data string) []string { + re, _ := regexp.Compile(`"([^\"]*.jpg")`) + list := re.FindAllString(data, -1) + return list +} + +// 正则匹配 +func reformatGIF(data string) []string { + re, _ := regexp.Compile(`"([^\"]*.gif")`) + list := re.FindAllString(data, -1) + return list +} +func reformatImg(data string) []string { + re, _ := regexp.Compile(`"([^\"]*.(png|jpg|jpeg|gif|mp4)")`) + list := re.FindAllString(data, -1) + return list +} + +func removeDuplicateElement(addrs []string) []string { + result := make([]string, 0, len(addrs)) + temp := map[string]int{} + i := 1 + for _, item := range addrs { + if _, ok := temp[item]; !ok { + temp[item] = i + result = append(result, item) + continue + } + temp[item] = temp[item] + 1 + } + // fmt.Println(temp) + return result +} + +// 单条记录获取DB +func SysCfgGet(c *gin.Context, key string) string { + res := SysCfgFind(c, key) + //fmt.Println(res) + if _, ok := res[key]; !ok { + return "" + } + return res[key] +} + +// 多条记录获取 +func SysCfgFind(c *gin.Context, keys ...string) map[string]string { + eg := DBs[c.GetString("mid")] + masterId := c.GetString("mid") + res := map[string]string{} + //TODO::判断keys长度(大于10个直接查数据库) + if len(keys) > 10 { + cfgList, _ := SysCfgGetAll(eg) + if cfgList == nil { + return nil + } + for _, v := range *cfgList { + res[v.Key] = v.Val + } + } else { + for _, key := range keys { + res[key] = SysCfgGetWithDb(eg, masterId, key) + } + } + return res +} diff --git a/app/db/db_user.go b/app/db/db_user.go new file mode 100644 index 0000000..00dcf05 --- /dev/null +++ b/app/db/db_user.go @@ -0,0 +1,395 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils/logx" + "fmt" + "strings" + "xorm.io/xorm" +) + +// UserisExistByUsernameAndPassword is usernameAndPassword exist +func UserisExistByUsernameAndPassword(Db *xorm.Engine, username, password, zone string) (*model.User, error) { + var user model.User + sess := Db.Where("(username = ? or phone=?) ", username, username) + if zone != "" && zone != "86" { + sess = sess.And("zone=?", zone) + } + has, err := sess.Get(&user) + if err != nil || has == false { + return nil, err + } + return &user, nil +} + +// UserisExistByMobile is exist +func UserisExistByMobile(Db *xorm.Engine, n string) (bool, error) { + has, err := Db.Where("phone = ? and phone<>''", n).Exist(&model.User{}) + + if err != nil { + return false, err + } + return has, nil +} +func UserisFindByMobile(sess *xorm.Session, n string) *model.User { + var data model.User + has, err := sess.Where("phone = ? and phone<>''", n).Get(&data) + + if err != nil || has == false { + return nil + } + return &data +} + +// UserInByUIDByLevel is In查询 以及是否是有效用户 +func UserInByUIDByLevel(Db *xorm.Engine, ids []int, levelID interface{}) (*[]model.User, error) { + var m []model.User + if err := Db.In("uid", ids).Where("level = ?", levelID). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserFindByMobile search user by mobile +func UserFindByMobile(Db *xorm.Engine, mobile string) (*model.User, error) { + var m model.User + if has, err := Db.Where("(phone = ? OR uid = ?) AND delete_at = 0", mobile, mobile). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserFindExistByMobile search user by mobile +func UserFindExistByMobile(Db *xorm.Engine, mobile string) (*model.User, bool, error) { + var m model.User + has, err := Db.Where("(phone = ? OR uid = ?) AND delete_at = 0", mobile, mobile).Get(&m) + if err != nil { + logx.Infof("UserFindExistByMobile err") + return nil, false, logx.Warn(err) + } + return &m, has, nil +} + +// UserFindByMobile search user by mobile +func UserFindByMobileAll(Db *xorm.Engine, mobile string) (*model.User, error) { + var m model.User + if has, err := Db.Where("(phone = ? OR uid = ?)", mobile, mobile). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserGetByMobileIgnoreDelete search user by mobile ignore delete +func UserGetByMobileIgnoreDelete(Db *xorm.Engine, mobile, zone string) (*model.User, bool, error) { + m := new(model.User) + sess := Db.Where("phone = ?", mobile) + if zone != "" && zone != "86" { + sess = sess.And("zone=?", zone) + } + has, err := sess.Get(m) + if err != nil { + return nil, false, logx.Warn(err) + } + return m, has, nil +} + +// UsersFindByMobileLike search users by mobile +func UsersFindByMobileLike(Db *xorm.Engine, mobile string) (*[]model.User, error) { + var m []model.User + if err := Db.Where("phone like ?", "%"+mobile+"%"). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersFindByNickNameLike search users by nickname +func UsersFindByNickNameLike(Db *xorm.Engine, nickname string) (*[]model.User, error) { + var m []model.User + if err := Db.Where("nickname like ?", "%"+nickname+"%"). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UsersFindByInviteCode(Db *xorm.Engine, nickname string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("invite_code like ? or custom_invite_code like ?", "%"+strings.ToLower(nickname)+"%", "%"+strings.ToLower(nickname)+"%"). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UsersFindByInviteCodeMust(Db *xorm.Engine, nickname string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("invite_code = ? or custom_invite_code = ?", strings.ToLower(nickname), strings.ToLower(nickname)). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersInByIds is 根据ids 查找users +func UsersInByIds(Db *xorm.Engine, ids []int, limit, start int) (*[]model.User, error) { + var m []model.User + if limit == 0 && start == 0 { + if err := Db.In("uid", ids). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.In("uid", ids).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersInByIdsWhereLv is 根据ids和 lv会员等级 查找users +func UsersInByIdsWhereLv(Db *xorm.Engine, ids []int, lv interface{}, limit, start int) (*[]model.User, error) { + var m []model.User + if limit == 0 && start == 0 { + if err := Db.Where("level = ?", lv).In("uid", ids). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("level = ?", lv).In("uid", ids).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersInByIdsByAscWhereLv is 根据ids和 lv会员等级 查找users 升排序 +func UsersInByIdsByAscWhereLv(Db *xorm.Engine, ids []int, lv interface{}, limit, start int, c string) (*[]model.User, error) { + var m []model.User + if limit == 0 && start == 0 { + if err := Db.Where("level = ?", lv).In("uid", ids).Asc(c). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("level = ?", lv).In("uid", ids).Asc(c).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersInByIdsByDescWhereLv is 根据ids和 lv会员等级 查找users 降排序 +func UsersInByIdsByDescWhereLv(Db *xorm.Engine, ids []int, lv interface{}, limit, start int, c string) (*[]model.User, error) { + var m []model.User + if limit == 0 && start == 0 { + if err := Db.Where("level = ?", lv).In("uid", ids).Desc(c). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("level = ?", lv).In("uid", ids).Desc(c).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserFindByPhoneOrUsername(Db *xorm.Engine, mobile string) (*model.User, error) { + var m model.User + if has, err := Db.Where("(phone = ? or username=?) AND delete_at = 0", mobile, mobile). + Get(&m); err != nil || has == false { + return nil, err + } + return &m, nil +} + +// UserFindByArkidUserName search user by mobile +func UserFindByArkidUserName(Db *xorm.Engine, name string) (*model.User, error) { + var m model.User + if has, err := Db.Where("username = ?", name). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserFindByID is find user byid +func UserFindByID(Db *xorm.Engine, id interface{}) (*model.User, error) { + var m model.User + if has, err := Db.Where("uid = ?", id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserFindByIDWithSession(sess *xorm.Session, id interface{}) (*model.User, error) { + var m model.User + if has, err := sess.Where("uid = ?", id). + Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +func UserFindByIDs(Db *xorm.Engine, uids []int) (*[]model.User, error) { + var m []model.User + if err := Db.In("uid", uids).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +func UserFindByall(Db *xorm.Engine) (*[]model.User, error) { + var m []model.User + if err := Db.Where("uid>0").Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserFindByIDsToStr(Db *xorm.Engine, uids []string) (*[]model.User, error) { + var m []model.User + if err := Db.In("uid", uids).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserFindByIsSet(Db *xorm.Engine, limit, start int) ([]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("is_set=? and parent_uid=0 and uid>0", 0).Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return m, nil +} +func UserFindByParentUid(Db *xorm.Engine, parentUid int) ([]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("parent_uid=?", parentUid).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return m, nil +} + +// UsersInByIdsByDesc is 根据某列 降序 +func UsersInByIdsByDesc(Db *xorm.Engine, ids []int, limit, start int, c string) (*[]model.User, error) { + var m []model.User + if limit == 0 && start == 0 { + if err := Db.In("uid", ids).Desc(c). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.In("uid", ids).Desc(c).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersInByIdsByAsc is 根据某列 升序 +func UsersInByIdsByAsc(Db *xorm.Engine, ids []int, limit, start int, c string) (*[]model.User, error) { + var m []model.User + if limit == 0 && start == 0 { + if err := Db.In("uid", ids).Asc(c). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.In("uid", ids).Asc(c).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserInsert is insert user +func UserInsert(Db *xorm.Engine, user *model.User) (int64, error) { + affected, err := Db.Insert(user) + if err != nil { + return 0, err + } + return affected, nil +} + +// UserIsExistByMobile is mobile exist +func UserIsExistByMobile(Db *xorm.Engine, mobile string) (bool, error) { + //fmt.Println(mobile) + has, err := Db.Where("phone = ? OR uid = ?", mobile, mobile).Exist(&model.User{}) + fmt.Println(has, mobile) + if err != nil { + return false, err + } + return has, nil +} + +// UserIsExistByID is mobile exist by id +func UserIsExistByID(Db *xorm.Engine, id string) (bool, error) { + has, err := Db.Where("uid = ?", id).Exist(&model.User{}) + if err != nil { + return false, err + } + return has, nil +} + +// UserUpdate is update user +func UserUpdate(Db *xorm.Engine, uid interface{}, user *model.User, forceColums ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceColums != nil { + affected, err = Db.Where("uid=?", uid).Cols(forceColums...).Update(user) + } else { + affected, err = Db.Where("uid=?", uid).Update(user) + } + if err != nil { + return 0, err + } + return affected, nil +} + +func UserUpdateWithSession(Db *xorm.Session, uid interface{}, user *model.User, forceColums ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceColums != nil { + affected, err = Db.Where("uid=?", uid).Cols(forceColums...).Update(user) + } else { + affected, err = Db.Where("uid=?", uid).Update(user) + } + if err != nil { + return 0, err + } + return affected, nil +} + +func UpdateUserFinValid() { + +} + +// UserDelete is delete user +func UserDelete(Db *xorm.Engine, uid interface{}) (int64, error) { + return Db.Where("uid = ?", uid).Delete(model.User{}) +} + +func UserDeleteWithSess(sess *xorm.Session, uid interface{}) (int64, error) { + return sess.Where("uid = ?", uid).Delete(model.User{}) +} + +func UserProfileCheckInviteCode(eg *xorm.Engine, uid int, inviteCode string) bool { + var data model.UserProfile + get, err := eg.Where("invite_code=? or custom_invite_code=?", inviteCode, inviteCode).Get(&data) + if get == false || err != nil { + return false + } + if uid == data.Uid { + return false + } + return true +} diff --git a/app/db/db_user_fin_flow.go b/app/db/db_user_fin_flow.go new file mode 100644 index 0000000..253b061 --- /dev/null +++ b/app/db/db_user_fin_flow.go @@ -0,0 +1,103 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils/logx" + + "xorm.io/xorm" +) + +// GetFinUserFlowByID is 用户流水记录 +func GetFinUserFlowByID(Db *xorm.Engine, id interface{}) (*model.FinUserFlow, error) { + var m model.FinUserFlow + if has, err := Db.Where("id = ?", id).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + return &m, nil +} + +// GetFinUserFlowByID is 用户流水记录 +func GetFinUserFlowByUIDANDOID(Db *xorm.Engine, types, uid, ordId string) (*model.FinUserFlow, error) { + var m model.FinUserFlow + if has, err := Db.Where("uid = ? and ord_id = ? and type = ?", uid, ordId, types).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + return &m, nil +} +func GetFinUserFlowByUIDANDOIDTOORDTYPE(Db *xorm.Engine, types, uid, ordId string) (*model.FinUserFlow, error) { + var m model.FinUserFlow + if has, err := Db.Where("uid = ? and ord_id = ? and ord_type = ?", uid, ordId, types).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + return &m, nil +} + +// GetFinUserFlowByID is 用户流水记录 +func GetFinUserFlowByOIDANDORDTYPE(Db *xorm.Engine, types, ordId, ordType string) (*model.FinUserFlow, error) { + var m model.FinUserFlow + if has, err := Db.Where("ord_id = ? and ord_action = ? and ord_type= ?", ordId, types, ordType).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + return &m, nil +} + +//FinUserFlowInsertOne is 插入一条流水记录 +func FinUserFlowInsertOne(Db *xorm.Engine, m *model.FinUserFlow) error { + _, err := Db.InsertOne(m) + if err != nil { + return err + } + return nil +} + +//FinUserFlowInsertOne is 插入一条流水记录 +func FinUserFlowWithSessionInsertOne(session *xorm.Session, m *model.FinUserFlow) error { + _, err := session.InsertOne(m) + if err != nil { + return err + } + return nil +} + +// FinUserFlowByUID is 用户流水 +func FinUserFlowInputByUID(Db *xorm.Engine, uid interface{}, time string, limit, start int) ([]*model.FinUserFlow, error) { + var m []*model.FinUserFlow + if err := Db.Where("uid = ? AND create_at like ? and (amount> ? or ord_type=?)", uid, time+"%", "0", "fast_return").In("type", "0").Desc("create_at").Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return m, nil +} +func FinUserFlowInputByUIDWithAmount(Db *xorm.Engine, uid interface{}, types, before_amount, after_amount string) (*model.FinUserFlow, error) { + var m model.FinUserFlow + if has, err := Db.Where("uid = ? and ord_type='withdraw' and ord_action = ? and before_amount= ? and after_amount = ?", uid, types, before_amount, after_amount).Get(&m); err != nil || !has { + return nil, logx.Warn(err) + } + return &m, nil +} + +// FinUserFlowByUIDByOrderAction is 用户流水 by OrderAction +func FinUserFlowInputByUIDByOrderActionByTime(Db *xorm.Engine, uid, oa interface{}, time string, limit, start int) ([]*model.FinUserFlow, error) { + var m []*model.FinUserFlow + if err := Db.Where("uid = ? AND create_at like ? and amount>0", uid, time+"%").In("ord_action", oa).Desc("create_at").Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return m, nil +} + +// FinUserFlowByUIDByOrderAction is 用户流水 by OrderAction +func FinUserFlowInputByUIDByTypeByTime(Db *xorm.Engine, uid int, time string, limit, start int) ([]*model.FinUserFlow, error) { + var m []*model.FinUserFlow + if err := Db.Where("uid = ? AND type = 1 AND create_at like ? and (amount>0 or ord_type=? or ord_action=?)", uid, time+"%", "fast_return", 101).Desc("create_at").Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return m, nil +} + +// 在事务中使用,插入一条流水记录 +func FinUserFlowInsertOneWithSession(session *xorm.Session, m *model.FinUserFlow) error { + _, err := session.InsertOne(m) + if err != nil { + return err + } + return nil +} diff --git a/app/db/db_user_level.go b/app/db/db_user_level.go new file mode 100644 index 0000000..5169251 --- /dev/null +++ b/app/db/db_user_level.go @@ -0,0 +1,226 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/e" + "applet/app/utils/logx" + "github.com/gin-gonic/gin" + "xorm.io/xorm" +) + +//UserLevelByID is 根据用户id 获取对应的等级信息 +func UserLevelByID(Db *xorm.Engine, id interface{}) (*model.UserLevel, error) { + m := new(model.UserLevel) + has, err := Db.Where("id = ?", id).Get(m) + if err != nil { + return nil, logx.Warn(err) + } + if !has { + return nil, logx.Error("Not found") + } + + return m, nil +} +func UserLevelByIDWithSession(sess *xorm.Session, id interface{}) (*model.UserLevel, error) { + m := new(model.UserLevel) + has, err := sess.Where("id = ?", id).Get(m) + if err != nil { + return nil, logx.Warn(err) + } + if !has { + return nil, logx.Error("Not found") + } + + return m, nil +} + +//UserLevelTop is 查询最高的等级 +func UserLevelTop(Db *xorm.Engine) (*model.UserLevel, error) { + m := new(model.UserLevel) + has, err := Db.OrderBy("level_weight DESC").Get(m) + if err != nil { + return nil, logx.Warn(err) + } + if !has { + return nil, logx.Error("Not found") + } + + return m, nil +} + +//UserLevelNext is 查询下一等级 +func UserLevelNext(Db *xorm.Engine, curLevelWeight int) (*model.UserLevel, error) { + m := new(model.UserLevel) + has, err := Db.Where("level_weight > ? and before_hide=?", curLevelWeight, 0).OrderBy("level_weight ASC").Get(m) + if err != nil { + return nil, logx.Warn(err) + } + if !has { + return nil, logx.Error("Not found") + } + + return m, nil +} + +// UserLevelByWeight is 根据权重获取对应的等级 +func UserLevelByWeight(Db *xorm.Engine, w interface{}) (*model.UserLevel, error) { + m := new(model.UserLevel) + has, err := Db.Where("level_weight = ?", w).Get(m) + if err != nil { + return nil, logx.Warn(err) + } + if !has { + return nil, logx.Warn("Not found") + } + return m, nil +} + +//UserLevelInIDescByWeight is In 查询获取 权重最低 对应等级 +func UserLevelInIDescByWeightLow(Db *xorm.Engine) ([]*model.UserLevel, error) { + var ms []*model.UserLevel + if err := Db.Asc("level_weight").Limit(1).Find(&ms); err != nil { + return nil, err + } + return ms, nil + +} +func UserLevelInIDescByWeightLowWithOne(Db *xorm.Engine) (*model.UserLevel, error) { + var ms model.UserLevel + has, err := Db.Asc("level_weight").Get(&ms) + if err != nil { + return nil, err + } + if has == false { + return nil, e.NewErr(400, "等级不存在") + } + return &ms, nil + +} +func UserLevelInIDescByWeightDescWithOne(Db *xorm.Engine) (*model.UserLevel, error) { + var ms model.UserLevel + has, err := Db.Desc("level_weight").Get(&ms) + if err != nil { + return nil, err + } + if has == false { + return nil, e.NewErr(400, "等级不存在") + } + return &ms, nil + +} +func UserLevelByWeightNext(Db *xorm.Engine, levelWeight int) (*model.UserLevel, error) { + var ms model.UserLevel + if has, err := Db.Where("level_weight>? and is_use=? and before_hide=?", levelWeight, 1, 0).Asc("level_weight").Get(&ms); err != nil || has == false { + return nil, err + } + return &ms, nil + +} +func UserLevelByWeightMax(Db *xorm.Engine) (*model.UserLevel, error) { + var ms model.UserLevel + if has, err := Db.Where("is_use=? and before_hide=?", 1, 0).Desc("level_weight").Get(&ms); err != nil || has == false { + return nil, err + } + return &ms, nil + +} + +//UserLevelInIDescByWeight is In 查询获取对应等级 根据权重排序 +func UserLevelInIDescByWeight(Db *xorm.Engine, ids []int) ([]*model.UserLevel, error) { + var ms []*model.UserLevel + if err := Db.In("id", ids).Desc("level_weight").Find(&ms); err != nil { + return nil, err + } + return ms, nil + +} +func UserLevelIDescByWeight(Db *xorm.Engine, id int) (*model.UserLevel, error) { + var ms model.UserLevel + if has, err := Db.Where("id=?", id).Get(&ms); err != nil || has == false { + return nil, err + } + return &ms, nil + +} + +// UserLevlAll is 获取所有开启等级并且升序返回 +func UserLevlAll(c *gin.Context, Db *xorm.Engine) ([]*model.UserLevel, error) { + var m []*model.UserLevel + err := Db.Where("is_use = ?", 1).Asc("level_weight").Find(&m) + if err != nil { + return nil, logx.Warn(err) + } + + mm, err := sysModFormat(c, m) + if err != nil { + return nil, err + } + return mm.([]*model.UserLevel), nil +} +func UserLevlAllNew(c *gin.Context, Db *xorm.Engine) ([]*model.UserLevel, error) { + var m []*model.UserLevel + err := Db.Where("is_use = ? and before_hide=?", 1, 0).Asc("level_weight").Find(&m) + if err != nil { + return nil, logx.Warn(err) + } + + mm, err := sysModFormat(c, m) + if err != nil { + return nil, err + } + return mm.([]*model.UserLevel), nil +} + +// UserLevlEgAll is 获取所有开启等级并且升序返回 +func UserLevlEgAll(Db *xorm.Engine) ([]*model.UserLevel, error) { + var m []*model.UserLevel + err := Db.Where("is_use = ?", 1).Asc("level_weight").Find(&m) + if err != nil { + return nil, logx.Warn(err) + } + return m, nil +} +func UserFindByLevel(eg *xorm.Engine, level int) []model.User { + var data []model.User + eg.Where("level=?", level).Find(&data) + return data +} + +// UserLevlAllByWeight is 获取所有等级并且权重升序返回 +func UserLevlAllByWeight(c *gin.Context, Db *xorm.Engine) ([]*model.UserLevel, error) { + var m []*model.UserLevel + err := Db.Asc("level_weight").Find(&m) + if err != nil { + return nil, logx.Warn(err) + } + + mm, err := sysModFormat(c, m) + if err != nil { + return nil, err + } + return mm.([]*model.UserLevel), nil +} +func UserLevelByAllMap(Db *xorm.Engine) map[int]*model.UserLevel { + var maps = make(map[int]*model.UserLevel, 0) + var m []*model.UserLevel + err := Db.Where("is_use = ?", 1).Asc("level_weight").Find(&m) + if err != nil { + return maps + } + for _, v := range m { + maps[v.Id] = v + } + return maps +} +func UserLevelByNotHideAllMap(Db *xorm.Engine) map[int]*model.UserLevel { + var maps = make(map[int]*model.UserLevel, 0) + var m []*model.UserLevel + err := Db.Where("is_use = ? and before_hide=?", 1, 0).Asc("level_weight").Find(&m) + if err != nil { + return maps + } + for _, v := range m { + maps[v.Id] = v + } + return maps +} diff --git a/app/db/db_user_profile.go b/app/db/db_user_profile.go new file mode 100644 index 0000000..7f1c3c5 --- /dev/null +++ b/app/db/db_user_profile.go @@ -0,0 +1,578 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/logx" + "errors" + "xorm.io/xorm" +) + +// UserProfileFindByArkID is get userprofile by arkid +func UserProfileFindByArkID(Db *xorm.Engine, id interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("arkid_uid = ?", id).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByArkToken(Db *xorm.Engine, id interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("arkid_token<>'' and arkid_token = ?", id).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByInviteCode is get userprofile by InviteCode +func UserProfileFindByInviteCode(Db *xorm.Engine, code string) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("invite_code = ?", code).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByInviteCode is get userprofile by InviteCode +func UserProfileFindByCustomInviteCode(Db *xorm.Engine, code string) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("custom_invite_code = ?", code).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByInviteCodes is get userprofile by InviteCode +func UserProfileFindByInviteCodes(Db *xorm.Engine, codes ...string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.In("invite_code", codes).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByAll(Db *xorm.Engine) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByCustomInviteCodes is get userprofile by CustomInviteCode +func UserProfileFindByCustomInviteCodes(Db *xorm.Engine, codes ...string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.In("custom_invite_code", codes).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByID search user_profile by userid +func UserProfileFindByID(Db *xorm.Engine, id interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("uid = ?", id).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindAll(Db *xorm.Engine) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("invite_code='' and uid>=0").Asc("uid").Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByIDsToStr(Db *xorm.Engine, uids []string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.In("uid", uids).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByIDSess(sess *xorm.Session, id interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := sess.Where("uid = ?", id).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByPID(Db *xorm.Engine, id interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("parent_uid = ?", id).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileOrderByNew 找最新的记录 +func UserProfileOrderByNew(Db *xorm.Engine) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("invite_code != ''").OrderBy("uid desc").Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByTaobaoOpenID search user_profile ByTaobaoOpenID +func UserProfileFindByTaobaoOpenID(Db *xorm.Engine, openid interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("third_party_taobao_oid = ?", openid).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByQQOpenID search user_profile ByTaobaoOpenID +func UserProfileFindByQQOpenID(Db *xorm.Engine, openid interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("third_party_qq_openid = ?", openid).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByAppleToken search user_profile AppleToken +func UserProfileFindByAppleToken(Db *xorm.Engine, token interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("third_party_apple_token = ?", token).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByWeChatOpenID search user_profile By 微信openid +func UserProfileFindByWeChatOpenID(Db *xorm.Engine, openid interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("third_party_wechat_openid = ?", openid).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByWeChatMiniOpenID search user_profile By 小程序openid +func UserProfileFindByWeChatMiniOpenID(Db *xorm.Engine, openid interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := Db.Where("third_party_wechat_mini_openid = ?", openid).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileFindByWeChatUnionID search user_profile By 微信唯一id +func UserProfileFindByWeChatUnionID(Db *xorm.Engine, openid interface{}) (*model.UserProfile, error) { + if openid == "" { + return nil, errors.New("不存在") + } + var m model.UserProfile + if has, err := Db.Where("third_party_wechat_unionid = ? ", openid).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByAccAlipay(Db *xorm.Engine, accAlipay string, uid int) (bool, error) { + if has, err := Db.Where("acc_alipay = ? and uid <>?", accAlipay, uid).Exist(&model.UserProfile{}); err != nil || has == false { + return false, logx.Warn(err) + } + return true, nil +} + +// UserProfileisExistByTaobaoOpenID is exist by Taobao +func UserProfileisExistByTaobaoOpenID(Db *xorm.Engine, openid string) (bool, error) { + has, err := Db.Where("third_party_taobao_oid = ?", openid).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} +func UserProfileisThirdPartyWechatH5Openid(Db *xorm.Engine, openid string) (*model.UserProfile, error) { + var user model.UserProfile + has, err := Db.Where("third_party_wechat_h5_openid = ? and third_party_wechat_h5_openid<>''", openid).Get(&user) + + if err != nil || has == false { + return nil, err + } + return &user, nil +} + +// UserProfileisExistByQQOpenID is exist by QQ openid +func UserProfileisExistByQQOpenID(Db *xorm.Engine, openid string) (bool, error) { + has, err := Db.Where("third_party_qq_openid = ?", openid).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileisExistByAppleToken is exist by apple token +func UserProfileisExistByAppleToken(Db *xorm.Engine, token string) (bool, error) { + has, err := Db.Where("third_party_apple_token = ?", token).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileisExistByWeChatOpenID is exist by Wecaht openid +func UserProfileisExistByWeChatOpenID(Db *xorm.Engine, openid string) (bool, error) { + has, err := Db.Where("third_party_wechat_openid = ?", openid).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileisExistByWeChatMiniOpenID is exist by Wecaht openid +func UserProfileisExistByWeChatMiniOpenID(Db *xorm.Engine, openid string) (bool, error) { + has, err := Db.Where("third_party_wechat_mini_openid = ?", openid).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileisExistByWeChatUnionID is exist by Wecaht openid +func UserProfileisExistByWeChatUnionID(Db *xorm.Engine, openid string) (bool, error) { + if openid == "" { + return false, errors.New("不存在") + } + has, err := Db.Where("third_party_wechat_unionid = ? ", openid).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileisExistByRelationIDAndSpecialID is exist by RelationIdAndSpecialId +func UserProfileisExistByRelationIDAndSpecialID(Db *xorm.Engine, SpecialID, RelationID int64) (bool, error) { + has, err := Db.Where("acc_taobao_self_id = ? AND acc_taobao_share_id = ?", SpecialID, RelationID).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileisExistBySpecialID is exist by SpecialId +func UserProfileisExistBySpecialID(Db *xorm.Engine, SpecialID string) (bool, error) { + has, err := Db.Where("acc_taobao_self_id = ? ", SpecialID).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileCountByRelationID 统计relationID数量 +func UserProfileCountByRelationID(Db *xorm.Engine) (total int64, err error) { + relate := new(model.UserProfile) + total, err = Db.Where("acc_taobao_share_id > 0").Count(relate) + return +} + +// UserProfileCountByPUID 统计直推下级数量 +func UserProfileCountByPUID(Db *xorm.Engine, puid int) (total int64, err error) { + relate := new(model.UserProfile) + total, err = Db.Where("parent_uid = ?", puid).Count(relate) + return +} + +// UserProfileisExistByRelationID is exist by RelationID +func UserProfileisExistByRelationID(Db *xorm.Engine, RelationID string) (bool, error) { + has, err := Db.Where("acc_taobao_share_id = ? ", RelationID).Exist(&model.UserProfile{}) + + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileFindByIDs is in sql by ids +func UserProfileFindByIDs(Db *xorm.Engine, uids ...int) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.In("uid", uids).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileFindByIDsStr(Db *xorm.Engine, uids []string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.In("uid", uids).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileByPuid search user_profile by parent_uid +func UserProfileByPuid(Db *xorm.Engine, puid interface{}) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("parent_uid = ?", puid).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserProfileByPuidWithSess(sess *xorm.Session, puid interface{}) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := sess.Where("parent_uid = ?", puid).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersProfileInByIds is profiles by ids +func UsersProfileInByIds(Db *xorm.Engine, ids []int, limit, start int) (*[]model.UserProfile, error) { + var m []model.UserProfile + if limit == 0 && start == 0 { + if err := Db.In("uid", ids).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.In("uid", ids).Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersProfileInByUIDByisVerify is In查询 以及是否是有效用户 +func UsersProfileInByUIDByisVerify(Db *xorm.Engine, ids []int, isVerify interface{}) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.In("uid", ids).Where("is_verify = ?", isVerify). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersProfileInByIdsByDesc is 根据某列 降序 +func UsersProfileInByIdsByDesc(Db *xorm.Engine, ids []int, limit, start int, c string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if limit == 0 && start == 0 { + if err := Db.In("uid", ids).Desc(c).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.In("uid", ids).Desc(c).Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersProfileInByIdsByAsc is 根据某列 升序 +func UsersProfileInByIdsByAsc(Db *xorm.Engine, ids []int, limit, start int, c string) (*[]model.UserProfile, error) { + var m []model.UserProfile + if limit == 0 && start == 0 { + if err := Db.In("uid", ids).Asc(c).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.In("uid", ids).Asc(c).Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UsersProfileByAll is 查询所有分享id大于0的数据 +func UsersProfileByTaobaoShateIdNotNull(Db *xorm.Engine, limit, start int) (*[]model.UserProfile, error) { + var m []model.UserProfile + if err := Db.Where("acc_taobao_share_id > 0").Limit(limit, start).Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserProfileIsExistByUserID is mobile exist +func UserProfileIsExistByUserID(Db *xorm.Engine, id int) (bool, error) { + has, err := Db.Where("uid = ?", id).Exist(&model.UserProfile{}) + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileIsExistByInviteCode is exist ? +func UserProfileIsExistByInviteCode(Db *xorm.Engine, code string) (bool, error) { + has, err := Db.Where("invite_code = ?", code).Exist(&model.UserProfile{}) + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileIsExistByCustomInviteCode is exist ? +func UserProfileIsExistByCustomInviteCode(Db *xorm.Engine, code string) (bool, error) { + has, err := Db.Where("custom_invite_code = ?", code).Exist(&model.UserProfile{}) + if err != nil { + return false, err + } + return has, nil +} + +// UserProfileInsert is insert user +func UserProfileInsert(Db *xorm.Engine, userProfile *model.UserProfile) (int64, error) { + affected, err := Db.Insert(userProfile) + if err != nil { + return 0, err + } + return affected, nil +} + +// UserProfileUpdate is update userprofile +func UserProfileUpdate(Db *xorm.Engine, uid interface{}, userProfile *model.UserProfile, forceCols ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceCols != nil { + affected, err = Db.Where("uid=?", uid).Cols(forceCols...).Update(userProfile) + } else { + affected, err = Db.Where("uid=?", uid).AllCols().Omit("fin_valid,parent_uid").Update(userProfile) + } + + if err != nil { + return 0, logx.Warn(err) + } + return affected, nil +} +func UserProfileUpdateWithSess(sess *xorm.Session, uid interface{}, userProfile *model.UserProfile, forceCols ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceCols != nil { + affected, err = sess.Where("uid=?", uid).Cols(forceCols...).Update(userProfile) + } else { + affected, err = sess.Where("uid=?", uid).AllCols().Omit("fin_valid").Update(userProfile) + } + + if err != nil { + return 0, logx.Warn(err) + } + return affected, nil +} + +// UserProfileUpdateByArkID is update userprofile +func UserProfileUpdateByArkID(Db *xorm.Engine, arkid interface{}, userProfile *model.UserProfile, forceCols ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceCols != nil { + affected, err = Db.Where("arkid_uid=?", arkid).Cols(forceCols...).Update(userProfile) + } else { + affected, err = Db.Where("arkid_uid=?", arkid).Update(userProfile) + } + if err != nil { + return 0, logx.Warn(err) + } + return affected, nil +} + +// UserProfileDelete is delete user profile +func UserProfileDelete(Db *xorm.Engine, uid interface{}) (int64, error) { + return Db.Where("uid = ?", uid).Delete(model.UserProfile{}) +} +func UserProfileDeleteWithSess(sess *xorm.Session, uid interface{}) (int64, error) { + return sess.Where("uid = ?", uid).Delete(model.UserProfile{}) +} +func UserProfileFindByIdWithSession(session *xorm.Session, uid int) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := session.Where("uid = ?", uid).Get(&m); err != nil || has == false { + return nil, logx.Warn(err) + } + return &m, nil +} + +// 在事务中更新用户信息 +func UserProfileUpdateWithSession(session *xorm.Session, uid interface{}, userProfile *model.UserProfile, forceCols ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceCols != nil { + affected, err = session.Where("uid=?", uid).Cols(forceCols...).Update(userProfile) + } else { + affected, err = session.Where("uid=?", uid).Omit("fin_valid").Update(userProfile) + } + if err != nil { + return 0, logx.Warn(err) + } + return affected, nil +} + +// 根据uid获取md.user +func UserAllInfoByUid(Db *xorm.Engine, uid interface{}) (*md.User, error) { + u, err := UserFindByID(Db, uid) + if err != nil { + return nil, err + } + if u == nil { + return nil, errors.New("user is nil") + } + up, err := UserProfileFindByID(Db, uid) + if err != nil { + return nil, err + } + if utils.AnyToInt64(uid) == 0 { + userLevel, err := UserLevelInIDescByWeightLowWithOne(Db) + if err != nil { + return nil, err + } + if userLevel != nil { + u.Level = userLevel.Id + } + } + // 获取user 等级 + ul, err := UserLevelByID(Db, u.Level) + if u.Uid == 0 { + one, err := UserLevelInIDescByWeightLowWithOne(Db) + if err != nil { + return nil, err + } + ul = one + } + if err != nil { + return nil, err + } + + user := &md.User{ + Info: u, + Profile: up, + Level: ul, + } + return user, nil +} + +// UpdateUserProfileFinValid 更新用户余额 +func UpdateUserProfileFinValid(Db *xorm.Engine, uid interface{}, newAmount string) error { + update, err := Db.Where("uid=?", uid).Update(&model.UserProfile{FinValid: newAmount}) + if err != nil { + return err + } + if update != 1 { + return errors.New("更新失败") + } + + return nil +} + +// UpdateUserProfileFinValidWithSess 事务更新用户余额 +func UpdateUserProfileFinValidWithSess(sess *xorm.Session, uid interface{}, newAmount string) error { + update, err := sess.Where("uid=?", uid).Update(&model.UserProfile{FinValid: newAmount}) + if err != nil { + return err + } + if update != 1 { + return errors.New("更新失败") + } + + return nil +} diff --git a/app/db/db_user_relate.go b/app/db/db_user_relate.go new file mode 100644 index 0000000..380b80d --- /dev/null +++ b/app/db/db_user_relate.go @@ -0,0 +1,249 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils/logx" + + "xorm.io/xorm" +) + +// UserRelateInsert is 插入一条数据到用户关系表 +func UserRelateInsert(Db *xorm.Engine, userRelate *model.UserRelate) (int64, error) { + affected, err := Db.Insert(userRelate) + if err != nil { + return 0, err + } + return affected, nil +} +func UserRelateInsertWithSess(sess *xorm.Session, userRelate *model.UserRelate) (int64, error) { + affected, err := sess.Insert(userRelate) + if err != nil { + return 0, err + } + return affected, nil +} +func UserRelateUpdate(Db *xorm.Engine, userRelate *model.UserRelate) (int64, error) { + affected, err := Db.Where("parent_uid=? and uid=?", userRelate.ParentUid, userRelate.Uid).Cols("level,invite_time").Update(userRelate) + if err != nil { + return 0, err + } + return affected, nil +} + +//UserRelateByPuid is 获取用户关系列表 by puid +func UserRelatesByPuid(Db *xorm.Engine, puid interface{}, limit, start int) (*[]model.UserRelate, error) { + var m []model.UserRelate + if limit == 0 && start == 0 { + if err := Db.Where("parent_uid = ?", puid). + Cols(`id,parent_uid,uid,level,invite_time`). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("parent_uid = ?", puid). + Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + + return &m, nil +} + +//UserRelatesByPuidByLv is 获取用户关系列表 by puid 和lv +func UserRelatesByPuidByLv(Db *xorm.Engine, puid, lv interface{}, limit, start int) (*[]model.UserRelate, error) { + var m []model.UserRelate + if limit == 0 && start == 0 { + if err := Db.Where("parent_uid = ? AND level = ?", puid, lv). + Cols(`id,parent_uid,uid,level,invite_time`). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("parent_uid = ? AND level = ?", puid, lv). + Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + + return &m, nil +} + +//UserRelatesByPuidByLvByTime is 获取直属 level =1用户关系列表 by puid 和lv by time +func UserRelatesByPuidByLvByTime(Db *xorm.Engine, puid, lv, stime, etime interface{}, limit, start int) (*[]model.UserRelate, error) { + var m []model.UserRelate + if limit == 0 && start == 0 { + if err := Db.Where("parent_uid = ? AND level = ? AND invite_time > ? AND invite_time < ?", puid, lv, stime, etime). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("parent_uid = ? AND level = ? AND invite_time > ? AND invite_time < ?", puid, lv, stime, etime). + Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + + return &m, nil +} + +//UserRelatesByPuidByTime is 获取户关系列表 by puid 和lv by time +func UserRelatesByPuidByTime(Db *xorm.Engine, puid, stime, etime interface{}, limit, start int) (*[]model.UserRelate, error) { + var m []model.UserRelate + if limit == 0 && start == 0 { + if err := Db.Where("parent_uid = ? AND invite_time > ? AND invite_time < ?", puid, stime, etime). + Cols(`id,parent_uid,uid,level,invite_time`). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("parent_uid = ? AND invite_time > ? AND invite_time < ?", puid, stime, etime). + Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + + return &m, nil +} + +//UserRelatesByPuidExceptLv is 获取用户关系列表 by puid 和非 lv +func UserRelatesByPuidExceptLv(Db *xorm.Engine, puid, lv interface{}, limit, start int) (*[]model.UserRelate, error) { + var m []model.UserRelate + if limit == 0 && start == 0 { + if err := Db.Where("parent_uid = ? AND level != ?", puid, lv). + Cols(`id,parent_uid,uid,level,invite_time`). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil + } + if err := Db.Where("parent_uid = ? AND level != ?", puid, lv). + Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + + return &m, nil +} + +//UserRelateByUID is 获取用户关系表 by uid +func UserRelateByUID(Db *xorm.Engine, uid interface{}) (*model.UserRelate, bool, error) { + r := new(model.UserRelate) + has, err := Db.Where("uid=?", uid).Get(r) + if err != nil { + return nil, false, err + } + return r, has, nil +} + +//UserRelateByUIDByLv is 获取用户关系表 by uid +func UserRelateByUIDByLv(Db *xorm.Engine, uid, lv interface{}) (*model.UserRelate, bool, error) { + r := new(model.UserRelate) + has, err := Db.Where("uid=? AND level=?", uid, lv).Get(r) + if err != nil { + return nil, false, err + } + return r, has, nil +} + +//UserRelateByUIDAndPUID 根据 Puid 和uid 查找 ,用于确认关联 +func UserRelateByUIDAndPUID(Db *xorm.Engine, uid, puid interface{}) (*model.UserRelate, bool, error) { + r := new(model.UserRelate) + has, err := Db.Where("uid=? AND parent_uid=?", uid, puid).Get(r) + if err != nil { + return nil, false, err + } + return r, has, nil +} + +//UserRelatesByPuIDAndLv is 查询用户关系表 获取指定等级和puid的关系 +func UserRelatesByPuIDAndLv(Db *xorm.Engine, puid, lv interface{}) (*[]model.UserRelate, error) { + var m []model.UserRelate + if err := Db.Where("parent_uid = ? AND level = ?", puid, lv). + Cols(`id,parent_uid,uid,level,invite_time`). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserRelateInByUID is In查询 +func UserRelateInByUID(Db *xorm.Engine, ids []int) (*[]model.UserRelate, error) { + var m []model.UserRelate + if err := Db.In("uid", ids). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +// UserRelatesByUIDDescLv is Where 查询 根据level 降序 +func UserRelatesByUIDDescLv(Db *xorm.Engine, id interface{}) (*[]model.UserRelate, error) { + var m []model.UserRelate + if err := Db.Where("uid = ?", id).Desc("level"). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} +func UserRelatesByInvite(Db *xorm.Engine, times interface{}) (*[]model.UserRelate, error) { + var m []model.UserRelate + if err := Db.Where("invite_time >= ?", times). + Find(&m); err != nil { + return nil, logx.Warn(err) + } + return &m, nil +} + +//UserRelateCountByPUID is 根据puid 计数 +func UserRelateCountByPUID(Db *xorm.Engine, pid interface{}) (int64, error) { + + count, err := Db.Where("parent_uid = ?", pid).Count(model.UserRelate{}) + if err != nil { + return 0, nil + } + return count, nil +} + +//UserRelateDelete is 删除关联他上级的关系记录,以及删除他下级的关联记录 +func UserRelateDelete(Db *xorm.Engine, uid interface{}) (int64, error) { + // 删除与之上级的记录 + _, err := Db.Where("uid = ?", uid).Delete(model.UserRelate{}) + if err != nil { + return 0, err + } + // 删除与之下级的记录 + _, err = Db.Where("parent_uid = ?", uid).Delete(model.UserRelate{}) + if err != nil { + return 0, err + } + + return 1, nil +} +func UserRelateDeleteWithSession(sess *xorm.Session, uid interface{}) (int64, error) { + // 删除与之上级的记录 + _, err := sess.Where("uid = ?", uid).Delete(model.UserRelate{}) + if err != nil { + return 0, err + } + // 删除与之下级的记录 + _, err = sess.Where("parent_uid = ?", uid).Delete(model.UserRelate{}) + if err != nil { + return 0, err + } + + return 1, nil +} + +//UserRelateDelete is 删除关联他上级的关系记录 +func UserRelateExtendDelete(Db *xorm.Engine, uid interface{}) (int64, error) { + // 删除与之上级的记录 + _, err := Db.Where("uid = ?", uid).Delete(model.UserRelate{}) + if err != nil { + return 0, err + } + return 1, nil +} diff --git a/app/db/dbs.go b/app/db/dbs.go new file mode 100644 index 0000000..9f02c9f --- /dev/null +++ b/app/db/dbs.go @@ -0,0 +1,104 @@ +package db + +import ( + "fmt" + "os" + "time" + + "xorm.io/xorm" + "xorm.io/xorm/log" + + "applet/app/cfg" + "applet/app/db/model" + "applet/app/utils/logx" +) + +var DBs map[string]*xorm.Engine + +// 每个站长都要有自己的syscfg 缓存, 键是站长id,值是缓存名 +// var SysCfgMapKey map[string]string + +func NewDB(c *cfg.DBCfg) (*xorm.Engine, error) { + db, err := xorm.NewEngine("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", c.User, c.Psw, c.Host, c.Name)) + if err != nil { + return nil, err + } + db.SetConnMaxLifetime(c.MaxLifetime * time.Second) + db.SetMaxOpenConns(c.MaxOpenConns) + db.SetMaxIdleConns(c.MaxIdleConns) + err = db.Ping() + if err != nil { + return nil, err + } + if c.ShowLog { + db.ShowSQL(true) + db.Logger().SetLevel(log.LOG_DEBUG) + f, err := os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777) + if err != nil { + os.RemoveAll(c.Path) + if f, err = os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777); err != nil { + return nil, err + } + } + logger := log.NewSimpleLogger(f) + logger.ShowSQL(true) + db.SetLogger(logger) + } + return db, nil +} + +// InitDBs is 初始化多数据库 +func InitDBs(ch chan int) { + // 初始化多数据库 + var tables *[]model.DbMapping + InitMapDbs(cfg.DB, cfg.Prd) + ch <- 1 + // 每10s 查询一次模板数据库的db mapping 表,如果有新增数据库记录,则添加到 DBs中 + ticker := time.NewTicker(time.Duration(time.Second * 120)) + for range ticker.C { + if cfg.Prd { + tables = GetAllDatabasePrd() //默认获取全部 + } else { + tables = GetAllDatabaseDev() //默认获取全部 + } + if tables == nil { + logx.Warn("no database tables data") + continue + } + for _, item := range *tables { + _, ok := DBs[item.DbMasterId] + if !ok { + // 不在db.DBs 则添加进去 + dbCfg := cfg.DBCfg{ + Name: item.DbName, + ShowLog: cfg.DB.ShowLog, + MaxLifetime: cfg.DB.MaxLifetime, + MaxOpenConns: cfg.DB.MaxOpenConns, + MaxIdleConns: cfg.DB.MaxIdleConns, + Path: fmt.Sprintf(cfg.DB.Path, item.DbName), + } + if item.DbHost != "" && item.DbUsername != "" && item.DbPassword != "" { + dbCfg.Host = item.DbHost + dbCfg.User = item.DbUsername + dbCfg.Psw = item.DbPassword + } else { + dbCfg.Host = cfg.DB.Host + dbCfg.User = cfg.DB.User + dbCfg.Psw = cfg.DB.Psw + } + e, err := NewDB(&dbCfg) + if err != nil || e == nil { + logx.Warnf("db engine can't create, please check config, params[host:%s, user:%s, psw: %s, name: %s], err: %v", dbCfg.Host, dbCfg.User, dbCfg.Psw, dbCfg.Name, err) + } else { + DBs[item.DbMasterId] = e + } + } + // 如果 被禁用则删除 + if item.DeletedAt == 1 { + logx.Infof("%s have been removed", item.DbMasterId) + delete(DBs, item.DbMasterId) + } + } + } + +} diff --git a/app/db/dbs_map.go b/app/db/dbs_map.go new file mode 100644 index 0000000..9043ca0 --- /dev/null +++ b/app/db/dbs_map.go @@ -0,0 +1,232 @@ +package db + +import ( + model2 "applet/app/db/offical/model" + "errors" + "fmt" + + "xorm.io/xorm" + + "applet/app/cfg" + "applet/app/db/model" + "applet/app/utils/logx" +) + +func MapBaseExists() (bool, error) { + return Db.IsTableExist("db_mapping") +} + +func InitMapDbs(c *cfg.DBCfg, prd bool) { + var tables *[]model.DbMapping + exists, err := MapBaseExists() + if !exists || err != nil { + logx.Fatalf("db_mapping not exists : %v", err) + } + // tables := MapAllDatabases(debug) + if prd { + tables = GetAllDatabasePrd() //debug 获取生产 + } else { + tables = GetAllDatabaseDev() //debug 获取开发 + } + + if tables == nil { + logx.Fatal("no database tables data") + } + var e *xorm.Engine + DBs = map[string]*xorm.Engine{} + for _, v := range *tables { + if v.DbName != "" && v.DeletedAt == 0 && v.DbName != c.Name { + dbCfg := cfg.DBCfg{ + Name: v.DbName, + ShowLog: c.ShowLog, + MaxLifetime: c.MaxLifetime, + MaxOpenConns: c.MaxOpenConns, + MaxIdleConns: c.MaxIdleConns, + Path: fmt.Sprintf(c.Path, v.DbName), + } + if v.DbHost != "" && v.DbUsername != "" && v.DbPassword != "" { + dbCfg.Host = v.DbHost + dbCfg.User = v.DbUsername + dbCfg.Psw = v.DbPassword + } else { + dbCfg.Host = c.Host + dbCfg.User = c.User + dbCfg.Psw = c.Psw + } + e, err = NewDB(&dbCfg) + if err != nil || e == nil { + logx.Warnf("db engine can't create, please check config, params[host:%s, user:%s, psw: %s, name: %s], err: %v", dbCfg.Host, dbCfg.User, dbCfg.Psw, dbCfg.Name, err) + } else { + DBs[v.DbMasterId] = e + } + } + } +} + +func MapAllDatabases(debug bool) *[]model.DbMapping { + sql := "`db_name` != ?" + if debug { + sql = "`db_name` = ?" + } + var m []model.DbMapping + if err := Db.Where(sql, cfg.DB.Name).Find(&m); err != nil || len(m) == 0 { + logx.Warn(err) + return nil + } + return &m +} + +// GetAllDatabasePrd is 获取生成库 所有db 除了 deleted_at = 1 的 +func GetAllDatabasePrd() *[]model.DbMapping { + var m []model.DbMapping + if err := Db.Where("deleted_at != ? AND is_dev = '0' ", 1).Find(&m); err != nil || len(m) == 0 { + logx.Warn(err) + return nil + } + return &m +} + +// GetAllDatabaseDev is 获取开发库 所有db 除了 deleted_at = 1 的 +func GetAllDatabaseDev() *[]model.DbMapping { + var m []model.DbMapping + var err error + if cfg.Local { // 本地调试 加快速度 + //fmt.Println("notice:LOCAL TEST, only masterId:** 123456 ** available!") + err = Db.Where("deleted_at != ? AND is_dev = '1' AND db_master_id=?", 1, 123456).Find(&m) + //err = Db.Where(" db_master_id=?", 36274003).Find(&m) + } else { + err = Db.Where("deleted_at != ? AND is_dev = '1' ", 1).Find(&m) + } + + //err := Db.Where("deleted_at != ? AND is_dev = '1' and db_master_id='123456'", 1).Find(&m) + if err != nil || len(m) == 0 { + logx.Warn(err) + return nil + } + return &m +} + +// GetDatabaseByMasterID is 根据站长id 获取对应的的数据库信息 +func GetDatabaseByMasterID(Db *xorm.Engine, id string) (*model.DbMapping, error) { + var m model.DbMapping + has, err := Db.Where("db_master_id=?", id).Get(&m) + if !has { + return nil, errors.New("Not Found DB data by " + id) + } + if err != nil { + return nil, err + } + if m.DbHost == "" { + m.DbHost = cfg.DB.Host + m.DbUsername = cfg.DB.User + m.DbPassword = cfg.DB.Psw + } + return &m, nil +} + +// SessionGetDatabaseByMasterID is 根据站长id 获取对应的的数据库信息 +func SessionGetDatabaseByMasterID(Db *xorm.Session, id string) (*model.DbMapping, error) { + var m model.DbMapping + has, err := Db.Where("db_master_id=?", id).Get(&m) + if !has { + return nil, errors.New("Not Found DB data by " + id) + } + if err != nil { + return nil, err + } + if m.DbHost == "" { + m.DbHost = cfg.DB.Host + m.DbName = cfg.DB.Name + m.DbUsername = cfg.DB.User + m.DbPassword = cfg.DB.Psw + } + return &m, nil +} + +// 获取自动任务队列 +func MapCrontabCfg(eg *xorm.Engine) *[]model.SysCfg { + var c []model.SysCfg + // 数据库查询如果有下划线会认为是一个任意字符 + if err := eg.Where("`key` LIKE 'cron\\_%' AND val != ''").Cols("`key`,`val`").Find(&c); err != nil || len(c) == 0 { + logx.Warn(err) + return nil + } + return &c +} + +// 获取官方域名 +func GetOfficialDomainInfoByType(Db *xorm.Engine, masterId, key string) (string, error) { + type SysCfg struct { + K string + V string + Memo string + } + var domainBase SysCfg + + has, err := Db.Where("k=?", "domain_wap_base").Get(&domainBase) + if err != nil { + return "", err + } + if has == false { + return "", errors.New("can not find key by : domain_base") + } + + if key == "wap" { + return masterId + "." + domainBase.V, nil + } + + if key == "api" { + var apiDomain SysCfg + has, err = Db.Where("k=?", "domain_api_base").Get(&apiDomain) + if err != nil { + return "", err + } + if has == false { + return "", errors.New("can not find key by : domain_api_base") + } + return apiDomain.V, nil + } + + if key == "admin" { + return "admin." + masterId + "." + domainBase.V, nil + } + // 默认返回H5的 + return masterId + "." + domainBase.V, nil +} +func GetOfficialDomainInfoByTypeToAgent(Db *xorm.Engine, masterId, uuid, key string) (string, error) { + type SysCfg struct { + K string + V string + Memo string + } + var domainBase model2.MasterListCfg + has, err := Db.Where("uid=? and k=?", uuid, "domain_base").Get(&domainBase) + if err != nil { + return "", err + } + if has == false { + return "", errors.New("can not find key by : domain_base") + } + + if key == "wap" { + return masterId + ".h5." + domainBase.V, nil + } + + if key == "api" { + var apiDomain SysCfg + has, err = Db.Where("k=?", "domain_api_base").Get(&apiDomain) + if err != nil { + return "", err + } + if has == false { + return "", errors.New("can not find key by : domain_api_base") + } + return apiDomain.V, nil + } + + if key == "admin" { + return "admin." + masterId + "." + domainBase.V, nil + } + // 默认返回H5的 + return masterId + "." + domainBase.V, nil +} diff --git a/app/db/dbs_sys_cfg.go b/app/db/dbs_sys_cfg.go new file mode 100644 index 0000000..0225144 --- /dev/null +++ b/app/db/dbs_sys_cfg.go @@ -0,0 +1,55 @@ +package db + +import ( + "xorm.io/xorm" + + "applet/app/db/model" + "applet/app/utils/logx" +) + +// 系统配置get +func DbsSysCfgGetAll(eg *xorm.Engine) (*[]model.SysCfg, error) { + var cfgList []model.SysCfg + if err := eg.Cols("`key`,`val`").Find(&cfgList); cfgList == nil || err != nil { + return nil, logx.Error(err) + } + return &cfgList, nil +} + +// 获取一条记录 +func DbsSysCfgGet(eg *xorm.Engine, key string) (*model.SysCfg, error) { + var cfgList model.SysCfg + if has, err := eg.Where("`key`=?", key).Get(&cfgList); err != nil || has == false { + return nil, logx.Error(err) + } + return &cfgList, nil +} + +func DbsSysCfgInsert(eg *xorm.Engine, key, val string) bool { + cfg := model.SysCfg{Key: key, Val: val} + _, err := eg.Where("`key`=?", key).Cols("val,memo").Update(&cfg) + if err != nil { + logx.Error(err) + return false + } + return true +} +func DbsSysCfgInserts(eg *xorm.Engine, key, val string) bool { + cfg := model.SysCfg{Key: key, Val: val} + _, err := eg.InsertOne(&cfg) + if err != nil { + logx.Error(err) + return false + } + return true +} + +func DbsSysCfgUpdate(eg *xorm.Engine, key, val string) bool { + cfg := model.SysCfg{Key: key, Val: val} + _, err := eg.Where("`key`=?", key).Cols("val").Update(&cfg) + if err != nil { + logx.Error(err) + return false + } + return true +} diff --git a/app/db/model/cloud_bundle.go b/app/db/model/cloud_bundle.go new file mode 100644 index 0000000..31c7524 --- /dev/null +++ b/app/db/model/cloud_bundle.go @@ -0,0 +1,19 @@ +package model + +type CloudBundle struct { + Id int `json:"id" xorm:"not null pk autoincr INT(10)"` + Os int `json:"os" xorm:"not null default 1 comment('系统类型:1.Android; 2.IOS') TINYINT(1)"` + Ep int `json:"ep" xorm:" default 0 comment('') TINYINT(1)"` + Version string `json:"version" xorm:"not null default '' comment('版本号') VARCHAR(255)"` + Modules string `json:"modules" xorm:"not null default '' comment('包含的模块') VARCHAR(255)"` + ApplyAt int `json:"apply_at" xorm:"comment('申请时间') INT(11)"` + FinishAt int `json:"finish_at" xorm:"comment('完成时间') INT(11)"` + IsAuditing int `json:"is_auditing" xorm:"comment('完成时间') INT(11)"` + State int `json:"state" xorm:"not null default 1 comment('状态:正在排队0,正在同步代码1,正在更新配置2,正在混淆3,正在打包4,正在上传5,打包成功999,异常-1') SMALLINT(5)"` + Memo string `json:"memo" xorm:"comment('备注') TEXT"` + ErrorMsg string `json:"error_msg" xorm:"comment('错误信息') TEXT"` + Src string `json:"src" xorm:"comment('包源地址') VARCHAR(255)"` + BuildId string `json:"build_id" xorm:"comment('build版本ID') VARCHAR(255)"` + BuildNumber string `json:"build_number" xorm:"default '' VARCHAR(255)"` + TemplateDuringAudit string `json:"template_during_audit" xorm:"not null default '' VARCHAR(255)"` +} diff --git a/app/db/model/community_team_cate.go b/app/db/model/community_team_cate.go new file mode 100644 index 0000000..462304c --- /dev/null +++ b/app/db/model/community_team_cate.go @@ -0,0 +1,10 @@ +package model + +type CommunityTeamCate struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 comment('0是官方') INT(11)"` + StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` + Title string `json:"title" xorm:"VARCHAR(255)"` + Sort int `json:"sort" xorm:"default 0 INT(11)"` + IsShow int `json:"is_show" xorm:"default 0 INT(1)"` +} diff --git a/app/db/model/community_team_coupon.go b/app/db/model/community_team_coupon.go new file mode 100644 index 0000000..aeb2775 --- /dev/null +++ b/app/db/model/community_team_coupon.go @@ -0,0 +1,27 @@ +package model + +import ( + "time" +) + +type CommunityTeamCoupon struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Name string `json:"name" xorm:"comment('方案名称') VARCHAR(255)"` + Comment string `json:"comment" xorm:"comment('备注') VARCHAR(2048)"` + PublishTime time.Time `json:"publish_time" xorm:"comment('立即发布时间') DATETIME"` + Kind int `json:"kind" xorm:"not null comment('优惠券类型,1:立减,2:满减,3折扣') TINYINT(1)"` + IsReach int `json:"is_reach" xorm:"comment('是否有门槛,1:有,2:否;优惠券类型为3折扣时') TINYINT(1)"` + Cal string `json:"cal" xorm:"comment('满减及折扣有门槛时算法,{"reach": "20.12", "reduce": "2.2"}, reach:满X元,减/折reduce') VARCHAR(255)"` + State int `json:"state" xorm:"not null default 1 comment('状态,是否使用(1:使用;2:不使用)') TINYINT(1)"` + ActivityTimeStart time.Time `json:"activity_time_start" xorm:"not null comment('活动起止时间,开始时间') DATETIME"` + ActivityTimeEnd time.Time `json:"activity_time_end" xorm:"not null comment('活动起止时间,结束时间') DATETIME"` + ActivityStatement string `json:"activity_statement" xorm:"not null default '0' comment('活动规则说明') VARCHAR(5000)"` + Sort int `json:"sort" xorm:"comment('排序') INT(11)"` + Ext string `json:"ext" xorm:"comment('拓展字段') TEXT"` + IsPublishNow int `json:"is_publish_now" xorm:"not null default 0 comment('是否立即发布,0:否,1:是') TINYINT(1)"` + CreatedTime time.Time `json:"created_time" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` + UpdatedTime time.Time `json:"updated_time" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` + DeletedTime time.Time `json:"deleted_time" xorm:"comment('删除时间') DATETIME"` + StoreId int `json:"store_id" xorm:"default 0 INT(11)"` + StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` +} diff --git a/app/db/model/community_team_coupon_user.go b/app/db/model/community_team_coupon_user.go new file mode 100644 index 0000000..a98b4d4 --- /dev/null +++ b/app/db/model/community_team_coupon_user.go @@ -0,0 +1,25 @@ +package model + +import ( + "time" +) + +type CommunityTeamCouponUser struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + Uid int `json:"uid" xorm:"comment('用户id') index INT(11)"` + MerchantSchemeId int `json:"merchant_scheme_id" xorm:"comment('优惠券方案的id') INT(11)"` + IsUse int `json:"is_use" xorm:"comment('是否已使用:0否1是2失效') TINYINT(1)"` + Kind int `json:"kind" xorm:"comment('优惠券类型:1立减2满减3折扣') TINYINT(1)"` + Cal string `json:"cal" xorm:"not null default '0.00' comment('折扣算法json:形式:{"reach":"10.00", "reduce":"1.00"},无门槛reach为0') VARCHAR(255)"` + ValidTimeStart time.Time `json:"valid_time_start" xorm:"comment('有效日期开始') DATETIME"` + ValidTimeEnd time.Time `json:"valid_time_end" xorm:"comment('有效日期结束') DATETIME"` + UseRule int `json:"use_rule" xorm:"comment('1全部商品可用2指定商品3指定活动类型') TINYINT(1)"` + UseActivityType int `json:"use_activity_type" xorm:"comment('可用的活动类型: 1拼团活动 2秒杀活动 3砍价活动') TINYINT(1)"` + CreateTime time.Time `json:"create_time" xorm:"default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` + UpdateTime time.Time `json:"update_time" xorm:"default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` + StoreId int `json:"store_id" xorm:"default 0 comment('0是官方') INT(11)"` + StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` + Name string `json:"name" xorm:"comment('方案名称') VARCHAR(255)"` + ActivityStatement string `json:"activity_statement" xorm:"not null default '0' comment('活动规则说明') VARCHAR(5000)"` + Img string `json:"img" xorm:"VARCHAR(255)"` +} diff --git a/app/db/model/community_team_goods.go b/app/db/model/community_team_goods.go new file mode 100644 index 0000000..36f5338 --- /dev/null +++ b/app/db/model/community_team_goods.go @@ -0,0 +1,29 @@ +package model + +import ( + "time" +) + +type CommunityTeamGoods struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 comment('0是官方') INT(11)"` + StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` + Title string `json:"title" xorm:"VARCHAR(255)"` + Img string `json:"img" xorm:"VARCHAR(255)"` + Info string `json:"info" xorm:"comment('描述') VARCHAR(255)"` + Cid int `json:"cid" xorm:"default 0 INT(11)"` + State int `json:"state" xorm:"default 0 comment('0上架 1下架') INT(11)"` + CreateAt time.Time `json:"create_at" xorm:"DATETIME"` + UpdateAt time.Time `json:"update_at" xorm:"DATETIME"` + Price string `json:"price" xorm:"DECIMAL(10,2)"` + Stock int `json:"stock" xorm:"default 0 INT(11)"` + Spe string `json:"spe" xorm:"not null default '' comment('所有规格属性json') VARCHAR(5012)"` + LinePrice string `json:"line_price" xorm:"not null default 0.00 comment('划线价') DECIMAL(12,2)"` + SpeImages string `json:"spe_images" xorm:"not null comment('第一组规格值对应的图片json') TEXT"` + IsSingleSku int `json:"is_single_sku" xorm:"not null default 1 comment('是否单规格,0:否,1是') TINYINT(1)"` + Sort int `json:"sort" xorm:"default 0 INT(11)"` + IsSpeImageOn int `json:"is_spe_image_on" xorm:"not null default 0 comment('是否开启规格图片:0否 1是') TINYINT(1)"` + Commission string `json:"commission" xorm:"default 0.00 DECIMAL(20,2)"` + ImageList string `json:"image_list" xorm:"comment('商品图json') TEXT"` + SaleCount int `json:"sale_count" xorm:"default 0 INT(11)"` +} diff --git a/app/db/model/community_team_order.go b/app/db/model/community_team_order.go new file mode 100644 index 0000000..24e0df3 --- /dev/null +++ b/app/db/model/community_team_order.go @@ -0,0 +1,37 @@ +package model + +import ( + "time" +) + +type CommunityTeamOrder struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` + StoreUid int `json:"store_uid" xorm:"default 0 comment('门店用户id') INT(11)"` + ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"` + Num int `json:"num" xorm:"default 0 comment('') INT(11)"` + CouponId int `json:"coupon_id" xorm:"default 0 comment('') INT(11)"` + Address string `json:"address" xorm:"comment('详细地址') VARCHAR(255)"` + Commission string `json:"commission" xorm:"default 0.00 comment('分佣(元)') DECIMAL(20,2)"` + CreateAt time.Time `json:"create_at" xorm:"DATETIME"` + UpdateAt time.Time `json:"update_at" xorm:"DATETIME"` + BuyPhone string `json:"buy_phone" xorm:"VARCHAR(255)"` + Phone string `json:"phone" xorm:"VARCHAR(255)"` + BuyName string `json:"buy_name" xorm:"VARCHAR(255)"` + State int `json:"state" xorm:"default 0 comment('0待付款 1已支付 2已提货') INT(11)"` + PayAt time.Time `json:"pay_at" xorm:"comment('付款时间') DATETIME"` + ConfirmAt time.Time `json:"confirm_at" xorm:"comment('提货时间') DATETIME"` + Oid int64 `json:"oid" xorm:"default 0 comment('主单号') BIGINT(20)"` + Code string `json:"code" xorm:"comment('提货码') VARCHAR(255)"` + Type int `json:"type" xorm:"default 0 comment('0自提 1外卖') INT(1)"` + PayMethod int `json:"pay_method" xorm:"default 0 comment('1余额 2支付宝 3微信') INT(11)"` + PayId string `json:"pay_id" xorm:"comment('第三方的支付id') VARCHAR(255)"` + Amount string `json:"amount" xorm:"default 0.00 comment('总金额') DECIMAL(20,2)"` + Memo string `json:"memo" xorm:"comment('备注') VARCHAR(255)"` + TakeTime time.Time `json:"take_time" xorm:"comment('预计提货时间') DATETIME"` + MealNum int `json:"meal_num" xorm:"default 0 comment('餐具数量') INT(11)"` + Coupon string `json:"coupon" xorm:"default 0.00 DECIMAL(10,2)"` + Timer string `json:"timer" xorm:"comment('预计提货时间') VARCHAR(255)"` + IsNow int `json:"is_now" xorm:"default 0 comment('是否立即提货') INT(1)"` +} diff --git a/app/db/model/community_team_order_info.go b/app/db/model/community_team_order_info.go new file mode 100644 index 0000000..20eddb5 --- /dev/null +++ b/app/db/model/community_team_order_info.go @@ -0,0 +1,13 @@ +package model + +type CommunityTeamOrderInfo struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Oid int64 `json:"oid" xorm:"BIGINT(20)"` + Title string `json:"title" xorm:"comment('标题') VARCHAR(255)"` + Img string `json:"img" xorm:"comment('图片') VARCHAR(255)"` + Price string `json:"price" xorm:"default 0.00 comment('单价') DECIMAL(10,2)"` + Num int `json:"num" xorm:"default 0 comment('数量') INT(11)"` + SkuInfo string `json:"sku_info" xorm:"comment('sku信息') VARCHAR(255)"` + GoodsId int `json:"goods_id" xorm:"default 0 INT(11)"` + SkuId int `json:"sku_id" xorm:"default 0 INT(11)"` +} diff --git a/app/db/model/community_team_sku.go b/app/db/model/community_team_sku.go new file mode 100644 index 0000000..3342e7f --- /dev/null +++ b/app/db/model/community_team_sku.go @@ -0,0 +1,20 @@ +package model + +import ( + "time" +) + +type CommunityTeamSku struct { + SkuId int64 `json:"sku_id" xorm:"not null pk autoincr BIGINT(20)"` + GoodsId int `json:"goods_id" xorm:"not null comment('商品id') INT(11)"` + Price string `json:"price" xorm:"not null default 0.00 comment('价格') DECIMAL(12,2)"` + CreateTime time.Time `json:"create_time" xorm:"default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` + UpdateTime time.Time `json:"update_time" xorm:"default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` + Stock int `json:"stock" xorm:"not null default 0 comment('库存') INT(11)"` + Indexes string `json:"indexes" xorm:"not null default '' comment('规格值组合的下标') VARCHAR(100)"` + Sku string `json:"sku" xorm:"not null comment('规格组合json') VARCHAR(2048)"` + SaleCount int `json:"sale_count" xorm:"not null default 0 comment('销量') INT(11)"` + Sort int `json:"sort" xorm:"not null default 0 comment('排序') INT(11)"` + Discount string `json:"discount" xorm:"default 10.00 comment('折扣,为10无折扣') DECIMAL(6,2)"` + SkuCode string `json:"sku_code" xorm:"default '' comment('sku编码') VARCHAR(255)"` +} diff --git a/app/db/model/community_team_store.go b/app/db/model/community_team_store.go new file mode 100644 index 0000000..60cc0f0 --- /dev/null +++ b/app/db/model/community_team_store.go @@ -0,0 +1,24 @@ +package model + +import ( + "time" +) + +type CommunityTeamStore struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` + ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"` + Lat string `json:"lat" xorm:"default 0.000000 comment('纬度') DECIMAL(30,6)"` + Lng string `json:"lng" xorm:"default 0.000000 comment('经度') DECIMAL(30,6)"` + Address string `json:"address" xorm:"comment('详细地址') VARCHAR(255)"` + Commission string `json:"commission" xorm:"default 0.00 comment('分佣比例%') DECIMAL(20,2)"` + CreateAt time.Time `json:"create_at" xorm:"DATETIME"` + UpdateAt time.Time `json:"update_at" xorm:"DATETIME"` + State int `json:"state" xorm:"default 0 comment('0非店长 1店长') INT(1)"` + WorkState int `json:"work_state" xorm:"default 0 comment('0营业中 1休息中') INT(1)"` + Name string `json:"name" xorm:"VARCHAR(255)"` + Province string `json:"province" xorm:"comment('省级的名称') VARCHAR(255)"` + City string `json:"city" xorm:"comment('市级的名称') VARCHAR(255)"` + District string `json:"district" xorm:"comment('县,区名称') VARCHAR(255)"` +} diff --git a/app/db/model/community_team_store_like.go b/app/db/model/community_team_store_like.go new file mode 100644 index 0000000..586346f --- /dev/null +++ b/app/db/model/community_team_store_like.go @@ -0,0 +1,12 @@ +package model + +import ( + "time" +) + +type CommunityTeamStoreLike struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + StoreId int `json:"store_id" xorm:"default 0 INT(11)"` + Time time.Time `json:"time" xorm:"DATETIME"` +} diff --git a/app/db/model/db_mapping.go b/app/db/model/db_mapping.go new file mode 100644 index 0000000..f2f5d06 --- /dev/null +++ b/app/db/model/db_mapping.go @@ -0,0 +1,18 @@ +package model + +import ( + "time" +) + +type DbMapping struct { + DbMasterId string `json:"db_master_id" xorm:"not pk null comment('站长id') VARCHAR(32)"` + DbHost string `json:"db_host" xorm:"not null default '' comment('数据库连接(带port)') VARCHAR(255)"` + DbUsername string `json:"db_username" xorm:"not null default '' comment('数据库用户名') VARCHAR(255)"` + DbPassword string `json:"db_password" xorm:"not null default '' comment('数据库用户名密码') VARCHAR(255)"` + DbName string `json:"db_name" xorm:"not null comment('数据库名') VARCHAR(255)"` + ExternalMysql string `json:"external_mysql" xorm:"not null default '0' comment('是否外部mysql(0是内部,1是外部)') VARCHAR(255)"` + IsDev int `json:"is_dev" xorm:"not null default 0 comment('开发库是1,0是生产库') TINYINT(1)"` + CreatedAt time.Time `json:"created_at" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') TIMESTAMP"` + UpdatedAt time.Time `json:"updated_at" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') TIMESTAMP"` + DeletedAt int `json:"deleted_at" xorm:"not null default 0 comment('是否已删除') TINYINT(1)"` +} diff --git a/app/db/model/fin_user_flow.go b/app/db/model/fin_user_flow.go new file mode 100644 index 0000000..785da48 --- /dev/null +++ b/app/db/model/fin_user_flow.go @@ -0,0 +1,30 @@ +package model + +import ( + "time" +) + +type FinUserFlow struct { + Id int64 `json:"id" xorm:"pk autoincr comment('流水编号') BIGINT(20)"` + Uid int `json:"uid" xorm:"not null default 0 comment('用户id') INT(11)"` + Type int `json:"type" xorm:"not null default 0 comment('0收入,1支出') TINYINT(1)"` + Amount string `json:"amount" xorm:"not null default 0.0000 comment('变动金额') DECIMAL(11,4)"` + BeforeAmount string `json:"before_amount" xorm:"not null default 0.0000 comment('变动前金额') DECIMAL(11,4)"` + AfterAmount string `json:"after_amount" xorm:"not null default 0.0000 comment('变动后金额') DECIMAL(11,4)"` + SysFee string `json:"sys_fee" xorm:"not null default 0.0000 comment('手续费') DECIMAL(11,4)"` + PaymentType int `json:"payment_type" xorm:"not null default 1 comment('1支付宝,2微信.3手动转账') TINYINT(1)"` + OrdType string `json:"ord_type" xorm:"not null default '' comment('订单类型taobao,jd,pdd,vip,suning,kaola,own自营,withdraw提现') VARCHAR(20)"` + OrdId string `json:"ord_id" xorm:"not null default '' comment('对应订单编号') VARCHAR(50)"` + OrdTitle string `json:"ord_title" xorm:"not null default '' comment('订单标题') VARCHAR(50)"` + OrdAction int `json:"ord_action" xorm:"not null default 0 comment('10自购,11推广,12团队,20提现,21消费') TINYINT(2)"` + OrdTime int `json:"ord_time" xorm:"not null default 0 comment('下单时间or提现时间') INT(11)"` + OrdDetail string `json:"ord_detail" xorm:"not null default '' comment('记录商品ID或提现账号') VARCHAR(50)"` + ExpectedTime string `json:"expected_time" xorm:"not null default '0' comment('预期到账时间,字符串用于直接显示,结算后清除内容') VARCHAR(30)"` + State int `json:"state" xorm:"not null default 1 comment('1未到账,2已到账') TINYINT(1)"` + Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(2000)"` + OtherId int64 `json:"other_id" xorm:"not null default 0 comment('其他关联订单,具体根据订单类型判断') BIGINT(20)"` + AliOrdId string `json:"ali_ord_id" xorm:"default '' comment('支付宝订单号') VARCHAR(128)"` + ExtendType int `json:"extend_type" xorm:"not null default 1 comment('') TINYINT(1)"` + CreateAt time.Time `json:"create_at" xorm:"created not null default CURRENT_TIMESTAMP comment('创建时间') TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"updated not null default CURRENT_TIMESTAMP comment('更新时间') TIMESTAMP"` +} diff --git a/app/db/model/sys_cfg.go b/app/db/model/sys_cfg.go new file mode 100644 index 0000000..22d906b --- /dev/null +++ b/app/db/model/sys_cfg.go @@ -0,0 +1,7 @@ +package model + +type SysCfg struct { + Key string `json:"key" xorm:"not null pk comment('键') VARCHAR(127)"` + Val string `json:"val" xorm:"comment('值') TEXT"` + Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(255)"` +} diff --git a/app/db/model/sys_module.go b/app/db/model/sys_module.go new file mode 100644 index 0000000..9a1b1d8 --- /dev/null +++ b/app/db/model/sys_module.go @@ -0,0 +1,35 @@ +package model + +import ( + "time" +) + +type SysModule struct { + ModId int `json:"mod_id" xorm:"not null pk autoincr INT(10)"` + ModPid int `json:"mod_pid" xorm:"not null default 0 comment('父级模块ID') INT(10)"` + TemplateId int `json:"template_id" xorm:"not null default 0 comment('模板ID') INT(11)"` + ModName string `json:"mod_name" xorm:"not null default '' comment('模块名称') VARCHAR(250)"` + Position string `json:"position" xorm:"not null default '' comment('位置') VARCHAR(250)"` + SkipIdentifier string `json:"skip_identifier" xorm:"not null default '' comment('跳转标识') VARCHAR(250)"` + Title string `json:"title" xorm:"not null default '' comment('标题') VARCHAR(128)"` + Subtitle string `json:"subtitle" xorm:"not null default '' comment('副标题') VARCHAR(255)"` + Url string `json:"url" xorm:"not null default '' comment('跳转链接') VARCHAR(512)"` + Margin string `json:"margin" xorm:"not null default '0,0,0,0' comment('边距,上右下左') VARCHAR(64)"` + AspectRatio string `json:"aspect_ratio" xorm:"not null default 0.00 comment('宽高比,宽/高保留两位小数') DECIMAL(4,2)"` + Icon string `json:"icon" xorm:"not null default '' comment('图标') VARCHAR(512)"` + Img string `json:"img" xorm:"not null default '' comment('图片') VARCHAR(512)"` + FontColor string `json:"font_color" xorm:"not null default '' comment('文字颜色') VARCHAR(128)"` + BgImg string `json:"bg_img" xorm:"not null default '' comment('背景图片') VARCHAR(512)"` + BgColor string `json:"bg_color" xorm:"not null default '' comment('背景颜色') VARCHAR(512)"` + BgColorT string `json:"bg_color_t" xorm:"not null default '' comment('背景颜色过度') VARCHAR(255)"` + Badge string `json:"badge" xorm:"not null default '' comment('badge图片') VARCHAR(512)"` + Path string `json:"path" xorm:"not null default '' comment('跳转路径') VARCHAR(255)"` + Data string `json:"data" xorm:"comment('内容') TEXT"` + Sort int `json:"sort" xorm:"not null default 0 comment('排序') INT(11)"` + Uid int `json:"uid" xorm:"not null default 0 comment('排序') INT(11)"` + State int `json:"state" xorm:"not null default 1 comment('0不显示,1显示') TINYINT(1)"` + IsGlobal int `json:"is_global" xorm:"not null default 0 comment('是否全局显示') TINYINT(1)"` + Platform int `json:"platform" xorm:"not null default 1 comment('平台;1:全平台;2:App应用(ios和android);3:H5(wap);4:微信小程序;5:抖音小程序;6:百度小程序') TINYINT(1)"` + CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') TIMESTAMP"` +} diff --git a/app/db/model/sys_popup.go b/app/db/model/sys_popup.go new file mode 100644 index 0000000..6ff4e5d --- /dev/null +++ b/app/db/model/sys_popup.go @@ -0,0 +1,28 @@ +package model + +import ( + "time" +) + +type SysPopup struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"not null default 0 INT(11)"` + Name string `json:"name" xorm:"not null default '' VARCHAR(32)"` + ConditionType string `json:"condition_type" xorm:"not null default 'all' comment('展示人群类型;all:所有人;new_user:新用户;level:指定等级;tag:指定标签;no_order_user:未出单用户') VARCHAR(32)"` + Condition string `json:"condition" xorm:"not null comment('弹窗条件,json') TEXT"` + Position string `json:"position" xorm:"not null default 'index' comment('展示位置;index:首页') VARCHAR(64)"` + Image string `json:"image" xorm:"not null default '' comment('弹窗图片') VARCHAR(128)"` + Platform string `json:"platform" xorm:"not null default '' comment('弹窗图片') VARCHAR(255)"` + Interval int `json:"interval" xorm:"not null default 0 comment('弹窗时间间隔;单位:分钟') INT(11)"` + Skip string `json:"skip" xorm:"not null default '' comment('跳转标识') VARCHAR(255)"` + Type int `json:"type" xorm:"not null default 1 comment('弹窗时间类型;1:固定时间;2:每天定时') TINYINT(1)"` + PopupTime string `json:"popup_time" xorm:"comment('弹窗时间,json') TEXT"` + State int `json:"state" xorm:"not null default 0 comment('状态;0:不启用;1:启用') TINYINT(1)"` + Sort int `json:"sort" xorm:"not null default 0 comment('排序') INT(11)"` + PopupType int `json:"popup_type" xorm:"not null default 0 comment('弹窗类型 0活动弹窗 1任务弹窗') INT(11)"` + TaskType int `json:"task_type" xorm:"not null default 0 comment('任务类型') INT(11)"` + TaskFinishType int `json:"task_finish_type" xorm:"not null default 0 comment('任务完成状态') INT(11)"` + CreateAt time.Time `json:"create_at" xorm:"default 'CURRENT_TIMESTAMP' TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' TIMESTAMP"` + IsNotClose int `json:"is_not_close" xorm:"not null default 0 comment('不能关闭 0能关 1不能关') INT(1)"` +} diff --git a/app/db/model/sys_push_app.go b/app/db/model/sys_push_app.go new file mode 100644 index 0000000..5d0ee70 --- /dev/null +++ b/app/db/model/sys_push_app.go @@ -0,0 +1,22 @@ +package model + +import ( + "time" +) + +type SysPushApp struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + Title string `json:"title" xorm:"not null default '' comment('标题') VARCHAR(32)"` + Content string `json:"content" xorm:"not null comment('内容') TEXT"` + Image string `json:"image" xorm:"not null default '' comment('图片(只有官方才有图片)') VARCHAR(255)"` + Provider string `json:"provider" xorm:"not null default 'mob' comment('平台供应商,如:mob,official:官方推送') VARCHAR(16)"` + Type string `json:"type" xorm:"not null default '' comment('模板类型 | 推送类型;public;:普通推送;activity:活动通知;order_self:新订单提醒(导购自购新订单),order_team:新订单提醒(团队新订单),order_share:新订单提醒(导购分享新订单),member_register:团队成员注册成功,level_upgrade:团队成员等级升级成功,withdraw_fail:提现失败提醒,withdraw_success:提现成功提醒,comission_settle_success:佣金结算提醒(平台结算)') VARCHAR(50)"` + SendAt int `json:"send_at" xorm:"not null default 0 comment('指定发送时间0为马上执行') INT(11)"` + State int `json:"state" xorm:"not null default 1 comment('1发送中,2成功,3失败,4部分成功') TINYINT(1)"` + DeviceProvider int `json:"device_provider" xorm:"default 1 comment('推送设备平台。1:全平台;2:安卓;3:ios') TINYINT(1)"` + Target int `json:"target" xorm:"not null default 1 comment('推送目标;1:全部会员;2:指定会员;3:指定等级;4:指定标签') TINYINT(1)"` + TargetCondition string `json:"target_condition" xorm:"comment('推送目标条件。json格式;') TEXT"` + Skip string `json:"skip" xorm:"not null default '' comment('跳转功能') VARCHAR(255)"` + CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') TIMESTAMP"` +} diff --git a/app/db/model/sys_push_sms.go b/app/db/model/sys_push_sms.go new file mode 100644 index 0000000..ef63a2b --- /dev/null +++ b/app/db/model/sys_push_sms.go @@ -0,0 +1,19 @@ +package model + +import ( + "time" +) + +type SysPushSms struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + Content string `json:"content" xorm:"not null comment('内容') TEXT"` + Provider string `json:"provider" xorm:"not null default '' comment('短信供应平台,暂时没有') VARCHAR(20)"` + SendAt int `json:"send_at" xorm:"not null default 0 comment('指定发送时间0为马上执行') INT(10)"` + State int `json:"state" xorm:"not null default 0 comment('0发送中,1成功,2失败,3部分成功') TINYINT(1)"` + Target int `json:"target" xorm:"not null default 1 comment('推送目标;1:全部会员;2:指定会员;3:指定等级;4:指定标签') TINYINT(1)"` + TargetCondition string `json:"target_condition" xorm:"comment('推送目标条件。json格式;') TEXT"` + Skip string `json:"skip" xorm:"not null default '' comment('跳转功能') VARCHAR(255)"` + CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') TIMESTAMP"` + Type string `json:"type" xorm:"not null default '' comment('模板类型 | 推送类型;public;:普通推送;activity:活动通知;order_self:新订单提醒(导购自购新订单),order_team:新订单提醒(团队新订单),order_share:新订单提醒(导购分享新订单),member_register:团队成员注册成功,level_upgrade:团队成员等级升级成功,withdraw_fail:提现失败提醒,withdraw_success:提现成功提醒,comission_settle_success:佣金结算提醒(平台结算)') VARCHAR(50)"` +} diff --git a/app/db/model/sys_push_template.go b/app/db/model/sys_push_template.go new file mode 100644 index 0000000..ec82030 --- /dev/null +++ b/app/db/model/sys_push_template.go @@ -0,0 +1,17 @@ +package model + +import ( + "time" +) + +type SysPushTemplate struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + IsAppPush int `json:"is_app_push" xorm:"not null default 1 comment('是否app推送') TINYINT(1)"` + IsSmsPush int `json:"is_sms_push" xorm:"not null default 0 comment('是否短信推送') TINYINT(1)"` + Type string `json:"type" xorm:"not null default '' comment('模板类型') VARCHAR(50)"` + Title string `json:"title" xorm:"not null default '' comment('标题') VARCHAR(128)"` + Content string `json:"content" xorm:"not null comment('内容') TEXT"` + Skip string `json:"skip" xorm:"not null default '' comment('跳转功能') VARCHAR(255)"` + CreateAt time.Time `json:"create_at" xorm:"default CURRENT_TIMESTAMP TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"default CURRENT_TIMESTAMP TIMESTAMP"` +} diff --git a/app/db/model/sys_push_user.go b/app/db/model/sys_push_user.go new file mode 100644 index 0000000..d4a2157 --- /dev/null +++ b/app/db/model/sys_push_user.go @@ -0,0 +1,18 @@ +package model + +import ( + "time" +) + +type SysPushUser struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + PushId int `json:"push_id" xorm:"not null default 0 comment('sys_push_app表ID') index INT(11)"` + Uid int `json:"uid" xorm:"not null default 0 INT(11)"` + State int `json:"state" xorm:"not null default 0 comment('发送状态;0:失败;1:成功') TINYINT(1)"` + Time time.Time `json:"time" xorm:"default CURRENT_TIMESTAMP comment('发送时间') TIMESTAMP"` + SendData string `json:"send_data" xorm:"comment('发送内容,json格式') TEXT"` + Provider string `json:"provider" xorm:"not null default 'mob' comment('平台供应商,如:mob,official:官方推送') VARCHAR(16)"` + Type string `json:"type" xorm:"not null default '' comment('模板类型 | 推送类型;public;:普通推送;activity:活动通知;order_self:新订单提醒(导购自购新订单),order_team:新订单提醒(团队新订单),order_share:新订单提醒(导购分享新订单),member_register:团队成员注册成功,level_upgrade:团队成员等级升级成功,withdraw_fail:提现失败提醒,withdraw_success:提现成功提醒,comission_settle_success:佣金结算提醒(平台结算)') VARCHAR(50)"` + SendAt int `json:"send_at" xorm:"not null default 0 comment('官方活动显示时间(大于当前时间戳才显示);0为即可显示') INT(11)"` + IsRead int `json:"is_read" xorm:"not null default 0 comment('是否已读;0:未读;1:已读') TINYINT(1)"` +} diff --git a/app/db/model/sys_template.go b/app/db/model/sys_template.go new file mode 100644 index 0000000..c9814ad --- /dev/null +++ b/app/db/model/sys_template.go @@ -0,0 +1,20 @@ +package model + +import ( + "time" +) + +type SysTemplate struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"not null default 0 INT(11)"` + Name string `json:"name" xorm:"not null default '' comment('模板名称') VARCHAR(32)"` + Title string `json:"title" xorm:"not null default '' comment('页面title字段') VARCHAR(32)"` + Type string `json:"type" xorm:"not null default 'index' comment('模板类型;index:首页;bottom:底部导航栏;member:会员中心;custom:自定义模板;share_goods_image:商品图文分享;share_goods_link:商品链接分享;share_goods_platform_xx:商品分享平台(xx对应平台类型)') VARCHAR(64)"` + Image string `json:"image" xorm:"not null default '' VARCHAR(128)"` + IsUse int `json:"is_use" xorm:"default 0 comment('是否使用;1:使用;0未使用') TINYINT(1)"` + Remark string `json:"remark" xorm:"not null default '' comment('备注') VARCHAR(128)"` + LimitData string `json:"limit_data" xorm:"not null comment('') TEXT"` + IsSystem int `json:"is_system" xorm:"not null default 0 comment('是否系统模板;0:否;1:是') TINYINT(1)"` + CreateAt time.Time `json:"create_at" xorm:"default CURRENT_TIMESTAMP TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"default CURRENT_TIMESTAMP TIMESTAMP"` +} diff --git a/app/db/model/user.go b/app/db/model/user.go new file mode 100644 index 0000000..0c5c5dc --- /dev/null +++ b/app/db/model/user.go @@ -0,0 +1,37 @@ +package model + +import ( + "time" +) + +type User struct { + Uid int `json:"uid" xorm:"not null pk autoincr comment('主键ID') INT(10)"` + Username string `json:"username" xorm:"not null default '' comment('用户名') index VARCHAR(50)"` + Password string `json:"password" xorm:"not null default '' comment('密码') CHAR(32)"` + Passcode string `json:"passcode" xorm:"not null default '' comment('支付密码') CHAR(32)"` + Email string `json:"email" xorm:"not null default '' comment('邮箱') VARCHAR(128)"` + Phone string `json:"phone" xorm:"not null default '' comment('联系电话') index VARCHAR(20)"` + Nickname string `json:"nickname" xorm:"not null default '' comment('昵称') VARCHAR(20)"` + Level int `json:"level" xorm:"not null default 0 comment('用户等级id') INT(11)"` + IsStore int `json:"is_store" xorm:"not null default 0 comment('') INT(11)"` + InviteTotal int `json:"invite_total" xorm:"not null default 0 comment('直推邀请总人数') INT(11)"` + LevelArriveAt time.Time `json:"level_arrive_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('到达该等级的时间') TIMESTAMP"` + LevelExpireAt time.Time `json:"level_expire_at" xorm:"not null default '0000-00-00 00:00:00' comment('该等级过期时间') TIMESTAMP"` + CreateAt time.Time `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' comment('最后修改资料时间') TIMESTAMP"` + LastLoginAt time.Time `json:"last_login_at" xorm:"default 'CURRENT_TIMESTAMP' comment('最近登录时间') TIMESTAMP"` + DeleteAt int `json:"delete_at" xorm:"not null default 0 comment('是否删除;0未删除;1已删除') TINYINT(1)"` + State int `json:"state" xorm:"not null default 1 comment('0未激活,1正常,2冻结') TINYINT(1)"` + LastLoginIp string `json:"last_login_ip" xorm:"not null default '' comment('最后登录IP') VARCHAR(64)"` + RegisterIp string `json:"register_ip" xorm:"not null default '' comment('注册IP') VARCHAR(64)"` + IsFake int `json:"is_fake" xorm:"not null default 0 comment('0真实 1虚拟') TINYINT(1)"` + IsMarketer int `json:"is_marketer" xorm:"not null default 0 comment('是否市商 0否 1是') TINYINT(1)"` + CanChangeLv int `json:"can_change_lv" xorm:"not null default 0 comment('是否市商 0否 1是') TINYINT(1)"` + IsPop int `json:"is_pop" xorm:"not null default 0 comment('是否市商 0否 1是') TINYINT(1)"` + IsNotAddMoments int `json:"is_not_add_moments" xorm:"not null default 0 comment('是否市商 0否 1是') TINYINT(1)"` + Zone string `json:"zone" xorm:"not null default '86' comment('区号') VARCHAR(100)"` + SalePhone string `json:"sale_phone" xorm:"not null default '' comment('') VARCHAR(100)"` + Platform string `json:"platform" xorm:"not null default '' comment('') VARCHAR(100)"` + ImportFinTotal string `json:"import_fin_total" xorm:"not null default 0.000000 comment('累计总收益') DECIMAL(30,4)"` + FinTotal string `json:"fin_total" xorm:"not null default 0.000000 comment('累计总收益') DECIMAL(30,4)"` +} diff --git a/app/db/model/user_app_domain.go b/app/db/model/user_app_domain.go new file mode 100644 index 0000000..4522cef --- /dev/null +++ b/app/db/model/user_app_domain.go @@ -0,0 +1,8 @@ +package model + +type UserAppDomain struct { + Domain string `json:"domain" xorm:"not null pk comment('绑定域名') VARCHAR(100)"` + Uuid int `json:"uuid" xorm:"not null comment('对应APP ID编号') index unique(IDX_UUID_TYPE) INT(10)"` + Type string `json:"type" xorm:"not null comment('api接口域名,wap.h5域名,admin管理后台') unique(IDX_UUID_TYPE) ENUM('admin','api','wap')"` + IsSsl int `json:"is_ssl" xorm:"not null default 0 comment('是否开启ssl:0否;1是') TINYINT(255)"` +} diff --git a/app/db/model/user_app_list.go b/app/db/model/user_app_list.go new file mode 100644 index 0000000..58b6cb5 --- /dev/null +++ b/app/db/model/user_app_list.go @@ -0,0 +1,8 @@ +package model + +type UserAppList struct { + Id int `json:"id" xorm:"int(11) NOT NULL "` + Uuid int64 `json:"uuid" xorm:"int(10) NOT NULL "` + AppId int64 `json:"app_id" xorm:"int(10) NOT NULL "` + SmsPlatform string `json:"sms_platform" xorm:"varchar(255) DEFAULT 'mob' "` +} diff --git a/app/db/model/user_level.go b/app/db/model/user_level.go new file mode 100644 index 0000000..94726aa --- /dev/null +++ b/app/db/model/user_level.go @@ -0,0 +1,23 @@ +package model + +import ( + "time" +) + +type UserLevel struct { + Id int `json:"id" xorm:"not null pk autoincr comment('等级id') INT(11)"` + BenefitIds string `json:"benefit_ids" xorm:"comment('该等级拥有的权益id【json】') TEXT"` + LevelName string `json:"level_name" xorm:"not null default '' comment('等级名称') VARCHAR(255)"` + LevelWeight int `json:"level_weight" xorm:"not null default 0 comment('等级权重') INT(11)"` + LevelUpdateCondition int `json:"level_update_condition" xorm:"not null default 2 comment('2是条件升级,1是无条件升级') TINYINT(1)"` + AutoAudit int `json:"auto_audit" xorm:"not null default 0 comment('(自动审核)0关闭,1开启') TINYINT(1)"` + AutoUpdate int `json:"auto_update" xorm:"not null default 0 comment('(自动升级)0关闭,1开启') TINYINT(1)"` + LevelDate int `json:"level_date" xorm:"default 0 comment('会员有效期(0永久有效,单位月)') INT(11)"` + IsUse int `json:"is_use" xorm:"not null default 1 comment('是否开启(0否,1是)') TINYINT(1)"` + ChoosableNum int `json:"choosable_num" xorm:"default 0 comment('可选任务数量(当is_must_task为0时生效)') INT(6)"` + BeforeHide int `json:"before_hide" xorm:"default 0 comment('可选任务数量(当is_must_task为0时生效)') INT(6)"` + Label int `json:"label" xorm:"default 0 comment('') INT(6)"` + Memo string `json:"memo" xorm:"default '' comment('备注') VARCHAR(255)"` + CssSet string `json:"css_set" xorm:"TEXT"` + CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP TIMESTAMP"` +} diff --git a/app/db/model/user_profile.go b/app/db/model/user_profile.go new file mode 100644 index 0000000..ca6f3b6 --- /dev/null +++ b/app/db/model/user_profile.go @@ -0,0 +1,102 @@ +package model + +import ( + "time" +) + +type UserProfile struct { + Uid int `json:"uid" xorm:"not null pk comment('关联userID') INT(20)"` + ArkidUid int `json:"arkid_uid" xorm:"not null default 0 comment('Arkid 用户ID') INT(20)"` + ParentUid int `json:"parent_uid" xorm:"not null default 0 comment('上级ID') INT(20)"` + ArkidToken string `json:"arkid_token" xorm:"not null default '' comment('token') VARCHAR(2000)"` + AvatarUrl string `json:"avatar_url" xorm:"not null default '' comment('头像URL') VARCHAR(2000)"` + CustomInviteCode string `json:"custom_invite_code" xorm:"not null default '' comment('邀请码(自定义)') VARCHAR(16)"` + InviteCode string `json:"invite_code" xorm:"not null default '' comment('邀请码(系统)') VARCHAR(16)"` + Gender int `json:"gender" xorm:"not null default 2 comment('性别0女,1男,2未知') TINYINT(1)"` + Birthday int `json:"birthday" xorm:"not null default 0 comment('出生日期') INT(10)"` + AccWxId string `json:"acc_wx_id" xorm:"not null default '' comment('账户_微信id') VARCHAR(50)"` + AccWxOpenid string `json:"acc_wx_openid" xorm:"not null default '' comment('账户_微信openid') VARCHAR(80)"` + AccTaobaoNickname string `json:"acc_taobao_nickname" xorm:"not null default '' comment('淘宝昵称') VARCHAR(50)"` + AccTaobaoAuthTime int64 `json:"acc_taobao_auth_time" xorm:"not null default 0 comment('淘宝授权备案时间') BIGINT(11)"` + AccTaobaoShareId int64 `json:"acc_taobao_share_id" xorm:"not null default 0 comment('淘宝分享relationId,') index BIGINT(12)"` + AccTaobaoSelfId int64 `json:"acc_taobao_self_id" xorm:"not null default 0 comment('淘宝自购specialId') index BIGINT(12)"` + AccJdSelfId string `json:"acc_jd_self_id" xorm:"not null default '' comment('京东自购ID') index VARCHAR(50)"` + AccJdShareId string `json:"acc_jd_share_id" xorm:"not null default '' comment('京东分享ID') index VARCHAR(50)"` + AccJdFreeId string `json:"acc_jd_free_id" xorm:"not null default '' comment('京东新人免单ID') VARCHAR(50)"` + AccJdCloudId string `json:"acc_jd_cloud_id" xorm:"not null default '' comment('京东新人免单ID') VARCHAR(50)"` + AccSuningSelfId string `json:"acc_suning_self_id" xorm:"not null default '' comment('苏宁自购ID') index VARCHAR(50)"` + AccSuningShareId string `json:"acc_suning_share_id" xorm:"not null default '' comment('苏宁分享ID') index VARCHAR(50)"` + AccSuningFreeId string `json:"acc_suning_free_id" xorm:"not null default '' comment('苏宁新人免单ID') VARCHAR(50)"` + AccPddSelfId string `json:"acc_pdd_self_id" xorm:"not null default '' comment('拼多多自购ID') index VARCHAR(50)"` + AccPddCloudId string `json:"acc_pdd_cloud_id" xorm:"not null default '' comment('拼多多自购ID') index VARCHAR(50)"` + AccPddShareId string `json:"acc_pdd_share_id" xorm:"not null default '' comment('拼多多分享ID') index VARCHAR(50)"` + AccPddFreeId string `json:"acc_pdd_free_id" xorm:"not null default '' comment('拼多多新人免单ID') VARCHAR(50)"` + AccPddBind int `json:"acc_pdd_bind" xorm:"not null default 0 comment('拼多多是否授权绑定') TINYINT(1)"` + AccVipSelfId string `json:"acc_vip_self_id" xorm:"not null default '' comment('唯品会自购ID') index VARCHAR(50)"` + AccVipShareId string `json:"acc_vip_share_id" xorm:"not null default '' comment('唯品会分享ID') index VARCHAR(50)"` + AccVipFreeId string `json:"acc_vip_free_id" xorm:"not null default '' comment('唯品会新人免单ID') VARCHAR(50)"` + AccKaolaSelfId string `json:"acc_kaola_self_id" xorm:"not null default '' comment('考拉自购ID') index VARCHAR(50)"` + AccKaolaShareId string `json:"acc_kaola_share_id" xorm:"not null default '' comment('考拉分享ID') index VARCHAR(50)"` + AccKaolaFreeId string `json:"acc_kaola_free_id" xorm:"not null default '' comment('考拉新人免单ID') VARCHAR(50)"` + AccDuomaiShareId int64 `json:"acc_duomai_share_id" xorm:"not null pk default 0 comment('多麦联盟分享ID') BIGINT(12)"` + AccAlipay string `json:"acc_alipay" xorm:"not null default '' comment('支付宝账号') VARCHAR(50)"` + AccAlipayRealName string `json:"acc_alipay_real_name" xorm:"not null default '' comment('支付宝账号真实姓名') VARCHAR(50)"` + CertTime int `json:"cert_time" xorm:"not null default 0 comment('认证时间') INT(10)"` + CertName string `json:"cert_name" xorm:"not null default '' comment('证件上名字,也是真实姓名') VARCHAR(50)"` + CertNum string `json:"cert_num" xorm:"not null default '' comment('证件号码') VARCHAR(50)"` + CertState int `json:"cert_state" xorm:"not null default 0 comment('认证状态(0为未认证,1为认证中,2为已认证,3为认证失败)') TINYINT(1)"` + FinCommission string `json:"fin_commission" xorm:"not null default 0.0000 comment('累计佣金') DECIMAL(10,4)"` + FinValid string `json:"fin_valid" xorm:"not null default 0.0000 comment('可用余额,fin=>finance财务') DECIMAL(10,4)"` + FinInvalid string `json:"fin_invalid" xorm:"not null default 0.0000 comment('不可用余额,冻结余额') DECIMAL(10,4)"` + FinSelfOrderCount int `json:"fin_self_order_count" xorm:"not null default 0 comment('自购订单数,包括未完成') INT(11)"` + FinSelfOrderCountDone int `json:"fin_self_order_count_done" xorm:"not null default 0 comment('自购已完成订单') INT(11)"` + FinSelfRebate float32 `json:"fin_self_rebate" xorm:"not null default 0.000000 comment('累积自购获得返利金额') FLOAT(14,6)"` + FinTotal float32 `json:"fin_total" xorm:"not null default 0.000000 comment('累计总收益') FLOAT(14,6)"` + Lat float32 `json:"lat" xorm:"not null default 0.000000 comment('纬度') FLOAT(15,6)"` + Lng float32 `json:"lng" xorm:"not null default 0.000000 comment('经度') FLOAT(15,6)"` + Memo string `json:"memo" xorm:"not null default '' comment('用户简述备注') VARCHAR(2048)"` + Qq string `json:"qq" xorm:"not null default '' comment('') VARCHAR(255)"` + IsNew int `json:"is_new" xorm:"not null default 1 comment('是否是新用户') TINYINT(1)"` + IsVerify int `json:"is_verify" xorm:"not null default 0 comment('是否有效会员') TINYINT(1)"` + IsOrdered int `json:"is_ordered" xorm:"not null default 0 comment('是否已完成首单(0否,1是)') TINYINT(1)"` + FromWay string `json:"from_way" xorm:"not null default '' comment('注册来源: +no_captcha_phone:免验证码手机号注册; +manual_phone:手动手机验证码注册; +wx:微信授权; +wx_mp:小程序授权; +wx_pub:公众号授权; +wx_bind_phone:微信注册绑定手机号; +admin:管理员添加;taobao_bind_phone:淘宝注册绑定手机号,apple_bind_phone:苹果注册绑定手机号') VARCHAR(16)"` + HidOrder int `json:"hid_order" xorm:"not null default 0 comment('隐藏订单') TINYINT(3)"` + HidContact int `json:"hid_contact" xorm:"not null default 0 comment('隐藏联系方式') TINYINT(4)"` + NewMsgNotice int `json:"new_msg_notice" xorm:"not null default 1 comment('新消息通知') TINYINT(1)"` + WxAccount string `json:"wx_account" xorm:"not null default '' comment('微信号') VARCHAR(100)"` + WxQrcode string `json:"wx_qrcode" xorm:"not null default '' comment('微信二维码') VARCHAR(100)"` + ThirdPartyTaobaoOid string `json:"third_party_taobao_oid" xorm:"not null default '' comment('淘宝第三方登录openID') VARCHAR(100)"` + ThirdPartyTaobaoSid string `json:"third_party_taobao_sid" xorm:"not null default '' comment('淘宝第三方登录sID') VARCHAR(255)"` + ThirdPartyTaobaoAcctoken string `json:"third_party_taobao_acctoken" xorm:"not null default '' comment('淘宝第三方登录topaccesstoken') VARCHAR(100)"` + ThirdPartyTaobaoAuthcode string `json:"third_party_taobao_authcode" xorm:"not null default '' comment('淘宝第三方登录topAuthCode') VARCHAR(100)"` + ThirdPartyAppleToken string `json:"third_party_apple_token" xorm:"not null default '' comment('苹果第三方登录token') VARCHAR(1024)"` + ThirdPartyQqAccessToken string `json:"third_party_qq_access_token" xorm:"not null default '' comment('QQ第三方登录access_token') VARCHAR(255)"` + ThirdPartyQqExpiresIn string `json:"third_party_qq_expires_in" xorm:"not null default '' comment('QQ第三方登录expires_in(剩余时长)') VARCHAR(255)"` + ThirdPartyQqOpenid string `json:"third_party_qq_openid" xorm:"not null default '' comment('QQ第三方登陆openid(不变,用于认证)') VARCHAR(255)"` + ThirdPartyQqUnionid string `json:"third_party_qq_unionid" xorm:"not null default '' comment('QQ第三方登陆unionid') VARCHAR(255)"` + ThirdPartyWechatExpiresIn string `json:"third_party_wechat_expires_in" xorm:"not null default '' comment('微信第三方登录expires_in(剩余时长)') VARCHAR(255)"` + ThirdPartyWechatOpenid string `json:"third_party_wechat_openid" xorm:"not null default '' comment('微信第三方登陆openid(不变,用于认证)') VARCHAR(255)"` + ThirdPartyWechatUnionid string `json:"third_party_wechat_unionid" xorm:"not null default '' comment('微信第三方登陆unionid') VARCHAR(255)"` + ThirdPartyWechatMiniOpenid string `json:"third_party_wechat_mini_openid" xorm:"not null default '' comment('微信小程序登录open_id') VARCHAR(255)"` + ThirdPartyWechatH5Openid string `json:"third_party_wechat_h5_openid" xorm:"not null default '' comment('微信H5登录open_id') VARCHAR(255)"` + FreeRemainTime int `json:"free_remain_time" xorm:"not null default 0 comment('免单剩余次数') INT(11)"` + FreeCumulativeTime int `json:"free_cumulative_time" xorm:"not null default 0 comment('免单累计次数') INT(11)"` + SecondFreeRemainTime int `json:"second_free_remain_time" xorm:"not null default 0 comment('免单剩余次数') INT(11)"` + SecondFreeCumulativeTime int `json:"second_free_cumulative_time" xorm:"not null default 0 comment('免单累计次数') INT(11)"` + ThirdFreeRemainTime int `json:"third_free_remain_time" xorm:"not null default 0 comment('免单剩余次数') INT(11)"` + ThirdFreeCumulativeTime int `json:"third_free_cumulative_time" xorm:"not null default 0 comment('免单累计次数') INT(11)"` + IsDelete int `json:"is_delete" xorm:"not null default 0 comment('是否已删除') TINYINT(1)"` + UpdateAt time.Time `json:"update_at" xorm:"updated not null default CURRENT_TIMESTAMP comment('更新时间') TIMESTAMP"` + IsSet int `json:"is_set" xorm:"not null default 0 comment('用于一个客户生成关系链匹配的') INT(1)"` + IsOld int `json:"is_old" xorm:"not null default 0 comment('') INT(1)"` + RunVerifyTime int `json:"run_verify_time" xorm:"not null default 0 comment('') INT(1)"` + TaskId int `json:"task_id" xorm:"not null default 0 comment('') INT(1)"` + TaskType string `json:"task_type" xorm:"not null default '' comment('') VARCHAR(255)"` +} diff --git a/app/db/model/user_relate.go b/app/db/model/user_relate.go new file mode 100644 index 0000000..375562f --- /dev/null +++ b/app/db/model/user_relate.go @@ -0,0 +1,13 @@ +package model + +import ( + "time" +) + +type UserRelate struct { + Id int64 `json:"id" xorm:"pk autoincr comment('主键') BIGINT(10)"` + ParentUid int `json:"parent_uid" xorm:"not null default 0 comment('上级会员ID') unique(idx_union_u_p_id) INT(20)"` + Uid int `json:"uid" xorm:"not null default 0 comment('关联UserID') unique(idx_union_u_p_id) INT(20)"` + Level int `json:"level" xorm:"not null default 1 comment('推广等级(1直属,大于1非直属)') INT(10)"` + InviteTime time.Time `json:"invite_time" xorm:"not null default CURRENT_TIMESTAMP comment('邀请时间') TIMESTAMP"` +} diff --git a/app/db/model/virtual_coin.go b/app/db/model/virtual_coin.go new file mode 100644 index 0000000..3baaa55 --- /dev/null +++ b/app/db/model/virtual_coin.go @@ -0,0 +1,17 @@ +package model + +type VirtualCoin struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Name string `json:"name" xorm:"not null default '' comment('名称') VARCHAR(255)"` + ExchangeRatio string `json:"exchange_ratio" xorm:"not null comment('兑换比例(与金额)') DECIMAL(5,2)"` + IsUse int `json:"is_use" xorm:"comment('是否开启:0否 1是') TINYINT(1)"` + CanExchange string `json:"can_exchange" xorm:"comment('能兑换的虚拟币id和手续费列表json') VARCHAR(255)"` + CanExchangeMoney int `json:"can_exchange_money" xorm:"not null default 0 comment('现金能否兑换:0否 1是') TINYINT(1)"` + IsBlock int `json:"is_block" xorm:"not null default 0 comment('是否区块币:0否 1是') TINYINT(1)"` + FunctionType string `json:"function_type" xorm:"comment('功能类型') VARCHAR(255)"` + CanCny int `json:"can_cny" xorm:"not null default 0 comment('是否能兑换余额:0否 1是') TINYINT(1)"` + CanTransfer int `json:"can_transfer" xorm:"not null default 0 comment('是否能支持转账:0否 1是') TINYINT(1)"` + CanBackout int `json:"can_backout" xorm:"not null default 0 comment('是否能支持转账撤回:0否 1是') TINYINT(1)"` + LimitLevelTransfer string `json:"limit_level_transfer" xorm:"default '' comment('能支持转账的用户等级') VARCHAR(600)"` + LimitLevelBackout string `json:"limit_level_backout" xorm:"comment('能支持撤回的用户等级') VARCHAR(600)"` +} diff --git a/app/db/model/virtual_coin_relate.go b/app/db/model/virtual_coin_relate.go new file mode 100644 index 0000000..7987b99 --- /dev/null +++ b/app/db/model/virtual_coin_relate.go @@ -0,0 +1,17 @@ +package model + +type VirtualCoinRelate struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + Oid int64 `json:"oid" xorm:"not null default 0 comment('订单号') index unique(IDX_ORD) BIGINT(20)"` + Uid int `json:"uid" xorm:"not null default 0 comment('用户ID') unique(IDX_ORD) index INT(10)"` + CoinId int `json:"coin_id" xorm:"comment('虚拟币id') unique(IDX_ORD) INT(11)"` + Amount string `json:"amount" xorm:"not null default 0.000000 comment('数量') DECIMAL(16,6)"` + Pvd string `json:"pvd" xorm:"not null default '' comment('供应商taobao,jd,pdd,vip,suning,kaola,mall_goods,group_buy') index VARCHAR(255)"` + CreateAt int `json:"create_at" xorm:"not null default 0 comment('订单创建时间') index INT(10)"` + Level int `json:"level" xorm:"not null default 0 comment('0自购 1直推 大于1:间推') INT(10)"` + Mode string `json:"mode" xorm:"default '' comment('分佣方案类型') VARCHAR(255)"` + AdditionalSubsidy string `json:"additional_subsidy" xorm:"default 0.000000 comment('额外补贴 酒庄模式才有效') DECIMAL(16,6)"` + AdditionalSubsidyBili string `json:"additional_subsidy_bili" xorm:"default 0.000000 comment('额外补贴比例 酒庄模式才有效') DECIMAL(16,6)"` + TeamFreeze int `json:"team_freeze" xorm:"comment('定制') INT(1)"` + ExtendType int `json:"extend_type" xorm:"default 0 comment('0普通 1超级推荐人 2团长 3团长上级超级推荐人 4团长担保用户') unique(IDX_ORD) INT(11)"` +} diff --git a/app/db/model/wx_applet_list.go b/app/db/model/wx_applet_list.go new file mode 100644 index 0000000..5632d75 --- /dev/null +++ b/app/db/model/wx_applet_list.go @@ -0,0 +1,44 @@ +package model + +import ( + "time" +) + +type WxAppletList struct { + Id int `json:"id" xorm:"not null pk autoincr INT(10)"` + Memo string `json:"memo" xorm:"not null default '' comment('备注') unique VARCHAR(255)"` + CompanyName string `json:"company_name" xorm:"not null default '' comment('企业名(需与工商部门登记信息一致);如果是“无主体名称个体工商户”则填“个体户+法人姓名”,例如“个体户张三”') VARCHAR(255)"` + Code string `json:"code" xorm:"not null default '' comment('企业代码') VARCHAR(255)"` + CodeType int `json:"code_type" xorm:"not null default 3 comment('企业代码类型 1:统一社会信用代码(18 位) 2:组织机构代码(9 位 xxxxxxxx-x) 3:营业执照注册号(15 位)') TINYINT(3)"` + LegalPersonaWechat string `json:"legal_persona_wechat" xorm:"not null default '' comment('法人微信号') VARCHAR(255)"` + LegalPersonaName string `json:"legal_persona_name" xorm:"not null default '' comment('法人姓名(绑定银行卡)') VARCHAR(255)"` + State int `json:"state" xorm:"not null default 0 comment('创建状态(0:创建中 1:创建成功 2:创建失败)') TINYINT(3)"` + Ext string `json:"ext" xorm:"comment('拓展字段') TEXT"` + UniqueIdentifier string `json:"unique_identifier" xorm:"not null default '' comment('唯一标识符(企业名称、企业代码、法人微信、法人姓名四个字段作为每次任务的唯一标示,来区别每次任务。)') VARCHAR(255)"` + AppId string `json:"app_id" xorm:"default '' comment('小程序appId') VARCHAR(255)"` + OriginalAppId string `json:"original_app_id" xorm:"default '' comment('原始ID') VARCHAR(255)"` + AuthorizerToken string `json:"authorizer_token" xorm:"default '' comment('授权token') VARCHAR(255)"` + AuthorizerRefreshToken string `json:"authorizer_refresh_token" xorm:"default '' comment('授权更新token') VARCHAR(255)"` + AuditVersionState int `json:"audit_version_state" xorm:"not null default 0 comment('线上版本号') TINYINT(3)"` + PublishVersionNum string `json:"publish_version_num" xorm:"comment('审核状态(0:暂无审核;1:审核中;2:审核通过;3:审核驳回)') VARCHAR(255)"` + AppletName string `json:"applet_name" xorm:"default '' comment('小程序名字') VARCHAR(255)"` + AppletSignature string `json:"applet_signature" xorm:"default '' comment('小程序简介') VARCHAR(255)"` + AppletLogo string `json:"applet_logo" xorm:"default '' comment('小程序logo') VARCHAR(255)"` + SetAppletNameInfo string `json:"set_applet_name_info" xorm:"default '' comment('小程序改名证件url') VARCHAR(255)"` + SetAppletNameInfoType int `json:"set_applet_name_info_type" xorm:"default 1 comment('小程序改名证件类型(1:个人号 2:组织号)') TINYINT(3)"` + SetAppletNameState int `json:"set_applet_name_state" xorm:"default 0 comment('小程序改名状态(0:未进行 1:进行中 2:改名成功 3:改名失败)') TINYINT(3)"` + SetAppletNameAuditId string `json:"set_applet_name_audit_id" xorm:"default '' comment('小程序改名的审核单id') VARCHAR(255)"` + CreateAt time.Time `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' TIMESTAMP"` + IsFilterTaobao int `json:"is_filter_taobao" xorm:"default 0 comment('是否过滤淘宝商品 0否 1是') INT(1)"` + CateId string `json:"cate_id" xorm:"default '' comment('主营类目id') VARCHAR(50)"` + BottomNavCssId int `json:"bottom_nav_css_id" xorm:"default 0 comment('底部导航样式id') INT(11)"` + AuthType string `json:"auth_type" xorm:"default 'reg' comment('授权方式 直接授权old_auth 注册授权reg') VARCHAR(100)"` + MpAuditVersion string `json:"mp_audit_version" xorm:"default '' comment('审核版本') VARCHAR(100)"` + MpAuditCssId int `json:"mp_audit_css_id" xorm:"default 0 comment('审核版本底部样式ID') INT(11)"` + MpAuditGoodsDetailCssId int `json:"mp_audit_goods_detail_css_id" xorm:"default 0 comment('审核版本底部样式ID') INT(11)"` + AppletBgColor string `json:"applet_bg_color" xorm:"default '' comment('导航栏/状态栏背景色') VARCHAR(100)"` + AppletNavColor string `json:"applet_nav_color" xorm:"default '' comment('导航栏/状态栏字体色') VARCHAR(100)"` + ShareUse int `json:"share_use" xorm:"default 0 comment('分享使用') INT(11)"` + OrderCssId int `json:"order_css_id" xorm:"default 0 comment('') INT(11)"` +} diff --git a/app/db/offical/db_sys_cfg.go b/app/db/offical/db_sys_cfg.go new file mode 100644 index 0000000..50fc038 --- /dev/null +++ b/app/db/offical/db_sys_cfg.go @@ -0,0 +1,23 @@ +package offical + +import ( + "applet/app/db" + officialModel "applet/app/db/offical/model" +) + +func SysCfgByKey(key string) *officialModel.SysCfg { + var data officialModel.SysCfg + get, err := db.Db.Where("k=?", key).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} +func SysCfgByKeyStr(key string) string { + var data officialModel.SysCfg + get, err := db.Db.Where("k=?", key).Get(&data) + if get == false || err != nil { + return "" + } + return data.V +} diff --git a/app/db/offical/db_user_app_list.go b/app/db/offical/db_user_app_list.go new file mode 100644 index 0000000..d85b936 --- /dev/null +++ b/app/db/offical/db_user_app_list.go @@ -0,0 +1,15 @@ +package offical + +import ( + "applet/app/db" + "applet/app/db/offical/model" +) + +func GetUserAppList(uid string) *model.UserAppList { + var data model.UserAppList + get, err := db.Db.Where("uuid=?", uid).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} diff --git a/app/db/offical/model/master_list_cfg.go b/app/db/offical/model/master_list_cfg.go new file mode 100644 index 0000000..3963c50 --- /dev/null +++ b/app/db/offical/model/master_list_cfg.go @@ -0,0 +1,9 @@ +package model + +type MasterListCfg struct { + K string `json:"k" xorm:"not null VARCHAR(255)"` + V string `json:"v" xorm:"TEXT"` + Memo string `json:"memo" xorm:"VARCHAR(255)"` + Uid string `json:"uid" xorm:"comment('0是官方') VARCHAR(255)"` + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` +} diff --git a/app/db/offical/model/sys_cfg.go b/app/db/offical/model/sys_cfg.go new file mode 100644 index 0000000..5508c9a --- /dev/null +++ b/app/db/offical/model/sys_cfg.go @@ -0,0 +1,7 @@ +package model + +type SysCfg struct { + K string `json:"k" xorm:"not null pk comment('键') VARCHAR(127)"` + V string `json:"v" xorm:"comment('值') TEXT"` + Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(255)"` +} diff --git a/app/db/offical/model/user_app_list.go b/app/db/offical/model/user_app_list.go new file mode 100644 index 0000000..9720400 --- /dev/null +++ b/app/db/offical/model/user_app_list.go @@ -0,0 +1,33 @@ +package model + +type UserAppList struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uuid int `json:"uuid" xorm:"not null comment('masterId') INT(10)"` + Uid int `json:"uid" xorm:"not null comment('用户ID') INT(10)"` + AppId int `json:"app_id" xorm:"not null comment('应用ID') INT(10)"` + PlanId string `json:"plan_id" xorm:"not null default '' comment('套餐ID') VARCHAR(100)"` + Expire int `json:"expire" xorm:"not null default 0 comment('过期时间') INT(10)"` + Name string `json:"name" xorm:"not null default '' comment('应用主名称') VARCHAR(32)"` + Icon string `json:"icon" xorm:"not null default '' comment('应用主图标') VARCHAR(250)"` + CreateTime int `json:"create_time" xorm:"not null default 0 comment('初次激活时间') INT(10)"` + RenewTime int `json:"renew_time" xorm:"not null default 0 comment('上次续费时间') INT(10)"` + Domain string `json:"domain" xorm:"not null default '' comment('域名') index VARCHAR(110)"` + DomainAlias string `json:"domain_alias" xorm:"not null default '' comment('域名别名') index VARCHAR(110)"` + Platform string `json:"platform" xorm:"not null default '' comment('平台信息 ios,android,applet') VARCHAR(100)"` + Info string `json:"info" xorm:"comment('平台名称如ios.name.#ddd;') TEXT"` + PayMode int `json:"pay_mode" xorm:"not null default 1 comment('付费模式,0授信,1付款') TINYINT(1)"` + Price float32 `json:"price" xorm:"not null default 0.00 comment('应用价格') FLOAT(10,2)"` + PricePay float32 `json:"price_pay" xorm:"not null default 0.00 comment('实际付款价格') FLOAT(10,2)"` + OfficialPrice float32 `json:"official_price" xorm:"not null default 0.00 comment('应用价格') FLOAT(10,2)"` + OfficialPricePay float32 `json:"official_price_pay" xorm:"not null default 0.00 comment('实际付款价格') FLOAT(10,2)"` + State int `json:"state" xorm:"not null default 0 comment('0未创建,1正常,2停用,3过期') TINYINT(1)"` + DeleteAt int `json:"delete_at" xorm:"not null default 0 TINYINT(1)"` + CustomAndroidCount int `json:"custom_android_count" xorm:"default 0 comment('客户端安卓包名重置次数') INT(11)"` + CustomIosCount int `json:"custom_ios_count" xorm:"default 0 comment('客户端ios包名重置次数') INT(11)"` + StoreAndroidCount int `json:"store_android_count" xorm:"default 0 comment('商家端安卓包名重置次数') INT(11)"` + StoreIosCount int `json:"store_ios_count" xorm:"default 0 comment('商家端ios包名重置次数') INT(11)"` + SmsPlatform string `json:"sms_platform" xorm:"default 'mob' comment('mob ljioe联江') VARCHAR(255)"` + IsClose int `json:"is_close" xorm:"default 0 comment('是否关闭') INT(1)"` + Puid int `json:"puid" xorm:"default 0 comment('') INT(11)"` + StoreRateInfo string `json:"store_rate_info" xorm:"comment('付呗商品进件费率') TEXT"` +} diff --git a/app/db/wechat_applet_info.go b/app/db/wechat_applet_info.go new file mode 100644 index 0000000..61c972e --- /dev/null +++ b/app/db/wechat_applet_info.go @@ -0,0 +1,166 @@ +package db + +import ( + "applet/app/cfg" + "applet/app/db/model" + "applet/app/utils" + "applet/app/utils/cache" + "crypto/tls" + "encoding/json" + "fmt" + "github.com/gin-gonic/gin" + "github.com/tidwall/gjson" + "io" + "io/ioutil" + "net/http" + "strings" + "time" + "xorm.io/xorm" +) + +func GetAppletKey(c *gin.Context, eg *xorm.Engine) map[string]string { + appId := c.GetHeader("appid") + isFilterTaobao := "0" + appletName := "" + appletLogo := "" + originalAppId := "" + bottomNavCssId := "" + mpAuditVersion := "" + MpAuditGoodsDetailCssId := "" + orderCssId := "" + if appId == "" { + wxAppletCfg := SysCfgGetWithDb(eg, c.GetString("mid"), "wx_applet_key") + isFilterTaobao = gjson.Get(wxAppletCfg, "taobaoGoodsOnOff").String() + appletName = gjson.Get(wxAppletCfg, "appletName").String() + originalAppId = gjson.Get(wxAppletCfg, "originalAppId").String() + appletLogo = gjson.Get(wxAppletCfg, "appletIcon").String() + mpAuditVersion = SysCfgGetWithDb(eg, c.GetString("mid"), "mp_audit_version") + var tm model.SysTemplate + if has, err := eg.Where("is_use = 1 AND type = 'bottom' AND platform = 4 "). + Cols("id,uid,name,is_use,is_system"). + Get(&tm); err != nil || has == false { + bottomNavCssId = "" + } else { + bottomNavCssId = utils.IntToStr(tm.Id) + } + if c.GetHeader("AppVersionName") == mpAuditVersion && c.GetHeader("AppVersionName") != "" { + m := SysCfgGetWithDb(eg, c.GetString("mid"), "mp_audit_template") + if m != "" { + bottomNavCssId = utils.Int64ToStr(gjson.Get(m, "bottom").Int()) + } + m1 := SysCfgGet(c, "mp_audit_template") + if m1 != "" { + MpAuditGoodsDetailCssId = utils.Int64ToStr(gjson.Get(m1, "product_detail").Int()) + } + } + appId = gjson.Get(wxAppletCfg, "appId").String() + } else { + var wxApplet model.WxAppletList + has, err2 := eg.Where("app_id=?", appId).Get(&wxApplet) + if has && err2 == nil { + isFilterTaobao = utils.IntToStr(wxApplet.IsFilterTaobao) + appletName = wxApplet.AppletName + appletLogo = wxApplet.AppletLogo + originalAppId = wxApplet.OriginalAppId + orderCssId = utils.IntToStr(wxApplet.OrderCssId) + mpAuditVersion = wxApplet.MpAuditVersion + bottomNavCssId = utils.IntToStr(wxApplet.BottomNavCssId) + MpAuditGoodsDetailCssId = "" + if c.GetHeader("AppVersionName") == mpAuditVersion && c.GetHeader("AppVersionName") != "" { + bottomNavCssId = utils.IntToStr(wxApplet.MpAuditCssId) + MpAuditGoodsDetailCssId = utils.IntToStr(wxApplet.MpAuditGoodsDetailCssId) + } + } + } + r := map[string]string{ + "order_css_id": orderCssId, + "app_id": appId, + "is_filter_taobao": isFilterTaobao, + "applet_name": appletName, + "applet_logo": appletLogo, + "original_app_id": originalAppId, + "bottom_nav_css_id": bottomNavCssId, + "mp_audit_version": mpAuditVersion, + "mp_audit_goods_detail_css_id": MpAuditGoodsDetailCssId, + } + return r + +} +func GetShareUse(c *gin.Context, eg *xorm.Engine) map[string]string { + var wxApplet model.WxAppletList + has, err2 := eg.Where("share_use=?", 1).Asc("id").Get(&wxApplet) + wxAppletCfg := SysCfgGetWithDb(eg, c.GetString("mid"), "wx_applet_key") + originalAppId := gjson.Get(wxAppletCfg, "originalAppId").String() + appId := gjson.Get(wxAppletCfg, "appId").String() + if has && err2 == nil { + originalAppId = wxApplet.OriginalAppId + appId = wxApplet.AppId + } + r := map[string]string{ + "app_id": appId, + "original_app_id": originalAppId, + } + return r +} +func GetAppletToken(c *gin.Context, appId string, isMore, isReset string) (accessToken string) { + key := fmt.Sprintf("%s:%s:%s", c.GetString("mid"), "wx_applet_access_token2", appId) + token, err := cache.GetString(key) + if err == nil && token != "" && strings.Contains(token, "{") == false && isReset == "0" { + // 有缓存 + accessToken = token + } else { + ExpiresIn := 1800 + accessTokenStr := ApiToSuperAdminWx(c, appId, isMore) + if accessTokenStr == "" { + return "" + } + ExpiresIn = int(gjson.Get(accessTokenStr, "expires_in").Int()) - 60*60*1 //TODO::暂时只用1个小时 + accessToken = gjson.Get(accessTokenStr, "authorizer_access_token").String() + if ExpiresIn > 0 { + //fmt.Printf("返回结果: %#v", res) + _, err = cache.SetEx(key, accessToken, ExpiresIn) + if err != nil { + fmt.Println("微信授权错误", err) + return "" + } + } + + } + return accessToken +} + +// 总后台微信token isMore多小程序登录总后台要判断读另一个表 +func ApiToSuperAdminWx(c *gin.Context, appid string, isMore string) string { + var req = make(map[string]string, 0) + var host string + host = cfg.WebsiteBackend.URL + "/Wx/getAuthorizerResult?appid=" + appid + "&is_more=" + isMore + fmt.Println(host) + tr := &http.Transport{ + MaxIdleConnsPerHost: 200, + MaxIdleConns: 200, + MaxConnsPerHost: 200, + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + client := &http.Client{ + Timeout: 5 * time.Second, + Transport: tr, + } + byte1, _ := json.Marshal(req) + req1, _ := http.NewRequest("POST", host, strings.NewReader(string(byte1))) + req1.Header.Set("Content-Type", "application/json") + resp, err := (client).Do(req1) + if err != nil || resp == nil { + if resp != nil { + _, _ = io.Copy(ioutil.Discard, resp.Body) + } + return "" + } + defer resp.Body.Close() + respByte, _ := ioutil.ReadAll(resp.Body) + + if len(respByte) == 0 { + return "" + } + return string(respByte) + +} diff --git a/app/db/zhimeng_db.go b/app/db/zhimeng_db.go new file mode 100644 index 0000000..b173da1 --- /dev/null +++ b/app/db/zhimeng_db.go @@ -0,0 +1,42 @@ +package db + +import ( + "fmt" + "os" + + _ "github.com/go-sql-driver/mysql" + "xorm.io/xorm" + "xorm.io/xorm/log" + + "applet/app/cfg" +) + +var ZhimengDb *xorm.Engine + +func InitZhimengDB(c *cfg.DBCfg) error { + var err error + if ZhimengDb, err = xorm.NewEngine("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", c.User, c.Psw, c.Host, c.Name)); err != nil { + return err + } + ZhimengDb.SetConnMaxLifetime(c.MaxLifetime) + ZhimengDb.SetMaxOpenConns(c.MaxOpenConns) + ZhimengDb.SetMaxIdleConns(c.MaxIdleConns) + if err = Db.Ping(); err != nil { + return err + } + if c.ShowLog { + ZhimengDb.ShowSQL(true) + ZhimengDb.Logger().SetLevel(0) + f, err := os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777) + if err != nil { + os.RemoveAll(c.Path) + if f, err = os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777); err != nil { + return err + } + } + logger := log.NewSimpleLogger(f) + logger.ShowSQL(true) + ZhimengDb.SetLogger(logger) + } + return nil +} diff --git a/app/e/code.go b/app/e/code.go new file mode 100644 index 0000000..6bebf2b --- /dev/null +++ b/app/e/code.go @@ -0,0 +1,244 @@ +package e + +const ( + // 200 因为部分第三方接口不能返回错误头,因此在此定义部分错误 + ERR_FILE_SAVE = 200001 + // 400 系列 + ERR_BAD_REQUEST = 400000 + ERR_INVALID_ARGS = 400001 + ERR_API_RESPONSE = 400002 + ERR_NO_DATA = 400003 + ERR_MOBILE_NIL = 400004 + ERR_MOBILE_MATH = 400005 + ERR_FILE_EXT = 400006 + ERR_FILE_MAX_SIZE = 400007 + ERR_SIGN = 400008 + ERR_PASSWORD_MATH = 400009 + ERR_PROVIDER_RESPONSE = 400010 + ERR_AES_ENCODE = 400011 + ERR_ADMIN_API = 400012 + ERR_QINIUAPI_RESPONSE = 400013 + ERR_URL_TURNCHAIN = 400014 + + // 401 未授权 + ERR_UNAUTHORIZED = 401000 + ERR_NOT_AUTH = 401001 + ERR_SMS_AUTH = 401002 + ERR_TOKEN_AUTH = 401003 + ERR_TOKEN_FORMAT = 401004 + ERR_TOKEN_GEN = 401005 + // 403 禁止 + ERR_FORBIDEN = 403000 + ERR_PLATFORM = 403001 + ERR_MOBILE_EXIST = 403002 + ERR_USER_NO_EXIST = 403003 + ERR_MOBILE_NO_EXIST = 403004 + ERR_FORBIDEN_VALID = 403005 + ERR_RELATE_ERR = 403006 + ERR_REPEAT_RELATE = 403007 + ERR_MOB_FORBIDEN = 403008 + ERR_MOB_SMS_NO_AVA = 403009 + ERR_USER_IS_REG = 403010 + ERR_MASTER_ID = 403011 + ERR_CASH_OUT_TIME = 403012 + ERR_CASH_OUT_FEE = 403013 + ERR_CASH_OUT_USER_NOT_FOUND = 403014 + ERR_CASH_OUT_FAIL = 403015 + ERR_CASH_OUT_TIMES = 403016 + ERR_CASH_OUT_MINI = 403017 + ERR_CASH_OUT_MUT = 403018 + ERR_CASH_OUT_NOT_DECIMAL = 403019 + ERR_CASH_OUT_NOT_DAY_AVA = 403020 + ERR_USER_LEVEL_PAY_CHECK_TASK_NO_DONE = 403021 + ERR_USER_LEVEL_PAY_CHECK_NO_CROSS = 403022 + ERR_USER_LEVEL_ORD_EXP = 403023 + ERR_IS_BIND_THIRDPARTY = 403024 + ERR_USER_LEVEL_UPDATE_CHECK_TASK_NO_DONE = 403025 + ERR_USER_LEVEL_UPDATE_CHECK_NOT_FOUND_ORDER = 403026 + ERR_USER_LEVEL_UPDATE_REPEAT = 403027 + ERR_USER_NO_ACTIVE = 403028 + ERR_USER_IS_BAN = 403029 + ERR_ALIPAY_SETTING = 403030 + ERR_ALIPAY_ORDERTYPE = 403031 + ERR_CLIPBOARD_UNSUP = 403032 + ERR_SYSUNION_CONFIG = 403033 + ERR_WECAHT_MINI = 403034 + ERR_WECAHT_MINI_CACHE = 403035 + ERR_WECAHT_MINI_DECODE = 403036 + ERR_WECHAT_MINI_ACCESSTOKEN = 403037 + ERR_CURRENT_VIP_LEVEL_AUDITING = 403038 + ERR_LEVEL_RENEW_SHOULD_KEEP_CURRENT = 403039 + ERR_LEVEL_UPGRADE_APPLY_AUDITTING = 403040 + ERR_LEVEL_TASK_PAY_TYPE = 403041 + ERR_BALANCE_NOT_ENOUGH = 403042 + ERR_ADMIN_PUSH = 403043 + ERR_PLAN = 403044 + ERR_MOB_CONFIG = 403045 + ERR_BAlANCE_PAY_ORDERTYPE = 403046 + ERR_PHONE_EXISTED = 403047 + ERR_NOT_RESULT = 403048 + ERR_REVIEW = 403049 + ERR_USER_LEVEL_HAS_PAID = 403050 + ERR_USER_BIND_OWN = 403051 + ERR_PARENTUID_ERR = 403052 + ERR_USER_DEL = 403053 + ERR_SEARCH_ERR = 403054 + ERR_LEVEL_REACH_TOP = 403055 + ERR_USER_CHECK_ERR = 403056 + ERR_PASSWORD_ERR = 403057 + ERR_IS_BIND_PDD_ERR = 403058 + ERR_MOB_SMS_NO_SAME = 403059 + ERR_MOB_SMS_NO_EXISTS = 403060 + // 404 + ERR_USER_NOTFOUND = 404001 + ERR_SUP_NOTFOUND = 404002 + ERR_LEVEL_MAP = 404003 + ERR_MOD_NOTFOUND = 404004 + ERR_CLIPBOARD_PARSE = 404005 + ERR_NOT_FAN = 404006 + ERR_USER_LEVEL = 404007 + ERR_LACK_PAY_CFG = 404008 + ERR_NOT_LEVEL_TASK = 404009 + ERR_ITEM_NOT_FOUND = 404012 + ERR_WX_CHECKFILE_NOTFOUND = 404011 + + // 429 请求频繁 + ERR_TOO_MANY_REQUESTS = 429000 + // 500 系列 + ERR = 500000 + ERR_UNMARSHAL = 500001 + ERR_UNKNOWN = 500002 + ERR_SMS = 500003 + ERR_ARKID_REGISTER = 500004 + ERR_ARKID_WHITELIST = 500005 + ERR_ARKID_LOGIN = 500006 + ERR_CFG = 500007 + ERR_DB_ORM = 500008 + ERR_CFG_CACHE = 500009 + ERR_ZHIMENG_CONVERT_ERR = 500010 + ERR_ALIPAY_ERR = 500011 + ERR_ALIPAY_ORDER_ERR = 500012 + ERR_PAY_ERR = 500013 + ERR_IS_BIND_THIRDOTHER = 500014 + ERR_IS_BIND_THIRDOTHERWECHAT = 500015 + ERR_INIT_RABBITMQ = 500016 +) + +var MsgFlags = map[int]string{ + // 200 + ERR_FILE_SAVE: "文件保存失败", + // 400 + ERR_BAD_REQUEST: "请求失败..", + ERR_INVALID_ARGS: "请求参数错误", + ERR_API_RESPONSE: "API错误", + ERR_QINIUAPI_RESPONSE: "七牛请求API错误", + ERR_URL_TURNCHAIN: "转链失败", + ERR_NO_DATA: "暂无数据", + ERR_MOBILE_NIL: "电话号码不能为空", + ERR_MOBILE_MATH: "电话号码输入有误", + ERR_FILE_MAX_SIZE: "文件上传大小超限", + ERR_FILE_EXT: "文件类型不支持", + ERR_SIGN: "签名校验失败", + ERR_PROVIDER_RESPONSE: "提供商接口错误", + ERR_AES_ENCODE: "加解密错误", + ERR_ADMIN_API: "后台接口请求失败", + // 401 + ERR_NOT_AUTH: "请登录后操作", + ERR_SMS_AUTH: "验证码过期或无效", + ERR_UNAUTHORIZED: "验证用户失败", + ERR_TOKEN_FORMAT: "Token格式不对", + ERR_TOKEN_GEN: "生成Token失败", + // 403 + ERR_FORBIDEN: "禁止访问", + ERR_PLATFORM: "平台不支持", + ERR_MOBILE_EXIST: "该号码已注册过", + ERR_USER_NO_EXIST: "用户没有注册或账号密码不正确", + ERR_PASSWORD_ERR: "输入两次密码不一致", + ERR_RELATE_ERR: "推荐人不能是自己的粉丝", + ERR_PARENTUID_ERR: "推荐人不存在", + ERR_TOKEN_AUTH: "登录信息失效,请重新登录", + ERR_MOB_SMS_NO_AVA: "短信余额不足", + ERR_MOB_SMS_NO_SAME: "验证码不一致", + ERR_MOB_SMS_NO_EXISTS: "验证码已失效", + ERR_USER_IS_REG: "用户已注册", + ERR_MASTER_ID: "找不到对应站长的数据库", + ERR_CASH_OUT_TIME: "非可提现时间段", + ERR_CASH_OUT_USER_NOT_FOUND: "收款账号不存在", + ERR_CASH_OUT_FAIL: "提现失败", + ERR_CASH_OUT_FEE: "提现金额必须大于手续费", + ERR_CASH_OUT_TIMES: "当日提现次数已达上线", + ERR_CASH_OUT_MINI: "申请提现金额未达到最低金额要求", + ERR_CASH_OUT_MUT: "申请提现金额未达到整数倍要求", + ERR_CASH_OUT_NOT_DECIMAL: "提现申请金额只能是整数", + ERR_CASH_OUT_NOT_DAY_AVA: "不在可提现日期范围内", + ERR_USER_LEVEL_PAY_CHECK_TASK_NO_DONE: "请先完成其他任务", + ERR_USER_LEVEL_PAY_CHECK_NO_CROSS: "无法跨越升级", + ERR_USER_LEVEL_ORD_EXP: "付费订单已失效", + ERR_IS_BIND_THIRDPARTY: "该用户已经绑定了", + ERR_IS_BIND_THIRDOTHER: "该账号已经被绑定了", + ERR_IS_BIND_THIRDOTHERWECHAT: "该账号已经绑定了其他微信账号", + ERR_USER_LEVEL_UPDATE_CHECK_TASK_NO_DONE: "请完成指定任务", + ERR_USER_LEVEL_UPDATE_CHECK_NOT_FOUND_ORDER: "没有找到对应的订单", + ERR_USER_LEVEL_UPDATE_REPEAT: "不允许重复升级", + ERR_USER_NO_ACTIVE: "账户没激活", + ERR_USER_IS_BAN: "账户已被冻结", + ERR_SYSUNION_CONFIG: "联盟设置错误,请检查配置", + ERR_WECAHT_MINI: "小程序响应错误,请检查小程序配置", + ERR_WECAHT_MINI_CACHE: "获取小程序缓存失败", + ERR_WECAHT_MINI_DECODE: "小程序解密失败", + ERR_WECHAT_MINI_ACCESSTOKEN: "无法获取accesstoekn", + ERR_CURRENT_VIP_LEVEL_AUDITING: "当前等级正在审核中", + ERR_LEVEL_RENEW_SHOULD_KEEP_CURRENT: "续费只能在当前等级续费", + ERR_LEVEL_UPGRADE_APPLY_AUDITTING: "已有申请正在审核中,暂时不能申请", + ERR_LEVEL_TASK_PAY_TYPE: "任务付费类型错误", + ERR_BALANCE_NOT_ENOUGH: "余额不足", + ERR_ADMIN_PUSH: "后台MOB推送错误", + ERR_PLAN: "分拥方案出错", + ERR_MOB_CONFIG: "Mob 配置错误", + ERR_BAlANCE_PAY_ORDERTYPE: "无效余额支付订单类型", + ERR_PHONE_EXISTED: "手机号码已存在", + ERR_NOT_RESULT: "已加载完毕", + ERR_REVIEW: "审核模板错误", + ERR_USER_LEVEL_HAS_PAID: "该等级已经付过款", + ERR_IS_BIND_PDD_ERR: "获取PDD绑定信息失败", + // 404 + ERR_USER_NOTFOUND: "用户不存在", + ERR_USER_DEL: "账号被删除,如有疑问请联系客服", + ERR_SUP_NOTFOUND: "上级用户不存在", + ERR_LEVEL_MAP: "无等级映射关系", + ERR_MOD_NOTFOUND: "没有找到对应模块", + ERR_CLIPBOARD_PARSE: "无法解析剪切板内容", + ERR_NOT_FAN: "没有粉丝", + ERR_CLIPBOARD_UNSUP: "不支持该平台", + ERR_USER_LEVEL: "该等级已不存在", + ERR_LACK_PAY_CFG: "支付配置不完整", + ERR_NOT_LEVEL_TASK: "等级任务查找错误", + ERR_ITEM_NOT_FOUND: "找不到对应商品", + ERR_WX_CHECKFILE_NOTFOUND: "找不到微信校验文件", + ERR_USER_BIND_OWN: "不能填写自己的邀请码", + // 429 + ERR_TOO_MANY_REQUESTS: "请求频繁,请稍后重试", + // 500 内部错误 + ERR: "接口错误", + ERR_SMS: "短信发送出错", + ERR_CFG: "服务器配置错误", + ERR_UNMARSHAL: "JSON解码错误", + ERR_UNKNOWN: "未知错误", + ERR_ARKID_LOGIN: "登录失败", + ERR_MOBILE_NO_EXIST: "该用户未设定手机号", + ERR_FORBIDEN_VALID: "验证码错误", + ERR_CFG_CACHE: "获取配置缓存失败", + ERR_DB_ORM: "数据操作失败", + ERR_REPEAT_RELATE: "重复关联", + ERR_ZHIMENG_CONVERT_ERR: "智盟转链失败", + ERR_MOB_FORBIDEN: "Mob调用失败", + ERR_ALIPAY_ERR: "支付宝参数错误", + ERR_ALIPAY_SETTING: "请在后台正确配置支付宝", + ERR_ALIPAY_ORDERTYPE: "无效支付宝订单类型", + ERR_ALIPAY_ORDER_ERR: "订单创建错误", + ERR_PAY_ERR: "未找到支付方式", + ERR_SEARCH_ERR: "暂无该分类商品", + ERR_LEVEL_REACH_TOP: "已经是最高等级", + ERR_USER_CHECK_ERR: "校验失败", + ERR_INIT_RABBITMQ: "连接mq失败", +} diff --git a/app/e/error.go b/app/e/error.go new file mode 100644 index 0000000..2564174 --- /dev/null +++ b/app/e/error.go @@ -0,0 +1,72 @@ +package e + +import ( + "fmt" + "path" + "runtime" +) + +type E struct { + Code int // 错误码 + msg string // 报错代码 + st string // 堆栈信息 +} + +func NewErrCode(code int) error { + if msg, ok := MsgFlags[code]; ok { + return E{code, msg, stack(3)} + } + return E{ERR_UNKNOWN, "unknown", stack(3)} +} + +func NewErr(code int, msg string) error { + return E{code, msg, stack(3)} +} + +func NewErrf(code int, msg string, args ...interface{}) error { + return E{code, fmt.Sprintf(msg, args), stack(3)} +} + +func (e E) Error() string { + return e.msg +} + +func stack(skip int) string { + stk := make([]uintptr, 32) + str := "" + l := runtime.Callers(skip, stk[:]) + for i := 0; i < l; i++ { + f := runtime.FuncForPC(stk[i]) + name := f.Name() + file, line := f.FileLine(stk[i]) + str += fmt.Sprintf("\n%-30s[%s:%d]", name, path.Base(file), line) + } + return str +} + +// ErrorIsAccountBan is 检查这个账号是否被禁用的错误 +func ErrorIsAccountBan(e error) bool { + err, ok := e.(E) + if ok && err.Code == 403029 { + return true + } + return false +} + +// ErrorIsAccountNoActive is 检查这个账号是否被禁用的错误 +func ErrorIsAccountNoActive(e error) bool { + err, ok := e.(E) + if ok && err.Code == 403028 { + return true + } + return false +} + +// ErrorIsUserDel is 检查这个账号是否被删除 +func ErrorIsUserDel(e error) bool { + err, ok := e.(E) + if ok && err.Code == 403053 { + return true + } + return false +} diff --git a/app/e/msg.go b/app/e/msg.go new file mode 100644 index 0000000..f8450a5 --- /dev/null +++ b/app/e/msg.go @@ -0,0 +1,212 @@ +package e + +import ( + "applet/app/utils" + "encoding/json" + "net/http" + + "github.com/gin-gonic/gin" + + "applet/app/utils/logx" +) + +// GetMsg get error information based on Code +// 因为这里code是自己控制的, 因此没考虑报错信息 +func GetMsg(code int) (int, string) { + if msg, ok := MsgFlags[code]; ok { + return code / 1000, msg + } + if http.StatusText(code) == "" { + code = 200 + } + return code, MsgFlags[ERR_BAD_REQUEST] +} + +// 成功输出, fields 是额外字段, 与code, msg同级 +func OutSuc(c *gin.Context, data interface{}, fields map[string]interface{}) { + res := gin.H{ + "code": 1, + "msg": "ok", + "data": data, + } + if fields != nil { + for k, v := range fields { + res[k] = v + } + } + jsonData, _ := json.Marshal(res) + strs := string(jsonData) + if c.GetString("translate_open") != "" { + strs = utils.ReadReverse(c, string(jsonData)) + } + if utils.GetApiVersion(c) > 0 && utils.CheckUri(c) > 0 { //加了签名校验只返回加密的字符串 + strs = utils.ResultAes(c, []byte(strs)) + } + c.Writer.WriteString(strs) +} + +func OutSucByLianlian(c *gin.Context, code string, msg string, data interface{}) { + res := gin.H{ + "code": code, + "msg": msg, + "data": data, + } + jsonData, _ := json.Marshal(res) + strs := string(jsonData) + c.Writer.WriteString(strs) + +} +func OutSucPure(c *gin.Context, data interface{}, fields map[string]interface{}) { + res := gin.H{ + "code": 1, + "msg": "ok", + "data": data, + } + if fields != nil { + for k, v := range fields { + res[k] = v + } + } + jsonData, _ := json.Marshal(res) + strs := string(jsonData) + if c.GetString("translate_open") != "" { + strs = utils.ReadReverse(c, string(jsonData)) + } + if utils.GetApiVersion(c) > 0 && utils.CheckUri(c) > 0 { //加了签名校验只返回加密的字符串 + strs = utils.ResultAes(c, []byte(strs)) + } + c.Writer.WriteString(strs) + +} + +// 错误输出 +func OutErr(c *gin.Context, code int, err ...interface{}) { + statusCode, msg := GetMsg(code) + if len(err) > 0 && err[0] != nil { + e := err[0] + switch v := e.(type) { + case E: + statusCode = v.Code / 1000 + msg = v.Error() + logx.Error(v.msg + ": " + v.st) // 记录堆栈信息 + case error: + logx.Error(v) + break + case string: + msg = v + case int: + if _, ok := MsgFlags[v]; ok { + msg = MsgFlags[v] + } + } + } + if c.GetString("translate_open") != "" { + msg = utils.ReadReverse(c, msg) + } + if utils.GetApiVersion(c) > 0 && utils.CheckUri(c) > 0 { //加了签名校验只返回加密的字符串 + jsonData, _ := json.Marshal(gin.H{ + "code": code, + "msg": msg, + "data": []struct{}{}, + }) + str := utils.ResultAes(c, jsonData) + if code > 100000 { + code = int(utils.FloatFormat(float64(code/1000), 0)) + } + c.Status(500) + c.Writer.WriteString(str) + } else { + c.AbortWithStatusJSON(statusCode, gin.H{ + "code": code, + "msg": msg, + "data": []struct{}{}, + }) + } + +} +func OutErrSecond(c *gin.Context, code int, err ...interface{}) { + statusCode, msg := GetMsg(code) + if len(err) > 0 && err[0] != nil { + e := err[0] + switch v := e.(type) { + case E: + statusCode = v.Code / 1000 + msg = v.Error() + logx.Error(v.msg + ": " + v.st) // 记录堆栈信息 + case error: + logx.Error(v) + break + case string: + msg = v + case int: + if _, ok := MsgFlags[v]; ok { + msg = MsgFlags[v] + } + } + } + if c.GetString("translate_open") != "" { + msg = utils.ReadReverse(c, msg) + } + if utils.GetApiVersion(c) > 0 && utils.CheckUri(c) > 0 { //加了签名校验只返回加密的字符串 + jsonData, _ := json.Marshal(gin.H{ + "code": code, + "msg": msg, + "data": "", + }) + str := utils.ResultAes(c, jsonData) + if code > 100000 { + code = int(utils.FloatFormat(float64(code/1000), 0)) + } + c.Status(500) + c.Writer.WriteString(str) + } else { + c.AbortWithStatusJSON(statusCode, gin.H{ + "code": code, + "msg": msg, + "data": "", + }) + } + +} + +// 重定向 +func OutRedirect(c *gin.Context, code int, loc string) { + if code < 301 || code > 308 { + code = 303 + } + c.Redirect(code, loc) + c.Abort() +} +func DouYouReturnMsg(c *gin.Context, statusCode, msg string) { + res := gin.H{ + "status_code": statusCode, + } + if msg != "" { + res["message"] = msg + } + jsonData, _ := json.Marshal(res) + strs := string(jsonData) + c.Writer.WriteString(strs) +} +func MeituanLmReturnMsg(c *gin.Context, statusCode, msg string) { + res := gin.H{ + "errcode": statusCode, + } + if msg != "" { + res["errmsg"] = msg + } + jsonData, _ := json.Marshal(res) + strs := string(jsonData) + c.Writer.WriteString(strs) +} +func TaskBoxReturnMsg(c *gin.Context, statusCode int, msg string) { + res := gin.H{ + "code": statusCode, + } + if msg != "" { + res["message"] = msg + } + jsonData, _ := json.Marshal(res) + strs := string(jsonData) + c.Writer.WriteString(strs) +} diff --git a/app/e/set_cache.go b/app/e/set_cache.go new file mode 100644 index 0000000..45337a1 --- /dev/null +++ b/app/e/set_cache.go @@ -0,0 +1,8 @@ +package e + +func SetCache(cacheTime int64) map[string]interface{} { + if cacheTime == 0 { + return map[string]interface{}{"cache_time": cacheTime} + } + return map[string]interface{}{"cache_time": cacheTime} +} diff --git a/app/enum/enum_merchant_coupon_scheme.go b/app/enum/enum_merchant_coupon_scheme.go new file mode 100644 index 0000000..4d8e986 --- /dev/null +++ b/app/enum/enum_merchant_coupon_scheme.go @@ -0,0 +1,190 @@ +package enum + +// ActCouponType 优惠券类型 +type ActCouponType int + +const ( + ActCouponTypeImmediate ActCouponType = iota + 1 // 立减 + ActCouponTypeReachReduce // 满减 + ActCouponTypeReachDiscount // 满折 +) + +func (em ActCouponType) String() string { + switch em { + case ActCouponTypeImmediate: + return "立减券" + case ActCouponTypeReachReduce: + return "满减券" + case ActCouponTypeReachDiscount: + return "折扣券" + default: + return "未知类型" + } +} + +// ActCouponSendWay 发放形式 +type ActCouponSendWay int + +const ( + ActCouponSendWayPositive ActCouponSendWay = iota + 1 + ActCouponSendWayManual +) + +func (em ActCouponSendWay) String() string { + switch em { + case ActCouponSendWayPositive: + return "主动发放" + case ActCouponSendWayManual: + return "手动领取" + default: + return "未知类型" + } +} + +// ActCouponSendTimeType 发放时间类型 +type ActCouponSendTimeType int + +const ( + ActCouponSendTimeTypeImmediate ActCouponSendTimeType = iota + 1 + ActCouponSendTimeTypeTiming +) + +func (em ActCouponSendTimeType) String() string { + switch em { + case ActCouponSendTimeTypeImmediate: + return "立即发放" + case ActCouponSendTimeTypeTiming: + return "定时" + default: + return "未知类型" + } +} + +// ActCouponSendUserType 发放用户 +type ActCouponSendUserType int + +const ( + ActCouponSendUserTypeLevel ActCouponSendUserType = iota + 1 + ActCouponSendUserTypeAll + ActCouponSendUserTypeSpecify +) + +func (em ActCouponSendUserType) String() string { + switch em { + case ActCouponSendUserTypeLevel: + return "指定会员等级" + case ActCouponSendUserTypeAll: + return "所有人可领" + case ActCouponSendUserTypeSpecify: + return "指定用户" + default: + return "未知类型" + } +} + +// ActCouponValidTimeType 有效时间 +type ActCouponValidTimeType int + +const ( + ActCouponValidTimeTypeFix ActCouponValidTimeType = iota + 1 // 固定日期 + ActCouponValidTimeTypeXDay // 领取当日开始计算有效期 + ActCouponValidTimeTypeXNextDay // 领取次日开始计算有效期 +) + +func (em ActCouponValidTimeType) String() string { + switch em { + case ActCouponValidTimeTypeFix: + return "固定日期" + case ActCouponValidTimeTypeXDay: + return "自领取当日起,%d天内有效" + case ActCouponValidTimeTypeXNextDay: + return "自领取次日起,%d天内有效" + default: + return "未知类型" + } +} + +// ActCouponUseRule 使用规则 +type ActCouponUseRule int + +const ( + ActCouponUseRuleAll ActCouponUseRule = iota + 1 // 全部商品可用 + ActCouponUseRuleSpecifyGoods // 仅可用于指定商品 + ActCouponUseRuleSpecifyActivity // 可用于活动类型 +) + +func (em ActCouponUseRule) String() string { + switch em { + case ActCouponUseRuleAll: + return "全部商品可用" + case ActCouponUseRuleSpecifyGoods: + return "仅可用于指定商品" + case ActCouponUseRuleSpecifyActivity: + return "可用于活动类型" + default: + return "未知类型" + } +} + +type ActCouponUseActivityType int + +const ( + ActCouponUseActivityTypeForGroup ActCouponUseActivityType = iota + 1 + ActCouponUseActivityTypeForSecondKill + ActCouponUseActivityTypeForBargain +) + +func (em ActCouponUseActivityType) String() string { + switch em { + case ActCouponUseActivityTypeForGroup: + return "拼团活动" + case ActCouponUseActivityTypeForSecondKill: + return "秒杀活动" + case ActCouponUseActivityTypeForBargain: + return "砍价活动" + default: + return "未知类型" + } +} + +type ActCouponSendState int + +const ( + ActCouponSendStateUnProvide ActCouponSendState = iota + 1 // 未发放 + ActCouponSendStateProvide // 已发放 + ActCouponSendStateProviding // 发放中 +) + +func (em ActCouponSendState) String() string { + switch em { + case ActCouponSendStateUnProvide: + return "未发放" + case ActCouponSendStateProvide: + return "已发放" + case ActCouponSendStateProviding: + return "发放中" + default: + return "未知类型" + } +} + +type ActUserCouponUseState int + +const ( + ActUserCouponUseStateUnUse ActUserCouponUseState = iota // 未使用 + ActUserCouponUseStateUsed // 已使用 + ActUserCouponUseStateUnValid // 失效 +) + +func (em ActUserCouponUseState) String() string { + switch em { + case ActUserCouponUseStateUnUse: + return "未使用" + case ActUserCouponUseStateUsed: + return "已使用" + case ActUserCouponUseStateUnValid: + return "失效" + default: + return "未知类型" + } +} diff --git a/app/hdl/hdl_cate.go b/app/hdl/hdl_cate.go new file mode 100644 index 0000000..084cd69 --- /dev/null +++ b/app/hdl/hdl_cate.go @@ -0,0 +1,10 @@ +package hdl + +import ( + "applet/app/svc" + "github.com/gin-gonic/gin" +) + +func Cate(c *gin.Context) { + svc.Cate(c) +} diff --git a/app/hdl/hdl_goods.go b/app/hdl/hdl_goods.go new file mode 100644 index 0000000..346a4be --- /dev/null +++ b/app/hdl/hdl_goods.go @@ -0,0 +1,16 @@ +package hdl + +import ( + "applet/app/svc" + "github.com/gin-gonic/gin" +) + +func Goods(c *gin.Context) { + svc.Goods(c) +} +func GoodsSku(c *gin.Context) { + svc.GoodsSku(c) +} +func GoodsCoupon(c *gin.Context) { + svc.GoodsCoupon(c) +} diff --git a/app/hdl/hdl_order.go b/app/hdl/hdl_order.go new file mode 100644 index 0000000..6f6f98f --- /dev/null +++ b/app/hdl/hdl_order.go @@ -0,0 +1,28 @@ +package hdl + +import ( + "applet/app/svc" + "github.com/gin-gonic/gin" +) + +func OrderTotal(c *gin.Context) { + svc.OrderTotal(c) +} +func OrderCreate(c *gin.Context) { + svc.OrderCreate(c) +} +func OrderCoupon(c *gin.Context) { + svc.OrderCoupon(c) +} +func OrderCancel(c *gin.Context) { + svc.OrderCancel(c) +} +func OrderList(c *gin.Context) { + svc.OrderList(c) +} +func OrderCate(c *gin.Context) { + svc.OrderCate(c) +} +func OrderDetail(c *gin.Context) { + svc.OrderDetail(c) +} diff --git a/app/hdl/hdl_pay.go b/app/hdl/hdl_pay.go new file mode 100644 index 0000000..5977a5a --- /dev/null +++ b/app/hdl/hdl_pay.go @@ -0,0 +1,37 @@ +package hdl + +import ( + "applet/app/e" + "applet/app/svc" + "github.com/gin-gonic/gin" +) + +func Pay(c *gin.Context) { + orderType := c.Param("orderType") + payMethod := c.Param("payMethod") + if orderType == "" || payMethod == "" { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + payFunc, ok := svc.PayFuncList[orderType][payMethod] + if !ok || payFunc == nil { + e.OutErr(c, e.ERR, e.NewErr(500, "不存在该支付方式")) + return + } + r, err := payFunc(c) + if err != nil { + switch err.(type) { + case e.E: + err1 := err.(e.E) + e.OutErr(c, err1.Code, err1.Error()) + return + default: + e.OutErr(c, e.ERR_PAY_ERR, e.NewErr(e.ERR_PAY_ERR, err.Error())) + return + } + } + e.OutSuc(c, r, nil) + return + + return +} diff --git a/app/hdl/hdl_store.go b/app/hdl/hdl_store.go new file mode 100644 index 0000000..cb73d25 --- /dev/null +++ b/app/hdl/hdl_store.go @@ -0,0 +1,29 @@ +package hdl + +import ( + "applet/app/e" + "applet/app/svc" + "github.com/gin-gonic/gin" +) + +func BankStoreCate(c *gin.Context) { + var res = []map[string]string{ + {"name": "全部网点", "value": ""}, + {"name": "附近网点", "value": "1"}, + {"name": "关注网点", "value": "2"}, + } + e.OutSuc(c, res, nil) + return +} +func BankStore(c *gin.Context) { + svc.BankStore(c) +} +func Store(c *gin.Context) { + svc.Store(c) +} +func StoreAddLike(c *gin.Context) { + svc.StoreAddLike(c) +} +func StoreCancelLike(c *gin.Context) { + svc.StoreCancelLike(c) +} diff --git a/app/hdl/hdl_store_order.go b/app/hdl/hdl_store_order.go new file mode 100644 index 0000000..5dd3f41 --- /dev/null +++ b/app/hdl/hdl_store_order.go @@ -0,0 +1,19 @@ +package hdl + +import ( + "applet/app/svc" + "github.com/gin-gonic/gin" +) + +func StoreOrderList(c *gin.Context) { + svc.StoreOrderList(c) +} +func StoreOrderCate(c *gin.Context) { + svc.StoreOrderCate(c) +} +func StoreOrderDetail(c *gin.Context) { + svc.StoreOrderDetail(c) +} +func StoreOrderConfirm(c *gin.Context) { + svc.StoreOrderConfirm(c) +} diff --git a/app/lib/alipay/api.go b/app/lib/alipay/api.go new file mode 100644 index 0000000..6c5da5f --- /dev/null +++ b/app/lib/alipay/api.go @@ -0,0 +1,334 @@ +package alipay + +import ( + "applet/app/cfg" + "applet/app/md" + "applet/app/utils/logx" + "fmt" + + "github.com/iGoogle-ink/gopay" + "github.com/iGoogle-ink/gopay/alipay" +) + +func commClient(appID, priKey, RSA, PKCS string, paySet *md.PayData) (*alipay.Client, error) { + client := alipay.NewClient(appID, priKey, true) + client.DebugSwitch = gopay.DebugOn + //判断密钥的类型 + rsaType := alipay.RSA2 + pkcsType := alipay.PKCS1 + if RSA == "1" { + rsaType = alipay.RSA + } + if PKCS == "1" { + pkcsType = alipay.PKCS8 + } + if paySet.PayAliUseType == "1" { + rsaType = alipay.RSA2 + pkcsType = alipay.PKCS8 + } + //配置公共参数 + client.SetCharset("utf-8"). + SetSignType(rsaType). + SetPrivateKeyType(pkcsType) + //新支付宝支付 + if paySet.PayAliUseType == "1" { + appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn) + if err != nil { + return nil, err + } + if appCertSN == "" { + return nil, err + } + client.SetAppCertSN(appCertSN) + aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6" + client.SetAliPayRootCertSN(aliPayRootCertSN) + aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey) + if err != nil { + return nil, err + } + if aliPayPublicCertSN == "" { + return nil, err + } + client.SetAliPayPublicCertSN(aliPayPublicCertSN) + } + return client, nil +} + +//(实名证件信息比对验证预咨询) +//https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.preconsult +func UserCertverifyPreconsult(appID, priKey, userName, certNo, RSA, PKCS string, paySet *md.PayData) (*md.AlipayUserCertdocCertverifyPreconsult, error) { + client, _ := commClient(appID, priKey, RSA, PKCS, paySet) + //请求参数 + body := make(gopay.BodyMap) + body.Set("user_name", userName) + body.Set("cert_type", "IDENTITY_CARD") + body.Set("cert_no", certNo) + var aliPsp md.AlipayUserCertdocCertverifyPreconsult + err := client.PostAliPayAPISelfV2(body, "alipay.user.certdoc.certverify.preconsult", aliPsp) + if err != nil { + return nil, err + } + return &aliPsp, err +} + +//(实名证件信息比对验证咨询) +//https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.consult +func UserCertverifyConsult(appID, priKey, verifyId, RSA, PKCS string, paySet *md.PayData) (*md.AlipayUserCertdocCertverifyConsult, error) { + client, _ := commClient(appID, priKey, RSA, PKCS, paySet) + //请求参数 + body := make(gopay.BodyMap) + body.Set("verify_id", verifyId) + var aliPsp md.AlipayUserCertdocCertverifyConsult + err := client.PostAliPayAPISelfV2(body, "alipay.user.certdoc.certverify.consult", aliPsp) + if err != nil { + return nil, err + } + return &aliPsp, err +} + +// TradeAppPay is 支付宝APP支付 +// 抖音头条小程序使用APP调起 +func TradeAppPay(appID, priKey, subject, orderID, amount, notiURL, RSA, PKCS string, paySet *md.PayData) (string, error) { + //初始化支付宝客户端 + // appID 是在支付宝申请的APPID + // priKey 是支付宝私钥 + // subject 是支付订单的主题 + // orderID 是智莺这边生成的订单id + // amount 是付费金额 + // notiURL 通知地址url + // passback_params 回调通知参数 + + client := alipay.NewClient(appID, priKey, true) + client.DebugSwitch = gopay.DebugOn + //判断密钥的类型 + rsa_type := alipay.RSA2 + pkcs_type := alipay.PKCS1 + if RSA == "1" { + rsa_type = alipay.RSA + } + if PKCS == "1" { + pkcs_type = alipay.PKCS8 + } + if paySet.PayAliUseType == "1" { + rsa_type = alipay.RSA2 + pkcs_type = alipay.PKCS8 + } + //配置公共参数 + client.SetCharset("utf-8"). + SetSignType(rsa_type). + SetPrivateKeyType(pkcs_type) + if notiURL != "" { + client.SetNotifyUrl(notiURL) + } + //新支付宝支付 + if paySet.PayAliUseType == "1" { + appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn) + fmt.Println("-应用-") + fmt.Println(appCertSN) + if err != nil { + fmt.Println(err) + return "", err + } + if appCertSN == "" { + fmt.Println(err) + return "", err + } + client.SetAppCertSN(appCertSN) + //aliPayRootCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayRootCertSn) + aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6" + client.SetAliPayRootCertSN(aliPayRootCertSN) + aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey) + fmt.Println("-公钥-") + fmt.Println(aliPayPublicCertSN) + + if err != nil { + fmt.Println(err) + return "", err + } + if aliPayPublicCertSN == "" { + fmt.Println(err) + return "", err + } + client.SetAliPayPublicCertSN(aliPayPublicCertSN) + } + fmt.Println(client) + //请求参数 + body := make(gopay.BodyMap) + body.Set("subject", subject) + body.Set("body", subject) + body.Set("out_trade_no", orderID) + body.Set("total_amount", amount) + body.Set("timeout_express", "30m") + + // body.Set("passback_params", orderID) + //手机APP支付参数请求 + payParam, err := client.TradeAppPay(body) + if err != nil { + return "", logx.Warn(err) + } + return payParam, nil +} + +// TradeAppPay is 支付宝H5支付 +func TradeWapPay(appID, priKey, subject, orderID, amount, notiURL, RSA, PKCS, page_url string, paySet *md.PayData) (string, error) { + //aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB" + privateKey := priKey + //判断密钥的类型 + rsa_type := alipay.RSA2 + pkcs_type := alipay.PKCS1 + if RSA == "1" { + rsa_type = alipay.RSA + } + if PKCS == "1" { + pkcs_type = alipay.PKCS8 + } + if paySet.PayAliUseType == "1" { + rsa_type = alipay.RSA2 + pkcs_type = alipay.PKCS8 + } + //初始化支付宝客户端 + // appId:应用ID + // privateKey:应用秘钥 + // isProd:是否是正式环境 + client := alipay.NewClient(appID, privateKey, true) + //配置公共参数 + client.SetCharset("utf-8"). + SetSignType(rsa_type). + SetPrivateKeyType(pkcs_type). + SetReturnUrl(page_url). + SetNotifyUrl(notiURL) + //新支付宝支付 + if paySet.PayAliUseType == "1" { + appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn) + if err != nil { + fmt.Println(err) + return "", err + } + if appCertSN == "" { + fmt.Println(err) + return "", err + } + client.SetAppCertSN(appCertSN) + //aliPayRootCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayRootCertSn) + //if err != nil { + // fmt.Println(err) + // return "", err + //} + //if aliPayRootCertSN == "" { + // fmt.Println(err) + // return "", err + //} + aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6" + client.SetAliPayRootCertSN(aliPayRootCertSN) + aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey) + if err != nil { + fmt.Println(err) + return "", err + } + if aliPayPublicCertSN == "" { + fmt.Println(err) + return "", err + } + client.SetAliPayPublicCertSN(aliPayPublicCertSN) + } + //请求参数 + body := make(gopay.BodyMap) + body.Set("subject", subject) + body.Set("out_trade_no", orderID) + // quit_url is 用户付款中途退出返回商户网站的地址 + body.Set("quit_url", notiURL) + body.Set("total_amount", amount) + // product_code is 销售产品码,商家和支付宝签约的产品码 + body.Set("product_code", "QUICK_WAP_WAY") + //手机网站支付请求 + payUrl, err := client.TradeWapPay(body) + if err != nil { + return "", logx.Warn(err) + + } + return payUrl, nil +} + +// TradeAppPay is 支付宝小程序本身支付 +func TradeCreate(appID, priKey, subject, orderID, amount, notiURL, RSA, PKCS string, paySet *md.PayData) (*alipay.TradeCreateResponse, error) { + //aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB" + privateKey := priKey + rsa_type := alipay.RSA2 + pkcs_type := alipay.PKCS1 + if RSA == "1" { + rsa_type = alipay.RSA + } + if PKCS == "1" { + pkcs_type = alipay.PKCS8 + } + if paySet.PayAliUseType == "1" { + rsa_type = alipay.RSA2 + pkcs_type = alipay.PKCS8 + } + //初始化支付宝客户端 + // appId:应用ID + // privateKey:应用私钥,支持PKCS1和PKCS8 + // isProd:是否是正式环境 + client := alipay.NewClient(appID, privateKey, true) + //配置公共参数 + client.SetCharset("utf-8"). + SetSignType(rsa_type). + SetPrivateKeyType(pkcs_type). + SetNotifyUrl(notiURL) + if paySet.PayAliUseType == "1" { + appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn) + if err != nil { + fmt.Println(err) + return nil, err + } + if appCertSN == "" { + fmt.Println(err) + return nil, err + } + client.SetAppCertSN(appCertSN) + //aliPayRootCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayRootCertSn) + //if err != nil { + // fmt.Println(err) + // return nil, err + //} + //if aliPayRootCertSN == "" { + // fmt.Println(err) + // return nil, err + //} + aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6" + client.SetAliPayRootCertSN(aliPayRootCertSN) + aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey) + if err != nil { + fmt.Println(err) + return nil, err + } + if aliPayPublicCertSN == "" { + fmt.Println(err) + return nil, err + } + client.SetAliPayPublicCertSN(aliPayPublicCertSN) + } + //请求参数 + body := make(gopay.BodyMap) + body.Set("subject", subject) + // 支付宝小程序支付时 buyer_id 为必传参数,需要提前获取,获取方法如下两种 + // 1、alipay.SystemOauthToken() 返回取值:rsp.SystemOauthTokenResponse.UserId + // 2、client.SystemOauthToken() 返回取值:aliRsp.SystemOauthTokenResponse.UserId + buyer_id, err := client.SystemOauthToken(body) + if err != nil { + return nil, logx.Warn(err) + } + body.Set("buyer_id", buyer_id) + body.Set("out_trade_no", orderID) + body.Set("total_amount", amount) + //创建订单 + aliRsp, err := client.TradeCreate(body) + + if err != nil { + return nil, logx.Warn(err) + } + logx.Warn("aliRsp:", *aliRsp) + logx.Warn("aliRsp.TradeNo:", aliRsp.Response.TradeNo) + return aliRsp, nil + +} diff --git a/app/lib/arkid/api.go b/app/lib/arkid/api.go new file mode 100644 index 0000000..685a0bc --- /dev/null +++ b/app/lib/arkid/api.go @@ -0,0 +1,148 @@ +package arkid + +import ( + "encoding/json" + "errors" + "fmt" + + "applet/app/cfg" + "applet/app/utils" + "applet/app/utils/cache" + "applet/app/utils/logx" +) + +func arkidLogin(args map[string]interface{}) ([]byte, error) { + url := cfg.ArkID.Url + "/siteapi/v1/ucenter/login/" + b, err := json.Marshal(args) + if err != nil { + return nil, logx.Error(err) + } + var d []byte + d, err = utils.CurlPost(url, b, nil) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func arkidLogout(token string) ([]byte, error) { + // fmt.Println(cfg.ArkID.Url) + url := cfg.ArkID.Url + "/siteapi/v1/revoke/token/" + h := map[string]string{"authorization": fmt.Sprintf("token %s", token)} + d, err := utils.CurlPost(url, "", h) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func arkidUserInfo(token string) ([]byte, error) { + url := cfg.ArkID.Url + "/siteapi/v1/auth/token/" + h := map[string]string{"authorization": fmt.Sprintf("token %s", token)} + d, err := utils.CurlGet(url, h) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func arkidRegister(args map[string]interface{}) ([]byte, error) { + url := cfg.ArkID.Url + "/siteapi/oneid/user/" + b, err := json.Marshal(args) + if err != nil { + return nil, logx.Error(err) + } + admin, err := getArkIDAdmin() + if err != nil { + return nil, logx.Error(err) + } + h := map[string]string{"authorization": fmt.Sprintf("token %s", admin.Token)} + var d []byte + d, err = utils.CurlPost(url, b, h) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func arkidAppAccessWhiteList(args map[string]interface{}, permName string) ([]byte, error) { + if permName == "" { + return nil, errors.New("The perm_name arg must required") + } + path := fmt.Sprintf("/siteapi/oneid/perm/%s/owner/", permName) + url := cfg.ArkID.Url + path + b, err := json.Marshal(args) + if err != nil { + return nil, logx.Error(err) + } + admin, err := getArkIDAdmin() + if err != nil { + return nil, logx.Error(err) + } + // fmt.Println(admin.Token) + h := map[string]string{"authorization": fmt.Sprintf("token %s", admin.Token)} + var d []byte + d, err = utils.CurlPatch(url, b, h) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func arkidUserDelete(username string) ([]byte, error) { + if username == "" { + return nil, errors.New("The username arg must required") + } + path := fmt.Sprintf("/siteapi/oneid/user/%s/", username) + url := cfg.ArkID.Url + path + admin, err := getArkIDAdmin() + if err != nil { + return nil, logx.Error(err) + } + // fmt.Println(admin.Token) + h := map[string]string{"authorization": fmt.Sprintf("token %s", admin.Token)} + var d []byte + d, err = utils.CurlDelete(url, nil, h) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func arkidUserUpdate(username string, args map[string]interface{}) ([]byte, error) { + if username == "" { + return nil, errors.New("The username arg must required") + } + b, err := json.Marshal(args) + if err != nil { + return nil, logx.Error(err) + } + path := fmt.Sprintf("/siteapi/oneid/user/%s/", username) + url := cfg.ArkID.Url + path + var admin *ArkIDUser + admin, err = getArkIDAdmin() + if err != nil { + return nil, logx.Error(err) + } + h := map[string]string{"authorization": fmt.Sprintf("token %s", admin.Token)} + d, err := utils.CurlPatch(url, b, h) + if err != nil { + return nil, logx.Error(err) + } + return d, nil +} + +func getArkIDAdmin() (*ArkIDUser, error) { + c, err := cache.Bytes(cache.Get(ARKID_ADMIN_TOKEN)) + if err != nil { + logx.Error(err) + } + if c != nil && err == nil { + admin := new(ArkIDUser) + if err = json.Unmarshal(c, admin); err != nil { + return admin, err + } + return admin, nil + } + return Init() +} diff --git a/app/lib/arkid/base.go b/app/lib/arkid/base.go new file mode 100644 index 0000000..fff9511 --- /dev/null +++ b/app/lib/arkid/base.go @@ -0,0 +1,6 @@ +package arkid + +const ( + BASE_URL = "http://k8s.arkid.izhim.cn" + ARKID_ADMIN_TOKEN = "arkid_admin_token" +) diff --git a/app/lib/arkid/init.go b/app/lib/arkid/init.go new file mode 100644 index 0000000..060537c --- /dev/null +++ b/app/lib/arkid/init.go @@ -0,0 +1,24 @@ +package arkid + +import ( + "applet/app/cfg" + "applet/app/utils" + "applet/app/utils/cache" +) + +// Init is cache token to redis +func Init() (*ArkIDUser, error) { + arkidsdk := NewArkID() + arkadmin := new(ArkIDUser) + err := arkidsdk.SelectFunction("arkid_login").WithArgs(RequestBody{ + Username: cfg.ArkID.Admin, + Password: cfg.ArkID.AdminPassword, + }).Result(arkadmin) + if err != nil { + panic(err) + } + + // token 默认30天过期 + cache.SetEx(ARKID_ADMIN_TOKEN, utils.Serialize(arkadmin), 2592000) + return arkadmin, err +} diff --git a/app/lib/arkid/model.go b/app/lib/arkid/model.go new file mode 100644 index 0000000..82882ab --- /dev/null +++ b/app/lib/arkid/model.go @@ -0,0 +1,62 @@ +package arkid + +type ArkIDUser struct { + Token string `json:"token"` + UserID int `json:"user_id"` + Username string `json:"username"` + Name string `json:"name"` + Email string `json:"email"` + Mobile string `json:"mobile"` + EmployeeNumber string `json:"employee_number"` + Gender int `json:"gender"` + Perms []string `json:"perms"` + Avatar string `json:"avatar"` + Roles []string `json:"roles"` + PrivateEmail string `json:"private_email"` + Position string `json:"position"` + IsSettled bool `json:"is_settled"` + IsManager bool `json:"is_manager"` + IsAdmin bool `json:"is_admin"` + IsExternUser bool `json:"is_extern_user"` + OriginVerbose string `json:"origin_verbose"` + RequireResetPassword bool `json:"require_reset_password"` + HasPassword bool `json:"has_password"` +} + +type RequestBody struct { + Token string `json:"token,omitempty"` + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + User struct { + Avatar string `json:"avatar,omitempty"` + Email string `json:"email,omitempty"` + EmployeeNumber string `json:"employee_number,omitempty"` + Gender int `json:"gende,omitemptyr"` + Mobile string `json:"mobile,omitempty"` + Name string `json:"name,omitempty"` + Position string `json:"position,omitempty"` + PrivateEmail string `json:"private_email,omitempty"` + Username string `json:"username,omitempty"` + Depts interface{} `json:"depts,omitempty"` + Roles interface{} `json:"roles,omitempty"` + Nodes []interface{} `json:"nodes,omitempty"` + IsSettled bool `json:"is_settled,omitempty"` + Password string `json:"password,omitempty"` + RequireResetPassword bool `json:"require_reset_password,omitempty"` + HasPassword bool `json:"has_password,omitempty"` + } `json:"user,omitempty"` + NodeUids []string `json:"node_uids,omitempty"` + PermName string `json:"perm_name,omitempty"` + UserPermStatus []struct { + UID string `json:"uid,omitempty"` + Status int `json:"status,omitempty"` + } `json:"user_perm_status,omitempty"` +} + +type AppAccessWhiteListResult struct { + UserPermStatus []struct { + UID string `json:"uid"` + Status int `json:"status"` + } `json:"user_perm_status"` + NodePermStatus []interface{} `json:"node_perm_status"` +} diff --git a/app/lib/arkid/sdk.go b/app/lib/arkid/sdk.go new file mode 100644 index 0000000..59b45c2 --- /dev/null +++ b/app/lib/arkid/sdk.go @@ -0,0 +1,165 @@ +package arkid + +import ( + "applet/app/utils/cache" + "applet/app/utils/logx" + "encoding/json" + "errors" + "fmt" +) + +type SDK struct { + response []byte + fmap map[string]func(RequestBody) + fname string + err error +} + +//Init is init sdk +func (s *SDK) Init() { + s.fmap = make(map[string]func(RequestBody)) +} + +//SelectFunction is choose func +func (s *SDK) SelectFunction(fname string) *SDK { + s.fname = fname + return s +} + +//WithArgs is request args +func (s *SDK) WithArgs(r RequestBody) *SDK { + f := s.fmap[s.fname] + f(r) + return s +} + +//Result is result to p +func (s *SDK) Result(p interface{}) error { + if s.err != nil { + return s.err + } + if string(s.response) == "" { + return nil + } + if err := json.Unmarshal(s.response, p); err != nil { + return logx.Error(string(s.response), err) + } + return nil +} + +// Register is register func +func (s *SDK) Register(name string, f func(RequestBody)) { + s.fmap[name] = f +} + +//getAdmin arkid 用户的信息 ,主要是token +func (s *SDK) arkidLogin(r RequestBody) { + postData := map[string]interface{}{ + "username": r.Username, + "password": r.Password, + } + s.response, s.err = arkidLogin(postData) +} + +func (s *SDK) arkidRegister(r RequestBody) { + postData := map[string]interface{}{} + b, err := json.Marshal(r) + if err != nil { + s.err = err + } + if err := json.Unmarshal(b, &postData); err != nil { + s.err = err + } + s.response, s.err = arkidRegister(postData) +} + +func (s *SDK) arkidAppAccessWhiteList(r RequestBody) { + postData := map[string]interface{}{} + b, err := json.Marshal(r) + if err != nil { + s.err = err + } + if err := json.Unmarshal(b, &postData); err != nil { + s.err = err + } + s.response, s.err = arkidAppAccessWhiteList(postData, r.PermName) +} + +func (s *SDK) arkidUserInfo(r RequestBody) { + s.response, s.err = arkidUserInfo(r.Token) +} + +func (s *SDK) arkidUserDelete(r RequestBody) { + s.response, s.err = arkidUserDelete(r.Username) +} + +func (s *SDK) arkidUserUpdate(r RequestBody) { + postData := map[string]interface{}{} + b, err := json.Marshal(r.User) + if err != nil { + s.err = err + } + if err := json.Unmarshal(b, &postData); err != nil { + s.err = err + } + s.response, s.err = arkidUserUpdate(r.Username, postData) +} + +func (s *SDK) arkidLogout(r RequestBody) { + s.response, s.err = arkidLogout(r.Token) +} + +// NewArkID is con +func NewArkID() *SDK { + sdk := new(SDK) + sdk.Init() + sdk.Register("arkid_login", sdk.arkidLogin) + sdk.Register("arkid_register", sdk.arkidRegister) + sdk.Register("arkid_app_access_white_list", sdk.arkidAppAccessWhiteList) + sdk.Register("arkid_delete_user", sdk.arkidUserDelete) + sdk.Register("arkid_user_info", sdk.arkidUserInfo) + sdk.Register("arkid_user_update", sdk.arkidUserUpdate) + sdk.Register("arkid_logout", sdk.arkidLogout) + return sdk +} + +// GetArkIDUser is get arkid token if redis is existed unless send request to arkid +func GetArkIDUser(username string, MD5passowrd string) (*ArkIDUser, error) { + key := fmt.Sprintf("arkid_user_%s", username) + arkidUser := new(ArkIDUser) + c, err := cache.GetBytes(key) + if c != nil && err == nil { + if err := json.Unmarshal(c, arkidUser); err != nil { + return arkidUser, err + } + if arkidUser.Token == "" { + + return arkidUser, errors.New("Get Arkid User error, Token missing") + } + + return arkidUser, err + } + arkidSdk := NewArkID() + err = arkidSdk.SelectFunction("arkid_login").WithArgs(RequestBody{ + Username: username, + Password: MD5passowrd, + }).Result(arkidUser) + if arkidUser.Token == "" { + return arkidUser, errors.New("Get Arkid User error, Token missing") + } + // 缓存30天 + // cache.SetEx(key, utils.Serialize(arkidUser), 2592000) + return arkidUser, err +} + +// RegisterRollback is 注册时的错误回滚 +func RegisterRollback(username string) error { + sdk := NewArkID() + err := sdk.SelectFunction("arkid_delete_user").WithArgs(RequestBody{ + Username: username, + }).Result(nil) + if err != nil { + return err + } + return nil +} diff --git a/app/lib/auth/base.go b/app/lib/auth/base.go new file mode 100644 index 0000000..a886c2e --- /dev/null +++ b/app/lib/auth/base.go @@ -0,0 +1,25 @@ +package auth + +import ( + "time" + + "github.com/dgrijalva/jwt-go" +) + +// TokenExpireDuration is jwt 过期时间 +const TokenExpireDuration = time.Hour * 4380 + +const RefreshTokenExpireDuration = time.Hour * 4380 + +var Secret = []byte("zyos") + +// JWTUser 如果想要保存更多信息,都可以添加到这个结构体中 +type JWTUser struct { + UID int `json:"uid"` + Username string `json:"username"` + Phone string `json:"phone"` + AppName string `json:"app_name"` + MiniOpenID string `json:"mini_open_id"` // 小程序的open_id + MiniSK string `json:"mini_session_key"` // 小程序的session_key + jwt.StandardClaims +} diff --git a/app/lib/mob/api.go b/app/lib/mob/api.go new file mode 100644 index 0000000..fb6887b --- /dev/null +++ b/app/lib/mob/api.go @@ -0,0 +1,297 @@ +package mob + +import ( + "applet/app/db" + "applet/app/e" + "applet/app/lib/sms" + "applet/app/lib/zhimeng" + "applet/app/utils" + "applet/app/utils/logx" + "bytes" + "crypto/cipher" + "crypto/des" + "crypto/md5" + "encoding/base64" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "net/http" + "sort" + "time" + + "github.com/gin-gonic/gin" + "github.com/tidwall/gjson" +) + +const base string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + +// Mob is mob sdk +var Mob *SDK + +// MobMap is 每个站长都要有自己的mob 对象 +var MobMap map[string]*SDK + +//Init 初始化 +func Init() { + // 后续可能要传请求的上下文来获取对应的配置 + // mob 目前都是我们来管理每个站长的app 所以使用template 库 + //fmt.Println("Mob SDK init ....") + ch := make(chan struct{}) // 只是做信号标志的话 空struct 更省点资源 + MobMap = make(map[string]*SDK) + // 初始化 + for k, e := range db.DBs { + m := db.SysCfgGetWithDb(e, k, "third_app_push_set") + if m == "" { + fmt.Printf("masterid:%s 找不到推送配置", k) + continue + } + key := gjson.Get(m, "mobAppKey").String() + secret := gjson.Get(m, "mobAppSecret").String() + if key == "" || secret == "" { + fmt.Println(k + ":mob no config") + continue + } + // fmt.Println(k, key, secret) + mob := new(SDK) + mob.AppKey = key + mob.AppSecret = secret + MobMap[k] = mob + fmt.Println(k + ":mob config success") + } + go func() { + ch <- struct{}{} + }() + + // 定时任务 + go func(MobMap map[string]*SDK, ch chan struct{}) { + <-ch + ticker := time.NewTicker(time.Duration(time.Second * 15)) + //每 15s 一次更新一次mob 配置 + for range ticker.C { + for k, e := range db.DBs { + if err := e.Ping(); err != nil { + logx.Info(err) + continue + } + m := db.SysCfgGetWithDb(e, k, "third_app_push_set") + if m == "" { + fmt.Printf("masterid:%s 找不到推送配置", k) + continue + } + key := gjson.Get(m, "mobAppKey").String() + secret := gjson.Get(m, "mobAppSecret").String() + if key == "" || secret == "" { + fmt.Println(k + ":mob no config") + continue + } + // fmt.Println(k, key, secret) + mob := new(SDK) + mob.AppKey = key + mob.AppSecret = secret + MobMap[k] = mob + // fmt.Println(k + ":mob config success") + } + } + }(MobMap, ch) +} + +// GetMobSDK is 获取mob 的sdk +func GetMobSDK(mid string) (*SDK, error) { + selectDB := db.DBs[mid] + m := db.SysCfgGetWithDb(selectDB, mid, "third_app_push_set") + if m == "" { + return nil, errors.New("获取不到推送配置") + } + key := gjson.Get(m, "mobAppKey").String() + secret := gjson.Get(m, "mobAppSecret").String() + if key == "" || secret == "" { + return nil, fmt.Errorf("%s mob not config", mid) + } + + return &SDK{AppKey: key, AppSecret: secret}, nil +} + +// SDK is mob_push 的sdk +type SDK struct { + AppKey string + AppSecret string +} + +//MobFreeLogin is 秒验 +func (s *SDK) MobFreeLogin(args map[string]interface{}) (string, error) { + var url string = "http://identify.verify.mob.com/auth/auth/sdkClientFreeLogin" + // https://www.mob.com/wiki/detailed/?wiki=miaoyan_for_fuwuduan_mianmifuwuduanjieru&id=78 + //加appkey + args["appkey"] = s.AppKey + //加签名 + args["sign"] = generateSign(args, s.AppSecret) + b, err := json.Marshal(args) + if err != nil { + return "", logx.Warn(err) + } + // 发送请求 + respBody, err := httpPostBody(url, b) + if err != nil { + return "", logx.Warn(err) + } + // 反序列化 + ret := struct { + Status int `json:"status"` + Error string `json:"error"` + Res interface{} `json:"res"` + }{} + // 要拿 ret 里面 Res 再解密 + if err := json.Unmarshal(respBody, &ret); err != nil { + return "", logx.Warn(err) + } + //fmt.Println(ret) + // ret里面的Res 反序列化为结构体 + res := struct { + IsValid int `json:"isValid"` + Phone string `json:"phone"` + }{} + // 判断是否返回正确 状态码 + if ret.Status == 200 { + decode, _ := base64Decode([]byte(ret.Res.(string))) + decr, _ := desDecrypt(decode, []byte(s.AppSecret)[0:8]) + if err := json.Unmarshal(decr, &res); err != nil { + return "", logx.Warn(err) + } + } + // 有效则拿出res 里的电话号码 + if res.IsValid == 1 { + return res.Phone, nil + } + // Status 不等于200 则返回空 + return "", fmt.Errorf("Mob error , status code %v ", ret.Status) +} + +// MobSMS is mob 的短信验证 +func (s *SDK) MobSMS(c *gin.Context, args map[string]interface{}) (bool, error) { + // mob 的短信验证 + // https://www.mob.com/wiki/detailed/?wiki=SMSSDK_for_yanzhengmafuwuduanxiaoyanjiekou&id=23 + url := "https://webapi.sms.mob.com/sms/verify" + //加appkey + args["appkey"] = s.AppKey + fmt.Println(args) + //fmt.Println(args) + // 发送请求 + respBody, err := utils.CurlPost(url, args, nil) + if err != nil { + fmt.Println(err) + return false, logx.Warn(err) + } + fmt.Println("=======================mob") + fmt.Println("mob", string(respBody)) + code := gjson.GetBytes(respBody, "status").Int() + if code == 468 { + return false, errors.New("验证码错误") + } + if code != 200 { + utils.FilePutContents("sms", string(respBody)) + return false, errors.New("验证码错误~") + } + + if c.GetString("not_deduction_doing") == "1" { //这是前面扣过了 + return true, nil + } + // TODO 成功后扣费暂时先接旧智盟 + sdk, err := sms.NewZhimengSMS(c).SelectFunction("deduction_doing").WithSMSArgs(map[string]interface{}{ + "mobile": args["phone"], + "getmsg": "1", + }).Result() + if err != nil { + return false, logx.Warn(err) + } + zr := sdk.ToInterface().(string) + if zr == "1" { + logx.Infof("旧智盟扣费成功 appkey %s", zhimeng.SMS_APP_KEY) + } + return true, nil +} + +func pkcs5UnPadding(origData []byte) []byte { + length := len(origData) + // 去掉最后一个字节 unpadding 次 + unpadding := int(origData[length-1]) + return origData[:(length - unpadding)] +} + +func desDecrypt(crypted, key []byte) ([]byte, error) { + block, err := des.NewCipher(key) + if err != nil { + return nil, err + } + blockMode := cipher.NewCBCDecrypter(block, []byte("00000000")) + origData := make([]byte, len(crypted)) + // origData := crypted + blockMode.CryptBlocks(origData, crypted) + origData = pkcs5UnPadding(origData) + // origData = ZeroUnPadding(origData) + return origData, nil +} + +func base64Decode(src []byte) ([]byte, error) { + var coder *base64.Encoding + coder = base64.NewEncoding(base) + return coder.DecodeString(string(src)) +} + +func httpPostBody(url string, msg []byte) ([]byte, error) { + resp, err := http.Post(url, "application/json;charset=utf-8", bytes.NewBuffer(msg)) + if err != nil { + return []byte(""), err + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + return body, err +} + +func generateSign(request map[string]interface{}, secret string) string { + ret := "" + var keys []string + for k := range request { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + ret = ret + fmt.Sprintf("%v=%v&", k, request[k]) + } + ret = ret[:len(ret)-1] + secret + + md5Ctx := md5.New() + md5Ctx.Write([]byte(ret)) + cipherStr := md5Ctx.Sum(nil) + return hex.EncodeToString(cipherStr) +} + +func Check(c *gin.Context, phone, zone, validCode string, ok1 bool) (bool, error) { + smsPlatform := sms.GetSmsPlatform(c) + + if smsPlatform == "mob" { + mob1, errr := GetMobSDK(c.GetString("mid")) + if errr != nil { + return false, e.NewErr(400, "mob配置错误") + } + send := map[string]interface{}{ + "phone": phone, + "zone": zone, + "code": validCode, + } + if zone == "" { + send["zone"] = "86" + } + c.Set("not_deduction_doing", "1") + ok, err := mob1.MobSMS(c, send) + fmt.Println(ok) + if err != nil { + fmt.Println(err) + return false, e.NewErr(400, "验证码校验错误") + } + + return ok, nil + } + return ok1, nil +} diff --git a/app/lib/mob/main.go b/app/lib/mob/main.go new file mode 100644 index 0000000..e76b515 --- /dev/null +++ b/app/lib/mob/main.go @@ -0,0 +1,15 @@ +package mob + +import "applet/app/svc" + +//NewMobSDK 构建一个Mobsdk对象 +func NewMobSDK() *SDK { + // 后续可能要传请求的上下文来获取对应的配置 + // mob 目前都是我们来管理每个站长的app 所以使用template 库 + key := svc.SysCfgGet(nil, "third_mob_app_key") + secret := svc.SysCfgGet(nil, "third_mob_app_secret") + mob := new(SDK) + mob.AppKey = key + mob.AppSecret = secret + return mob +} diff --git a/app/lib/qiniu/bucket_create.go b/app/lib/qiniu/bucket_create.go new file mode 100644 index 0000000..28d8106 --- /dev/null +++ b/app/lib/qiniu/bucket_create.go @@ -0,0 +1,16 @@ +package qiniu + +import ( + "github.com/qiniu/api.v7/v7/auth" + "github.com/qiniu/api.v7/v7/storage" +) + +func BucketCreate() error { + mac := auth.New(AK, SK) + cfg := storage.Config{ + // 是否使用https域名进行资源管理 + UseHTTPS: false, + } + bucketManager := storage.NewBucketManager(mac, &cfg) + return bucketManager.CreateBucket("", storage.RIDHuanan) +} diff --git a/app/lib/qiniu/bucket_delete.go b/app/lib/qiniu/bucket_delete.go new file mode 100644 index 0000000..6d41521 --- /dev/null +++ b/app/lib/qiniu/bucket_delete.go @@ -0,0 +1,18 @@ +package qiniu + +import ( + "github.com/qiniu/api.v7/v7/auth" + "github.com/qiniu/api.v7/v7/storage" +) + +func BucketDelete(bucketName string) error { + mac := auth.New(AK, SK) + + cfg := storage.Config{ + // 是否使用https域名进行资源管理 + UseHTTPS: false, + } + + bucketManager := storage.NewBucketManager(mac, &cfg) + return bucketManager.DropBucket(bucketName) +} diff --git a/app/lib/qiniu/bucket_get_domain.go b/app/lib/qiniu/bucket_get_domain.go new file mode 100644 index 0000000..f4cee3a --- /dev/null +++ b/app/lib/qiniu/bucket_get_domain.go @@ -0,0 +1,18 @@ +package qiniu + +import ( + "github.com/qiniu/api.v7/v7/auth" + "github.com/qiniu/api.v7/v7/storage" +) + +func BucketGetDomain(bucketName string) (string, error) { + mac := auth.New(AK, SK) + + cfg := storage.Config{UseHTTPS: false} + bucketManager := storage.NewBucketManager(mac, &cfg) + b, err := bucketManager.ListBucketDomains(bucketName) + if err != nil { + return "", err + } + return b[0].Domain, nil +} diff --git a/app/lib/qiniu/init.go b/app/lib/qiniu/init.go new file mode 100644 index 0000000..1d4346a --- /dev/null +++ b/app/lib/qiniu/init.go @@ -0,0 +1,22 @@ +package qiniu + +import ( + "applet/app/utils" +) + +var ( + AK = "MmxNdai23egjNUHjdzEVaTPdPCIbWzENz9BQuak3" + SK = "mElaFlM9O16rXp-ihoQdJ9KOH56naKm3MoyQBA59" + BUCKET = "dev-fnuoos" // 桶子名称 + BUCKET_SCHEME = "http" + BUCKET_REGION = "up-z2.qiniup.com" + Expires uint64 = 3600 +) + +func Init(ak, sk, bucket, region, scheme string) { + AK, SK, BUCKET, BUCKET_REGION, BUCKET_SCHEME = ak, sk, bucket, region, scheme +} + +func Sign(t string) string { + return utils.Md5(AK + SK + t) +} diff --git a/app/lib/qiniu/req_img_upload.go b/app/lib/qiniu/req_img_upload.go new file mode 100644 index 0000000..36c27ae --- /dev/null +++ b/app/lib/qiniu/req_img_upload.go @@ -0,0 +1,55 @@ +package qiniu + +import ( + "time" + + "github.com/qiniu/api.v7/v7/auth/qbox" + _ "github.com/qiniu/api.v7/v7/conf" + "github.com/qiniu/api.v7/v7/storage" + + "applet/app/md" + "applet/app/utils" +) + +// 请求图片上传地址信息 +func ReqImgUpload(f *md.FileCallback, callbackUrl string) interface{} { + if ext := utils.FileExt(f.FileName); ext == "png" || ext == "jpg" || ext == "jpeg" || ext == "gif" || ext == "bmp" || ext == "webp" { + f.Width = "$(imageInfo.width)" + f.Height = "$(imageInfo.height)" + } + f.Provider = "qiniu" + f.FileSize = "$(fsize)" + f.Hash = "$(etag)" + f.Bucket = "$(bucket)" + f.Mime = "$(mimeType)" + f.Time = utils.Int64ToStr(time.Now().Unix()) + f.Sign = Sign(f.Time) + putPolicy := storage.PutPolicy{ + Scope: BUCKET + ":" + f.FileName, // 使用覆盖方式时候必须请求里面有key,否则报错 + Expires: Expires, + ForceSaveKey: true, + SaveKey: f.FileName, + //MimeLimit: "image/*", // 只允许上传图片 + CallbackURL: callbackUrl, + CallbackBody: utils.SerializeStr(f), + CallbackBodyType: "application/json", + } + return &struct { + Method string `json:"method"` + Key string `json:"key"` + Host string `json:"host"` + Token string `json:"token"` + }{Key: f.FileName, Method: "POST", Host: BUCKET_SCHEME + "://" + BUCKET_REGION, Token: putPolicy.UploadToken(qbox.NewMac(AK, SK))} +} + +/* +form表单上传 +地址 : http://upload-z2.qiniup.com +header + - Content-Type : multipart/form-data + +body : + - key : 文件名 + - token : 生成token + - file : 待上传文件 +*/ diff --git a/app/lib/sms/sms.go b/app/lib/sms/sms.go new file mode 100644 index 0000000..f10dafd --- /dev/null +++ b/app/lib/sms/sms.go @@ -0,0 +1,122 @@ +package sms + +import ( + "applet/app/db" + "applet/app/lib/zhimeng" + "applet/app/svc" + "applet/app/utils/cache" + "applet/app/utils/logx" + "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/sms" + "errors" + "fmt" + "github.com/tidwall/gjson" + + "github.com/gin-gonic/gin" +) + +// NewZhimengSMS is 智盟的短信服务 +func NewZhimengSMS(c *gin.Context) *zhimeng.SDK { + sms := new(zhimeng.SDK) + key := svc.SysCfgGet(c, "third_zm_sms_key") + secret := svc.SysCfgGet(c, "third_zm_sms_secret") + if key == "" || secret == "" { + _ = logx.Warn("短信服务配置错误") + } + sms.Init("send_msg", key, secret) + return sms +} +func GetSmsPlatform(c *gin.Context) string { + var smsPlatform = "ljioe" + key := fmt.Sprintf("%s:sms_platform", c.GetString("mid")) + smsPlatformTmp, _ := cache.GetString(key) + if smsPlatformTmp == "" { + smsPlatformTmp = svc.GetWebSiteAppSmsPlatform(c.GetString("mid")) + if smsPlatformTmp != "" { + cache.SetEx(key, smsPlatformTmp, 300) + } + } + if smsPlatformTmp != "" { + smsPlatform = smsPlatformTmp + } + return smsPlatform +} +func GetTplId(c *gin.Context, zone, types string) string { + // 校验短信验证码 + tplId := "" + if zone != "86" { + tplId = svc.SysCfgGet(c, "mob_sms_sdk_international_template_id") + } else { + tplId = svc.SysCfgGet(c, "mob_sms_sdk_template_id") + } + if c.GetString("app_type") == "o2o" { + tplId = db.SysCfgGet(c, "biz_mob_sms_sdk_template_id") + } + normal := gjson.Get(tplId, types).String() + if normal == "" { + normal = gjson.Get(tplId, "normal").String() + } + return normal +} +func GetSmsConfig(c *gin.Context, zone string, postData map[string]interface{}) error { + m := db.SysCfgGet(c, "third_app_push_set") + if c.GetString("app_type") == "o2o" { + m = db.SysCfgGet(c, "biz_third_app_push_set") + } + key := gjson.Get(m, "mobAppKey").String() + postData["is_mob"] = "1" + postData["type"] = "mob" + postData["sms_type"] = "putong" + smsPlatform := GetSmsPlatform(c) + if smsPlatform == "ljioe" { + postData["is_mob"] = "0" + postData["type"] = "" + } + token := c.GetHeader("Authorization") + if zone == "" && token != "" { + arkToken, _ := db.UserProfileFindByArkToken(svc.MasterDb(c), token) + if arkToken != nil && arkToken.Uid > 0 { + user, _ := db.UserFindByID(svc.MasterDb(c), arkToken.Uid) + if user != nil && user.Uid > 0 { + zone = user.Zone + } + } + } + if zone == "" { + zone = "86" + } + if zone != "86" { //国际短信 + postData["is_sales"] = "2" + postData["sms_type"] = "international" + } + postData["templateCode"] = GetTplId(c, zone, postData["templateCode"].(string)) + postData["zone"] = zone + if key != "" { + postData["smsmsg_key"] = key + } + if c.GetString("sms_type") == "1" { //新的 + postData["uid"] = c.GetString("mid") + err := sms.SmsSend(db.Db, postData) + if err != nil { + return err + } + return nil + } + fmt.Println("===短信", postData, c.ClientIP()) + sdk, err := NewZhimengSMS(c).SelectFunction("msg_doing").WithSMSArgs(postData).Result() + if err != nil { + msg := gjson.Get(err.Error(), "msg").String() + if msg == "" { + msg = err.Error() + } + fmt.Println("===短信", err) + errs := errors.New(msg) + return errs + } + rmap := sdk.ToInterface().(map[string]interface{}) + fmt.Println("===短信", rmap) + + if rmap["status"] == "" { + return err + } + return nil +} diff --git a/app/lib/weapp/LICENSE b/app/lib/weapp/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/app/lib/weapp/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/app/lib/weapp/Readme.md b/app/lib/weapp/Readme.md new file mode 100644 index 0000000..c0dfa9b --- /dev/null +++ b/app/lib/weapp/Readme.md @@ -0,0 +1,2992 @@ +# ![title](title.png) + +## `注意` ⚠️ + +- [v1 版本入口](https://github.com/medivhzhan/weapp/tree/v1) +- 新版本暂时不包含支付相关内容, 已有很多优秀的支付相关模块; +- 为了保证大家及时用上新功能,已发布 v2 版本,请大家使用经过`线上测试` ✅ 的接口。 +- 未完成的接口将在经过线上测试后在新版本中提供给大家。 +- 大部分接口需要去线上测试。最近一直比较忙,有条件的朋友可以帮忙一起测试,我代表所有使用者谢谢你: ) +- 欢迎大家一起完善 :) + +## 获取代码 + +```sh + +go get -u github.com/medivhzhan/weapp/v2 + +``` + +## `目录` + +> 文档按照[小程序服务端官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/)排版,方便您一一对照查找相关内容。 + +✅: 代表已经通过线上测试 +⚠️: 代表还没有或者未完成 + +- [登录](#登录) + - [code2Session](#code2Session) ✅ +- [用户信息](#用户信息) + - [getPaidUnionId](#getPaidUnionId) ✅ +- [接口调用凭证](#接口调用凭证) + - [getAccessToken](#getAccessToken) ✅ +- [数据分析](#数据分析) + - [访问留存](#访问留存) + - [getDailyRetain](#getDailyRetain) ✅ + - [getWeeklyRetain](#getWeeklyRetain) ✅ + - [getMonthlyRetain](#getMonthlyRetain) ✅ + - [getDailySummary](#getDailySummary) ✅ + - [访问趋势](#访问趋势) + - [getDailyVisitTrend](#getDailyVisitTrend) ✅ + - [getWeeklyVisitTrend](#getWeeklyVisitTrend) ✅ + - [getMonthlyVisitTrend](#getMonthlyVisitTrend) ✅ + - [getUserPortrait](#getUserPortrait) ✅ + - [getVisitDistribution](#getVisitDistribution) ✅ + - [getVisitPage](#getVisitPage) ✅ +- [客服消息](#客服消息) + - [getTempMedia](#getTempMedia) ✅ + - [sendCustomerServiceMessage](#sendCustomerServiceMessage) ✅ + - [setTyping](#setTyping) ✅ + - [uploadTempMedia](#uploadTempMedia) ✅ +- [统一服务消息](#统一服务消息) + - [sendUniformMessage](#sendUniformMessage) ✅ +- [动态消息](#动态消息) + - [createActivityId](#createActivityId) + - [setUpdatableMsg](#setUpdatableMsg) +- [插件管理](#插件管理) + - [applyPlugin](#applyPlugin) + - [getPluginDevApplyList](#getPluginDevApplyList) + - [getPluginList](#getPluginList) + - [setDevPluginApplyStatus](#setDevPluginApplyStatus) + - [unbindPlugin](#unbindPlugin) +- [附近的小程序](#附近的小程序) + - [addNearbyPoi](#addNearbyPoi) + - [deleteNearbyPoi](#deleteNearbyPoi) + - [getNearbyPoiList](#getNearbyPoiList) + - [setNearbyPoiShowStatus](#setNearbyPoiShowStatus) +- [小程序码](#小程序码) ✅ + - [createQRCode](#createQRCode) ✅ + - [get](#get) ✅ + - [getUnlimited](#getUnlimited) ✅ +- [内容安全](#内容安全) + - [imgSecCheck](#imgSecCheck) ✅ + - [mediaCheckAsync](#mediaCheckAsync)✅ + - [msgSecCheck](#msgSecCheck) ✅ +- [图像处理](#图像处理) + - [aiCrop](#aiCrop) ✅ + - [scanQRCode](#scanQRCode) ✅ + - [superResolution](#superResolution) +- [及时配送](#及时配送) ⚠️ + - [小程序使用](#小程序使用) + - [abnormalConfirm](#abnormalConfirm) + - [addDeliveryOrder](#addDeliveryOrder) + - [addDeliveryTip](#addDeliveryTip) + - [cancelDeliveryOrder](#cancelDeliveryOrder) + - [getAllImmediateDelivery](#getAllImmediateDelivery) + - [getBindAccount](#getBindAccount) + - [getDeliveryOrder](#getDeliveryOrder) + - [mockUpdateDeliveryOrder](#mockUpdateDeliveryOrder) + - [onDeliveryOrderStatus](#onDeliveryOrderStatus) + - [preAddDeliveryOrder](#preAddDeliveryOrder) + - [preCancelDeliveryOrder](#preCancelDeliveryOrder) + - [reDeliveryOrder](#reDeliveryOrder) + - [服务提供方使用](#服务提供方使用) + - [updateDeliveryOrder](#updateDeliveryOrder) + - [onAgentPosQuery](#onAgentPosQuery) + - [onAuthInfoGet](#onAuthInfoGet) + - [onCancelAuth](#onCancelAuth) + - [onDeliveryOrderAdd](#onDeliveryOrderAdd) + - [onDeliveryOrderAddTips](#onDeliveryOrderAddTips) + - [onDeliveryOrderCancel](#onDeliveryOrderCancel) + - [onDeliveryOrderConfirmReturn](#onDeliveryOrderConfirmReturn) + - [onDeliveryOrderPreAdd](#onDeliveryOrderPreAdd) + - [onDeliveryOrderPreCancel](#onDeliveryOrderPreCancel) + - [onDeliveryOrderQuery](#onDeliveryOrderQuery) + - [onDeliveryOrderReAdd](#onDeliveryOrderReAdd) + - [onPreAuthCodeGet](#onPreAuthCodeGet) + - [onRiderScoreSet](#onRiderScoreSet) +- [物流助手](#物流助手) ⚠️ + - [小程序使用](#小程序使用) + - [addExpressOrder](#addExpressOrder) + - [cancelExpressOrder](#cancelExpressOrder) + - [getAllDelivery](#getAllDelivery) + - [getExpressOrder](#getExpressOrder) + - [getExpressPath](#getExpressPath) + - [getExpressPrinter](#getExpressPrinter) + - [getExpressQuota](#getExpressQuota) + - [onExpressPathUpdate](#onExpressPathUpdate) + - [testUpdateExpressOrder](#testUpdateExpressOrder) + - [updateExpressPrinter](#updateExpressPrinter) + - [服务提供方使用](#服务提供方使用) + - [getExpressContact](#getExpressContact) + - [onAddExpressOrder](#onAddExpressOrder) + - [onCancelExpressOrder](#onCancelExpressOrder) + - [onCheckExpressBusiness](#onCheckExpressBusiness) + - [onGetExpressQuota](#onGetExpressQuota) + - [previewExpressTemplate](#previewExpressTemplate) + - [updateExpressBusiness](#updateExpressBusiness) + - [updateExpressPath](#updateExpressPath) +- [OCR](#OCR) + - [bankcard](#bankcard) ✅ + - [businessLicense](#businessLicense) ✅ + - [driverLicense](#driverLicense) ✅ + - [idcard](#idcard) ✅ + - [printedText](#printedText) ✅ + - [vehicleLicense](#vehicleLicense) ✅ +- [运维中心](#运维中心) ⚠️ + - [realTimeLogSearch](#realTimeLogSearch) +- [小程序搜索](#小程序搜索) ⚠️ + - [siteSearch](#siteSearch) + - [submitPages](#submitPages) +- [生物认证](#生物认证) + - [verifySignature](#verifySignature) +- [订阅消息](#订阅消息) ✅ + - [addTemplate](#addTemplate) ✅ + - [deleteTemplate](#deleteTemplate) ✅ + - [getCategory](#getCategory) ✅ + - [getPubTemplateKeyWordsById](#getPubTemplateKeyWordsById)✅ + - [getPubTemplateTitleList](#getPubTemplateTitleList) ✅ + - [getTemplateList](#getTemplateList) ✅ + - [sendSubscribeMessage](#sendSubscribeMessage) ✅ +- [解密](#解密) + - [解密手机号码](#解密手机号码) ✅ + - [解密分享内容](#解密分享内容) + - [解密用户信息](#解密用户信息) ✅ + - [解密微信运动](#解密微信运动) +- [人脸识别](#人脸识别) + +--- + +## 登录 + +### code2Session + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.Login("appid", "secret", "code") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 用户信息 + +### getPaidUnionId + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/user-info/auth.getPaidUnionId.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetPaidUnionID("access-token", "open-id", "transaction-id") +// 或者 +res, err := weapp.GetPaidUnionIDWithMCH("access-token", "open-id", "out-trade-number", "mch-id") + +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 接口调用凭证 + +### getAccessToken + +> 调用次数有限制 请注意缓存 + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetAccessToken("appid", "secret") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 数据分析 + +### 访问留存 + +#### getDailyRetain + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/visit-retain/analysis.getDailyRetain.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetDailyRetain("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getWeeklyRetain + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/visit-retain/analysis.getWeeklyRetain.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetWeeklyRetain("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getMonthlyRetain + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/visit-retain/analysis.getMonthlyRetain.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetMonthlyRetain("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getDailySummary + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/analysis.getDailySummary.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetDailySummary("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### 访问趋势 + +#### getDailyVisitTrend + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/visit-trend/analysis.getDailyVisitTrend.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetDailyVisitTrend("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getWeeklyVisitTrend + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/visit-trend/analysis.getWeeklyVisitTrend.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetWeeklyVisitTrend("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getMonthlyVisitTrend + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/visit-trend/analysis.getMonthlyVisitTrend.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetMonthlyVisitTrend("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getUserPortrait + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/analysis.getUserPortrait.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetUserPortrait("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getVisitDistribution + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/analysis.getVisitDistribution.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetVisitDistribution("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getVisitPage + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/analysis.getVisitPage.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetVisitPage("access-token", "begin-date", "end-date") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 客服消息 + +### getTempMedia + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.getTempMedia.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +resp, res, err := weapp.GetTempMedia("access-token", "media-id") +if err != nil { + // 处理一般错误信息 + return +} +defer resp.Close() + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### sendCustomerServiceMessage + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.send.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +// 接收并处理异步结果 +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +// 文本消息 +srv.OnCustomerServiceTextMessage(func(msg *weapp.TextMessageResult) *weapp.TransferCustomerMessage { + + reply := weapp.CSMsgText{ + Content: "content", + } + + res, err := reply.SendTo("open-id", "access-token") + if err != nil { + // 处理一般错误信息 + return nil + } + + if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return nil + } + + return nil +}) + +// 图片消息 +srv.OnCustomerServiceImageMessage(func(msg *weapp.TextMessageResult) *weapp.TransferCustomerMessage { + + reply := weapp.CSMsgImage{ + MediaID: "media-id", + } + + res, err := reply.SendTo("open-id", "access-token") + if err != nil { + // 处理一般错误信息 + return nil + } + + if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return nil + } + + return nil +}) + +// 小程序卡片消息 +srv.OnCustomerServiceCardMessage(func(msg *weapp.TextMessageResult) *weapp.TransferCustomerMessage { + + reply := weapp.CSMsgMPCard{ + Title: "title", + PagePath: "page-path", + ThumbMediaID: "thumb-media-id", + } + res, err := reply.SendTo("open-id", "access-token") + if err != nil { + // 处理一般错误信息 + return nil + } + + if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return nil + } + + return nil +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +### setTyping + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.setTyping.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.SetTyping("access-token", "open-id", weapp.SetTypingCommandTyping) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### uploadTempMedia + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.uploadTempMedia.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.UploadTempMedia("access-token", weapp.TempMediaTypeImage, "media-filename") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 统一服务消息 + +### sendUniformMessage + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +sender := weapp.UniformMsgSender{ + ToUser: "open-id", + UniformWeappTmpMsg: weapp.UniformWeappTmpMsg{ + TemplateID: "template-id", + Page: "page", + FormID: "form-id", + Data: weapp.UniformMsgData{ + "keyword": {Value: "value"}, + }, + EmphasisKeyword: "keyword.DATA", + }, + UniformMpTmpMsg: weapp.UniformMpTmpMsg{ + AppID: "app-id", + TemplateID: "template-id", + URL: "url", + Miniprogram: weapp.UniformMsgMiniprogram{"miniprogram-app-id", "page-path"}, + Data: weapp.UniformMsgData{ + "keyword": {"value", "color"}, + }, + }, +} + +res, err := sender.Send("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 动态消息 + +### createActivityId + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.CreateActivityId("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### setUpdatableMsg + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.setUpdatableMsg.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + + +setter := weapp.UpdatableMsgSetter{ + "activity-id", + UpdatableMsgJoining, + UpdatableMsgTempInfo{ + []UpdatableMsgParameter{ + {UpdatableMsgParamMemberCount, "parameter-value-number"}, + {UpdatableMsgParamRoomLimit, "parameter-value-number"}, + }, + }, +} + +res, err := setter.Set("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 插件管理 + +### applyPlugin + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.applyPlugin.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.ApplyPlugin("access-token", "plugin-app-id", "reason") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getPluginDevApplyList + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.getPluginDevApplyList.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetPluginDevApplyList("access-token", 1, 2) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getPluginList + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.getPluginList.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetPluginList("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### setDevPluginApplyStatus + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.setDevPluginApplyStatus.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.SetDevPluginApplyStatus("access-token", "plugin-app-id", "reason", weapp.DevAgree) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### unbindPlugin + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/plugin-management/pluginManager.unbindPlugin.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.UnbindPlugin("access-token", "plugin-app-id") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 附近的小程序 + +### addNearbyPoi + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.add.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +poi := NearbyPoi{ + PicList: PicList{[]string{"first-picture-url", "second-picture-url", "third-picture-url"}}, + ServiceInfos: weapp.ServiceInfos{[]weapp.ServiceInfo{ + {1, 1, "name", "app-id", "path"}, + }}, + StoreName: "store-name", + Hour: "11:11-12:12", + Credential: "credential", + Address: "address", // 地址 必填 + CompanyName: "company-name", // 主体名字 必填 + QualificationList: "qualification-list", // 证明材料 必填 如果company_name和该小程序主体不一致,需要填qualification_list,详细规则见附近的小程序使用指南-如何证明门店的经营主体跟公众号或小程序帐号主体相关http://kf.qq.com/faq/170401MbUnim17040122m2qY.html + KFInfo: weapp.KFInfo{true, "kf-head-img", "kf-name"}, // 客服信息 选填,可自定义服务头像与昵称,具体填写字段见下方示例kf_info pic_list是字符串,内容是一个json! + PoiID: "poi-id", // 如果创建新的门店,poi_id字段为空 如果更新门店,poi_id参数则填对应门店的poi_id 选填 +} + +res, err := poi.Add("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnAddNearbyPoi(func(mix *weapp.AddNearbyPoiResult) { + // 处理返回结果 +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +### deleteNearbyPoi + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.delete.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.DeleteNearbyPoi("access-token", "poi-id") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### getNearbyPoiList + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.getList.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetNearbyPoiList("access-token", 1, 10) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### setNearbyPoiShowStatus + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.setShowStatus.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.SetNearbyPoiShowStatus("access-token", "poi-id", weapp.ShowNearbyPoi) +// 或者 +res, err := weapp.SetNearbyPoiShowStatus("access-token", "poi-id", weapp.HideNearbyPoi) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 小程序码 + +### createQRCode + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html) + +```go + +import ( + "ioutil" + "github.com/medivhzhan/weapp/v2" +) + + +creator := weapp.QRCodeCreator{ + Path: "mock/path", + Width: 430, +} + +resp, res, err := creator.Create("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +defer resp.Body.Close() + +content, err := ioutil.ReadAll(resp.Body) +// 处理图片内容 + +``` + +### get + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html) + +```go + +import ( + "ioutil" + "github.com/medivhzhan/weapp/v2" +) + + +getter := weapp.QRCode{ + Path: "mock/path", + Width: 430, + AutoColor: true, + LineColor: weapp.Color{"r", "g", "b"}, + IsHyaline: true, +} + +resp, res, err := getter.Get("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +defer resp.Body.Close() + +content, err := ioutil.ReadAll(resp.Body) +// 处理图片内容 + +``` + +### getUnlimited + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html) + +```go + +import ( + "ioutil" + "github.com/medivhzhan/weapp/v2" +) + + +getter := weapp.UnlimitedQRCode{ + Scene: "scene-data", + Page: "mock/page", + Width: 430, + AutoColor: true, + LineColor: weapp.Color{"r", "g", "b"}, + IsHyaline: true, +} + +resp, res, err := getter.Get("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +defer resp.Body.Close() + +content, err := ioutil.ReadAll(resp.Body) +// 处理图片内容 + +``` + +--- + +## 内容安全 + +### imgSecCheck + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.IMGSecCheck("access-token", "local-filename") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### mediaCheckAsync + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.mediaCheckAsync.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.MediaCheckAsync("access-token", "image-url", weapp.MediaTypeImage) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +// 接收并处理异步结果 +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnMediaCheckAsync(func(mix *weapp.MediaCheckAsyncResult) { + // 处理返回结果 +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +### msgSecCheck + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.MSGSecCheck("access-token", "message-content") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 图像处理 + +### aiCrop + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/img/img.aiCrop.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.AICrop("access-token", "filename") +// 或者 +res, err := weapp.AICropByURL("access-token", "url") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### scanQRCode + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/img/img.scanQRCode.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.ScanQRCode("access-token", "file-path") +// 或者 +res, err := weapp.ScanQRCodeByURL("access-token", "qr-code-url") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### superResolution + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/img/img.superresolution.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.SuperResolution("access-token", "file-path") +// 或者 +res, err := weapp.SuperResolutionByURL("access-token", "img-url") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 及时配送 + +### 服务提供方使用 + +#### updateDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.updateOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +mocker := weapp.DeliveryOrderUpdater{ + // ... +} + +res, err := mocker.Update("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### onAgentPosQuery + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onAgentPosQuery.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnAgentPosQuery(func(mix *weapp.AgentPosQueryResult) *weapp.AgentPosQueryReturn { + // 处理返回结果 + + return &weapp.AgentPosQueryReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onAuthInfoGet + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onAuthInfoGet.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnAuthInfoGet(func(mix *weapp.AuthInfoGetResult) *weapp.AuthInfoGetReturn { + // 处理返回结果 + + return &weapp.AuthInfoGetReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onCancelAuth + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onCancelAuth.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnCancelAuth(func(mix *weapp.CancelAuthResult) *weapp.CancelAuthReturn { + // 处理返回结果 + + return &weapp.CancelAuthReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderAdd + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderAdd.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderAdd(func(mix *weapp.DeliveryOrderAddResult) *weapp.DeliveryOrderAddReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderAddReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderAddTips + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderAddTips.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderAddTips(func(mix *weapp.DeliveryOrderAddTipsResult) *weapp.DeliveryOrderAddTipsReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderAddTipsReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderCancel + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderCancel.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderCancel(func(mix *weapp.DeliveryOrderCancelResult) *weapp.DeliveryOrderCancelReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderCancelReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderConfirmReturn + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderConfirmReturn.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderReturnConfirm(func(mix *weapp.DeliveryOrderReturnConfirmResult) *weapp.DeliveryOrderReturnConfirmReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderReturnConfirmReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderPreAdd + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderPreAdd.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderPreAdd(func(mix *weapp.DeliveryOrderPreAddResult) *weapp.DeliveryOrderPreAddReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderPreAddReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderPreCancel + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderPreCancel.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderPreCancel(func(mix *weapp.DeliveryOrderPreCancelResult) *weapp.DeliveryOrderPreCancelReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderPreCancelReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderQuery + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderQuery.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderQuery(func(mix *weapp.DeliveryOrderQueryResult) *weapp.DeliveryOrderQueryReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderQueryReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onDeliveryOrderReAdd + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onOrderReAdd.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderReadd(func(mix *weapp.DeliveryOrderReaddResult) *weapp.DeliveryOrderReaddReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderReaddReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onPreAuthCodeGet + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onPreAuthCodeGet.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnPreAuthCodeGet(func(mix *weapp.PreAuthCodeGetResult) *weapp.PreAuthCodeGetReturn { + // 处理返回结果 + + return &weapp.PreAuthCodeGetReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onRiderScoreSet + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-provider/immediateDelivery.onRiderScoreSet.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnRiderScoreSet(func(mix *weapp.RiderScoreSetResult) *weapp.RiderScoreSetReturn { + // 处理返回结果 + + return &weapp.PreAuthCodeGetReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +### 小程序使用 + +#### abnormalConfirm + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.abnormalConfirm.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +confirmer := weapp.AbnormalConfirmer{ + ShopID: "123456", + ShopOrderID: "123456", + ShopNo: "shop_no_111", + WaybillID: "123456", + Remark: "remark", + DeliverySign: "123456", +} + +res, err := confirmer.Confirm("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### addDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +creator := weapp.DeliveryOrderCreator{ + // ... +} + +res, err := creator.Create("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### addDeliveryTip + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addTip.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +adder := weapp.DeliveryTipAdder{ + // ... +} + +res, err := adder.Add("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### cancelDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.cancelOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +canceler := weapp.DeliveryOrderCanceler{ + // ... +} + +res, err := canceler.Cancel("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getAllImmediateDelivery + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getAllImmeDelivery.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetAllImmediateDelivery("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getBindAccount + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getBindAccount.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetBindAccount("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +getter := weapp.DeliveryOrderGetter{ + // ... +} + +res, err := getter.Get("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### mockUpdateDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.mockUpdateOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +mocker := weapp.UpdateDeliveryOrderMocker{ + // ... +} + +res, err := mocker.Mock("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### onDeliveryOrderStatus + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.onOrderStatus.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnDeliveryOrderStatusUpdate(func(mix *weapp.DeliveryOrderStatusUpdateResult) *weapp.DeliveryOrderStatusUpdateReturn { + // 处理返回结果 + + return &weapp.DeliveryOrderStatusUpdateReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### preAddDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.preAddOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +creator := weapp.DeliveryOrderCreator{ + // ... +} + +res, err := creator.Prepare("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### preCancelDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.preCancelOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +canceler := weapp.DeliveryOrderCanceler{ + // ... +} + +res, err := canceler.Prepare("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### reDeliveryOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.reOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +creator := weapp.DeliveryOrderCreator{ + // ... +} + +res, err := creator.Recreate("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 物流助手 + +### 小程序使用 + +#### addExpressOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.addOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +creator := weapp.ExpressOrderCreator{ + // ... +} + +res, err := creator.Create("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### cancelExpressOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.cancelOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +canceler := weapp.ExpressOrderCanceler{ + // ... +} + +res, err := canceler.cancel("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getAllDelivery + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.getAllDelivery.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.getAllDelivery("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getExpressOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.getOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +getter := weapp.ExpressOrderGetter{ + // ... +} + +res, err := getter.Get("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getExpressPath + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.getPath.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +getter := weapp.ExpressPathGetter{ + // ... +} + +res, err := getter.Get("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getExpressPrinter + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.getPrinter.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetPrinter("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### getExpressQuota + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.getQuota.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +getter := weapp.QuotaGetter{ + // ... +} + +res, err := getter.Get("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### onExpressPathUpdate + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.onPathUpdate.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnExpressPathUpdate(func(mix *weapp.ExpressPathUpdateResult) { + // 处理返回结果 +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### testUpdateExpressOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.testUpdateOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +tester := weapp.UpdateExpressOrderTester{ + // ... +} + +res, err := tester.Test("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### updateExpressPrinter + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-business/logistics.updatePrinter.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +updater := weapp.PrinterUpdater{ + // ... +} + +res, err := updater.Update("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### 服务提供方使用 + +#### getExpressContact + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.getContact.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.GetContact("access-token", "token", "wat-bill-id") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### onAddExpressOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.onAddOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnAddExpressOrder(func(mix *weapp.AddExpressOrderResult) *weapp.AddExpressOrderReturn { + // 处理返回结果 + + return &weapp.AddExpressOrderReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onCancelExpressOrder + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.onCancelOrder.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnCancelExpressOrder(func(mix *weapp.CancelExpressOrderResult) *weapp.CancelExpressOrderReturn { + // 处理返回结果 + + return &weapp.CancelExpressOrderReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onCheckExpressBusiness + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.onCheckBusiness.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnCheckExpressBusiness(func(mix *weapp.CheckExpressBusinessResult) *weapp.CheckExpressBusinessReturn { + // 处理返回结果 + + return &weapp.CheckExpressBusinessReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### onGetExpressQuota + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.onGetQuota.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +srv, err := weapp.NewServer("app-id", "token", "aes-key", "mch-id", "api-key", true) +if err != nil { + // 处理微信返回错误信息 + return +} + +srv.OnGetExpressQuota(func(mix *weapp.GetExpressQuotaResult) *weapp.GetExpressQuotaReturn { + // 处理返回结果 + + return &weapp.GetExpressQuotaReturn{ + // ... + } +}) + +if err := srv.Serve(http.ResponseWriter, *http.Request); err != nil { + // 处理微信返回错误信息 + return +} + +``` + +#### previewExpressTemplate + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.previewTemplate.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +previewer := weapp.ExpressTemplatePreviewer{ + // ... +} + +res, err := previewer.Preview("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### updateExpressBusiness + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.updateBusiness.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +updater := weapp.BusinessUpdater{ + // ... +} + +res, err := updater.Update("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +#### updateExpressPath + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/express/by-provider/logistics.updatePath.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +updater := weapp.ExpressPathUpdater{ + // ... +} + +res, err := updater.Update("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## OCR + +### bankcard + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/ocr/ocr.bankcard.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.BankCard("access-token", "file-path", weapp.RecognizeModeScan) +// 或者 +res, err := weapp.BankCardByURL("access-token", "card-url", weapp.RecognizeModePhoto) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### businessLicense + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/ocr/ocr.businessLicense.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.BusinessLicense("access-token", "file-path") +// 或者 +res, err := weapp.BusinessLicenseByURL("access-token", "card-url") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### driverLicense + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/ocr/ocr.driverLicense.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.DriverLicense("access-token", "file-path") +// 或者 +res, err := weapp.DriverLicenseByURL("access-token", "card-url") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### idcard + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/ocr/ocr.idcard.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.IDCardByURL("access-token", "card-url", weapp.RecognizeModePhoto) +// 或者 +res, err := weapp.IDCard("access-token", "file-path", weapp.RecognizeModeScan) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### printedText + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/ocr/ocr.printedText.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.PrintedText("access-token", "file-path") +// 或者 +res, err := weapp.PrintedTextByURL("access-token", "card-url") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +### vehicleLicense + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/ocr/ocr.vehicleLicense.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.VehicleLicense("access-token", "file-path", weapp.RecognizeModeScan) +// 或者 +res, err := weapp.VehicleLicenseByURL("access-token", "card-url", weapp.RecognizeModePhoto) +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 小程序搜索 + +### siteSearch + +### submitPages + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.submitPages.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +sender := weapp.SearchSubmitPages{ + []weapp.SearchSubmitPage{ + { + Path: "pages/index/index", + Query: "id=test", + }, + }, +} + +res, err := sender.Send("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 生物认证 + +### verifySignature + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/soter/soter.verifySignature.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.VerifySignature("access-token", "open-id", "data", "signature") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 订阅消息 + +### addTemplate + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.addTemplate.html) + +```go +import "github.com/medivhzhan/weapp/v2" + +// AddTemplate 组合模板并添加至帐号下的个人模板库 +// +// token 微信 access_token +// tid 模板ID +// desc 服务场景描述,15个字以内 +// keywordIDList 关键词 ID 列表 +res, err := weapp.AddTemplate("access_token", "tid", "desc", []int32{1, 2, 3}) +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +### deleteTemplate + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.deleteTemplate.html) + +```go +import "github.com/medivhzhan/weapp/v2" + +// DeleteTemplate 删除帐号下的某个模板 +// +// token 微信 access_token +// pid 模板ID +res, err := weapp.DeleteTemplate("access_token", "pid") +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +### getCategory + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getCategory.html) + +```go +import "github.com/medivhzhan/weapp/v2" + +// GetTemplateCategory 删除帐号下的某个模板 +// +// token 微信 access_token +res, err := weapp.GetTemplateCategory("access_token") +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +### getPubTemplateKeyWordsById + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getPubTemplateKeyWordsById.html) + +```go +import "github.com/medivhzhan/weapp/v2" + +// GetPubTemplateKeyWordsById 获取模板标题下的关键词列表 +// +// token 微信 access_token +// tid 模板ID +res, err := weapp.GetPubTemplateKeyWordsById("access_token", "tid") +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +### getPubTemplateTitleList + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getPubTemplateTitleList.html) + +```go +import "github.com/medivhzhan/weapp/v2" + +// GetPubTemplateTitleList 获取帐号所属类目下的公共模板标题 +// +// token 微信 access_token +// ids 类目 id,多个用逗号隔开 +// start 用于分页,表示从 start 开始。从 0 开始计数。 +// limit 用于分页,表示拉取 limit 条记录。最大为 30 +res, err := weapp.GetPubTemplateTitleList("access_token", "1,2,3", 0, 10) +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +### getTemplateList + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getTemplateList.html) + +```go +import "github.com/medivhzhan/weapp/v2" + +// GetTemplateList 获取帐号下已存在的模板列表 +// +// token 微信 access_token +res, err := weapp.GetTemplateList("access_token") +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +### sendSubscribeMessage + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html) + +```go + +import "github.com/medivhzhan/weapp/v2" + +sender := weapp.SubscribeMessage{ + ToUser: mpOpenID, + TemplateID: "template-id", + Page: "mock/page/path", + MiniprogramState: weapp.MiniprogramStateDeveloper, // 或者: "developer" + Data: weapp.SubscribeMessageData{ + "first-key": { + Value: "value", + }, + "second-key": { + Value: "value", + }, + }, +} + +res, err := sender.Send("access-token") +if err != nil { + // 处理一般错误信息 + return +} + +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) + +``` + +--- + +## 解密 + +[官方文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) + +> ⚠️ 前端应当先完成[登录](#登录)流程再调用获取加密数据的相关接口。 + +### 解密手机号码 + +```go +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.DecryptMobile("session-key", "encrypted-data", "iv" ) +if err != nil { + // 处理一般错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) +``` + +### 解密分享内容 + +```go +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.DecryptShareInfo("session-key", "encrypted-data", "iv" ) +if err != nil { + // 处理一般错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) +``` + +### 解密用户信息 + +```go +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.DecryptUserInfo( "session-key", "raw-data", "encrypted-data", "signature", "iv") +if err != nil { + // 处理一般错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) +``` + +### 解密微信运动 + +```go +import "github.com/medivhzhan/weapp/v2" + +res, err := weapp.DecryptRunData("session-key", "encrypted-data", "iv" ) +if err != nil { + // 处理一般错误信息 + return +} + +fmt.Printf("返回结果: %#v", res) +``` + +--- + +## 人脸识别 + +```go +import "github.com/medivhzhan/weapp/v2" + +// FaceIdentify 获取人脸识别结果 +// +// token 微信 access_token +// key 小程序 verify_result +res, err := weapp.FaceIdentify("access_token", "verify_result") +if err != nil { + // 处理一般错误信息 + return +} +if err := res.GetResponseError(); err !=nil { + // 处理微信返回错误信息 + return +} +fmt.Printf("返回结果: %#v", res) +``` + +--- diff --git a/app/lib/weapp/analysis.go b/app/lib/weapp/analysis.go new file mode 100644 index 0000000..9dca262 --- /dev/null +++ b/app/lib/weapp/analysis.go @@ -0,0 +1,211 @@ +package weapp + +type dateRange struct { + BeginDate string `json:"begin_date"` + EndDate string `json:"end_date"` +} + +const ( + apiGetUserPortrait = "/datacube/getweanalysisappiduserportrait" + apiGetVisitDistribution = "/datacube/getweanalysisappidvisitdistribution" + apiGetVisitPage = "/datacube/getweanalysisappidvisitpage" + apiGetDailySummary = "/datacube/getweanalysisappiddailysummarytrend" +) + +// UserPortrait response data of get user portrait +type UserPortrait struct { + CommonError + RefDate string `json:"ref_date"` + VisitUV Portrait `json:"visit_uv"` // 活跃用户画像 + VisitUVNew Portrait `json:"visit_uv_new"` // 新用户画像 +} + +// Portrait 肖像 +type Portrait struct { + Index uint `json:"index"` // 分布类型 + Province []Attribute `json:"province"` // 省份,如北京、广东等 + City []Attribute `json:"city"` // 城市,如北京、广州等 + Genders []Attribute `json:"genders"` // 性别,包括男、女、未知 + Platforms []Attribute `json:"platforms"` // 终端类型,包括 iPhone,android,其他 + Devices []Attribute `json:"devices"` // 机型,如苹果 iPhone 6,OPPO R9 等 + Ages []Attribute `json:"ages"` // 年龄,包括17岁以下、18-24岁等区间 +} + +// Attribute 描述内容 +type Attribute struct { + ID uint `json:"id"` // 属性值id + Name string `json:"name"` // 属性值名称,与id对应。如属性为 province 时,返回的属性值名称包括「广东」等。 + Value uint `json:"value"` + // TODO: 确认后删除该字段 + AccessSourceVisitUV uint `json:"access_source_visit_uv"` // 该场景访问uv +} + +// GetUserPortrait 获取小程序新增或活跃用户的画像分布数据。 +// 时间范围支持昨天、最近7天、最近30天。 +// 其中,新增用户数为时间范围内首次访问小程序的去重用户数,活跃用户数为时间范围内访问过小程序的去重用户数。 +// begin 开始日期。格式为 yyyymmdd +// end 结束日期,开始日期与结束日期相差的天数限定为0/6/29,分别表示查询最近1/7/30天数据,允许设置的最大值为昨日。格式为 yyyymmdd +func GetUserPortrait(accessToken, begin, end string) (*UserPortrait, error) { + api := baseURL + apiGetUserPortrait + return getUserPortrait(accessToken, begin, end, api) +} + +func getUserPortrait(accessToken, begin, end, api string) (*UserPortrait, error) { + api, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := dateRange{ + BeginDate: begin, + EndDate: end, + } + + res := new(UserPortrait) + if err := postJSON(api, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// VisitDistribution 用户小程序访问分布数据 +type VisitDistribution struct { + CommonError + RefDate string `json:"ref_date"` + List []Distribution `json:"list"` +} + +// Distribution 分布数据 +type Distribution struct { + // 分布类型 + // index 的合法值 + // access_source_session_cnt 访问来源分布 + // access_staytime_info 访问时长分布 + // access_depth_info 访问深度的分布 + Index string `json:"index"` + ItemList []DistributionItem `json:"item_list"` // 分布数据列表 +} + +// DistributionItem 分布数据项 +type DistributionItem struct { + Key uint `json:"key"` // 场景 id,定义在各个 index 下不同,具体参见下方表格 + Value uint `json:"value"` // 该场景 id 访问 pv + // TODO: 确认后删除该字段 + AccessSourceVisitUV uint `json:"access_source_visit_uv"` // 该场景 id 访问 uv +} + +// GetVisitDistribution 获取用户小程序访问分布数据 +// begin 开始日期。格式为 yyyymmdd +// end 结束日期,限定查询 1 天数据,允许设置的最大值为昨日。格式为 yyyymmdd +func GetVisitDistribution(accessToken, begin, end string) (*VisitDistribution, error) { + api := baseURL + apiGetVisitDistribution + return getVisitDistribution(accessToken, begin, end, api) +} + +func getVisitDistribution(accessToken, begin, end, api string) (*VisitDistribution, error) { + url, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := dateRange{ + BeginDate: begin, + EndDate: end, + } + + res := new(VisitDistribution) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// VisitPage 页面访问数据 +type VisitPage struct { + CommonError + RefDate string `json:"ref_date"` + List []Page `json:"list"` +} + +// Page 页面 +type Page struct { + PagePath string `json:"Page_path"` // 页面路径 + PageVisitPV uint `json:"Page_visit_pv"` // 访问次数 + PageVisitUV uint `json:"Page_visit_uv"` // 访问人数 + PageStaytimePV float64 `json:"page_staytime_pv"` // 次均停留时长 + EntrypagePV uint `json:"entrypage_pv"` // 进入页次数 + ExitpagePV uint `json:"exitpage_pv"` // 退出页次数 + PageSharePV uint `json:"page_share_pv"` // 转发次数 + PageShareUV uint `json:"page_share_uv"` // 转发人数 + +} + +// GetVisitPage 访问页面。 +// 目前只提供按 page_visit_pv 排序的 top200。 +// begin 开始日期。格式为 yyyymmdd +// end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd +func GetVisitPage(accessToken, begin, end string) (*VisitPage, error) { + api := baseURL + apiGetVisitPage + return getVisitPage(accessToken, begin, end, api) +} + +func getVisitPage(accessToken, begin, end, api string) (*VisitPage, error) { + url, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := dateRange{ + BeginDate: begin, + EndDate: end, + } + + res := new(VisitPage) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// DailySummary 用户访问小程序数据概况 +type DailySummary struct { + CommonError + List []Summary `json:"list"` +} + +// Summary 概况 +type Summary struct { + RefDate string `json:"ref_date"` // 日期,格式为 yyyymmdd + VisitTotal uint `json:"visit_total"` // 累计用户数 + SharePV uint `json:"share_pv"` // 转发次数 + ShareUV uint `json:"share_uv"` // 转发人数 +} + +// GetDailySummary 获取用户访问小程序数据概况 +// begin 开始日期。格式为 yyyymmdd +// end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd +func GetDailySummary(accessToken, begin, end string) (*DailySummary, error) { + api := baseURL + apiGetDailySummary + return getDailySummary(accessToken, begin, end, api) +} +func getDailySummary(accessToken, begin, end, api string) (*DailySummary, error) { + url, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := dateRange{ + BeginDate: begin, + EndDate: end, + } + + res := new(DailySummary) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/analysis_retain.go b/app/lib/weapp/analysis_retain.go new file mode 100644 index 0000000..d758487 --- /dev/null +++ b/app/lib/weapp/analysis_retain.go @@ -0,0 +1,67 @@ +package weapp + +const ( + apiGetMonthlyRetain = "/datacube/getweanalysisappidmonthlyretaininfo" + apiGetWeeklyRetain = "/datacube/getweanalysisappidweeklyretaininfo" + apiGetDailyRetain = "/datacube/getweanalysisappiddailyretaininfo" +) + +// Retain 用户留存 +type Retain struct { + Key uint8 `json:"key"` // 标识,0开始,表示当月,1表示1月后。key取值分别是:0,1 + Value uint `json:"value"` // key对应日期的新增用户数/活跃用户数(key=0时)或留存用户数(k>0时) +} + +// RetainResponse 生物认证秘钥签名验证请求返回数据 +type RetainResponse struct { + CommonError + RefDate string `json:"ref_date"` // 时间,月格式为 yyyymm | 周格式为 yyyymmdd-yyyymmdd | 天格式为 yyyymmdd + VisitUV []Retain `json:"visit_uv"` // 活跃用户留存 + VisitUVNew []Retain `json:"visit_uv_new"` // 新增用户留存 +} + +// GetMonthlyRetain 获取用户访问小程序月留存 +// accessToken 接口调用凭证 +// begin 开始日期,为自然月第一天。格式为 yyyymmdd +// end 结束日期,为自然月最后一天,限定查询一个月数据。格式为 yyyymmdd +func GetMonthlyRetain(accessToken, begin, end string) (*RetainResponse, error) { + api := baseURL + apiGetMonthlyRetain + return getRetain(accessToken, begin, end, api) +} + +// GetWeeklyRetain 获取用户访问小程序周留存 +// accessToken 接口调用凭证 +// begin 开始日期,为自然月第一天。格式为 yyyymmdd +// end 结束日期,为周日日期,限定查询一周数据。格式为 yyyymmdd +func GetWeeklyRetain(accessToken, begin, end string) (*RetainResponse, error) { + api := baseURL + apiGetWeeklyRetain + return getRetain(accessToken, begin, end, api) +} + +// GetDailyRetain 获取用户访问小程序日留存 +// accessToken 接口调用凭证 +// begin 开始日期,为自然月第一天。格式为 yyyymmdd +// end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd +func GetDailyRetain(accessToken, begin, end string) (*RetainResponse, error) { + api := baseURL + apiGetDailyRetain + return getRetain(accessToken, begin, end, api) +} + +func getRetain(accessToken, begin, end, api string) (*RetainResponse, error) { + url, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := dateRange{ + BeginDate: begin, + EndDate: end, + } + + res := new(RetainResponse) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/analysis_retain_test.go b/app/lib/weapp/analysis_retain_test.go new file mode 100644 index 0000000..f0fa02a --- /dev/null +++ b/app/lib/weapp/analysis_retain_test.go @@ -0,0 +1,208 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestGetMonthlyRetain(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetMonthlyRetain { + t.Fatalf("Except to path '%s',get '%s'", apiGetMonthlyRetain, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "ref_date": "201702", + "visit_uv_new": [ + { + "key": 0, + "value": 346249 + } + ], + "visit_uv": [ + { + "key": 0, + "value": 346249 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getRetain("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetMonthlyRetain) + if err != nil { + t.Fatal(err) + } +} + +func TestGetWeeklyRetain(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetWeeklyRetain { + t.Fatalf("Except to path '%s',get '%s'", apiGetWeeklyRetain, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "ref_date": "20170306-20170312", + "visit_uv_new": [ + { + "key": 0, + "value": 0 + }, + { + "key": 1, + "value": 16853 + } + ], + "visit_uv": [ + { + "key": 0, + "value": 0 + }, + { + "key": 1, + "value": 99310 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getRetain("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetWeeklyRetain) + if err != nil { + t.Fatal(err) + } +} + +func TestGetDailyRetain(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetDailyRetain { + t.Fatalf("Except to path '%s',get '%s'", apiGetDailyRetain, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "ref_date": "20170313", + "visit_uv_new": [ + { + "key": 0, + "value": 5464 + } + ], + "visit_uv": [ + { + "key": 0, + "value": 55500 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getRetain("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetDailyRetain) + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/analysis_test.go b/app/lib/weapp/analysis_test.go new file mode 100644 index 0000000..3447afa --- /dev/null +++ b/app/lib/weapp/analysis_test.go @@ -0,0 +1,466 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestGetUserPortrait(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetUserPortrait { + t.Fatalf("Except to path '%s',get '%s'", apiGetUserPortrait, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "ref_date": "20170611", + "visit_uv_new": { + "province": [ + { + "id": 31, + "name": "广东省", + "value": 215 + } + ], + "city": [ + { + "id": 3102, + "name": "广州", + "value": 78 + } + ], + "genders": [ + { + "id": 1, + "name": "男", + "value": 2146 + } + ], + "platforms": [ + { + "id": 1, + "name": "iPhone", + "value": 27642 + } + ], + "devices": [ + { + "name": "OPPO R9", + "value": 61 + } + ], + "ages": [ + { + "id": 1, + "name": "17岁以下", + "value": 151 + } + ] + }, + "visit_uv": { + "province": [ + { + "id": 31, + "name": "广东省", + "value": 1341 + } + ], + "city": [ + { + "id": 3102, + "name": "广州", + "value": 234 + } + ], + "genders": [ + { + "id": 1, + "name": "男", + "value": 14534 + } + ], + "platforms": [ + { + "id": 1, + "name": "iPhone", + "value": 21750 + } + ], + "devices": [ + { + "name": "OPPO R9", + "value": 617 + } + ], + "ages": [ + { + "id": 1, + "name": "17岁以下", + "value": 3156 + } + ] + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getUserPortrait("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetUserPortrait) + if err != nil { + t.Fatal(err) + } +} + +func TestGetVisitDistribution(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetVisitDistribution { + t.Fatalf("Except to path '%s',get '%s'", apiGetVisitDistribution, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "ref_date": "20170313", + "list": [ + { + "index": "access_source_session_cnt", + "item_list": [ + { + "key": 10, + "value": 5 + }, + { + "key": 8, + "value": 687 + }, + { + "key": 7, + "value": 10740 + }, + { + "key": 6, + "value": 1961 + }, + { + "key": 5, + "value": 677 + }, + { + "key": 4, + "value": 653 + }, + { + "key": 3, + "value": 1120 + }, + { + "key": 2, + "value": 10243 + }, + { + "key": 1, + "value": 116578 + } + ] + }, + { + "index": "access_staytime_info", + "item_list": [ + { + "key": 8, + "value": 16329 + }, + { + "key": 7, + "value": 19322 + }, + { + "key": 6, + "value": 21832 + }, + { + "key": 5, + "value": 19539 + }, + { + "key": 4, + "value": 29670 + }, + { + "key": 3, + "value": 19667 + }, + { + "key": 2, + "value": 11794 + }, + { + "key": 1, + "value": 4511 + } + ] + }, + { + "index": "access_depth_info", + "item_list": [ + { + "key": 5, + "value": 217 + }, + { + "key": 4, + "value": 3259 + }, + { + "key": 3, + "value": 32445 + }, + { + "key": 2, + "value": 63542 + }, + { + "key": 1, + "value": 43201 + } + ] + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getVisitDistribution("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetVisitDistribution) + if err != nil { + t.Fatal(err) + } +} + +func TestGetVisitPage(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetVisitPage { + t.Fatalf("Except to path '%s',get '%s'", apiGetVisitPage, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "ref_date": "20170313", + "list": [ + { + "page_path": "pages/main/main.html", + "page_visit_pv": 213429, + "page_visit_uv": 55423, + "page_staytime_pv": 8.139198, + "entrypage_pv": 117922, + "exitpage_pv": 61304, + "page_share_pv": 180, + "page_share_uv": 166 + }, + { + "page_path": "pages/linedetail/linedetail.html", + "page_visit_pv": 155030, + "page_visit_uv": 42195, + "page_staytime_pv": 35.462395, + "entrypage_pv": 21101, + "exitpage_pv": 47051, + "page_share_pv": 47, + "page_share_uv": 42 + }, + { + "page_path": "pages/search/search.html", + "page_visit_pv": 65011, + "page_visit_uv": 24716, + "page_staytime_pv": 6.889634, + "entrypage_pv": 1811, + "exitpage_pv": 3198, + "page_share_pv": 0, + "page_share_uv": 0 + }, + { + "page_path": "pages/stationdetail/stationdetail.html", + "page_visit_pv": 29953, + "page_visit_uv": 9695, + "page_staytime_pv": 7.558508, + "entrypage_pv": 1386, + "exitpage_pv": 2285, + "page_share_pv": 0, + "page_share_uv": 0 + }, + { + "page_path": "pages/switch-city/switch-city.html", + "page_visit_pv": 8928, + "page_visit_uv": 4017, + "page_staytime_pv": 9.22659, + "entrypage_pv": 748, + "exitpage_pv": 1613, + "page_share_pv": 0, + "page_share_uv": 0 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getVisitPage("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetVisitPage) + if err != nil { + t.Fatal(err) + } +} + +func TestGetDailySummary(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetDailySummary { + t.Fatalf("Except to path '%s',get '%s'", apiGetDailySummary, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "list": [ + { + "ref_date": "20170313", + "visit_total": 391, + "share_pv": 572, + "share_uv": 383 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getDailySummary("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetDailySummary) + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/analysis_visit_trend.go b/app/lib/weapp/analysis_visit_trend.go new file mode 100644 index 0000000..0207fe2 --- /dev/null +++ b/app/lib/weapp/analysis_visit_trend.go @@ -0,0 +1,71 @@ +package weapp + +const ( + apiGetMonthlyVisitTrend = "/datacube/getweanalysisappidmonthlyvisittrend" + apiGetWeeklyVisitTrend = "/datacube/getweanalysisappidweeklyvisittrend" + apiGetDailyVisitTrend = "/datacube/getweanalysisappiddailyvisittrend" +) + +// Trend 用户趋势 +type Trend struct { + RefDate string `json:"ref_date"` // 时间,月格式为 yyyymm | 周格式为 yyyymmdd-yyyymmdd | 天格式为 yyyymmdd + SessionCNT uint `json:"session_cnt"` // 打开次数(自然月内汇总) + VisitPV uint `json:"visit_pv"` // 访问次数(自然月内汇总) + VisitUV uint `json:"visit_uv"` // 访问人数(自然月内去重) + VisitUVNew uint `json:"visit_uv_new"` // 新用户数(自然月内去重) + StayTimeUV float64 `json:"stay_time_uv"` // 人均停留时长 (浮点型,单位:秒) + StayTimeSession float64 `json:"stay_time_session"` // 次均停留时长 (浮点型,单位:秒) + VisitDepth float64 `json:"visit_depth"` // 平均访问深度 (浮点型) +} + +// VisitTrend 生物认证秘钥签名验证请求返回数据 +type VisitTrend struct { + CommonError + List []Trend `json:"list"` +} + +// GetMonthlyVisitTrend 获取用户访问小程序数据月趋势 +// accessToken 接口调用凭证 +// begin 开始日期,为自然月第一天。格式为 yyyymmdd +// end 结束日期,为自然月最后一天,限定查询一个月数据。格式为 yyyymmdd +func GetMonthlyVisitTrend(accessToken, begin, end string) (*VisitTrend, error) { + api := baseURL + apiGetMonthlyVisitTrend + return getVisitTrend(accessToken, begin, end, api) +} + +// GetWeeklyVisitTrend 获取用户访问小程序数据周趋势 +// accessToken 接口调用凭证 +// begin 开始日期,为自然月第一天。格式为 yyyymmdd +// end 结束日期,为周日日期,限定查询一周数据。格式为 yyyymmdd +func GetWeeklyVisitTrend(accessToken, begin, end string) (*VisitTrend, error) { + api := baseURL + apiGetWeeklyVisitTrend + return getVisitTrend(accessToken, begin, end, api) +} + +// GetDailyVisitTrend 获取用户访问小程序数据日趋势 +// accessToken 接口调用凭证 +// begin 开始日期,为自然月第一天。格式为 yyyymmdd +// end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd +func GetDailyVisitTrend(accessToken, begin, end string) (*VisitTrend, error) { + api := baseURL + apiGetDailyVisitTrend + return getVisitTrend(accessToken, begin, end, api) +} + +func getVisitTrend(accessToken, begin, end, api string) (*VisitTrend, error) { + url, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := dateRange{ + BeginDate: begin, + EndDate: end, + } + + res := new(VisitTrend) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/analysis_visit_trend_test.go b/app/lib/weapp/analysis_visit_trend_test.go new file mode 100644 index 0000000..90e62ce --- /dev/null +++ b/app/lib/weapp/analysis_visit_trend_test.go @@ -0,0 +1,194 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestGetMonthlyVisitTrend(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetMonthlyVisitTrend { + t.Fatalf("Except to path '%s',get '%s'", apiGetMonthlyVisitTrend, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "list": [ + { + "ref_date": "201703", + "session_cnt": 126513, + "visit_pv": 426113, + "visit_uv": 48659, + "visit_uv_new": 6726, + "stay_time_session": 56.4112, + "visit_depth": 2.0189 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getVisitTrend("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetMonthlyVisitTrend) + if err != nil { + t.Fatal(err) + } +} + +func TestGetWeeklyVisitTrend(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetWeeklyVisitTrend { + t.Fatalf("Except to path '%s',get '%s'", apiGetWeeklyVisitTrend, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "list": [ + { + "ref_date": "20170306-20170312", + "session_cnt": 986780, + "visit_pv": 3251840, + "visit_uv": 189405, + "visit_uv_new": 45592, + "stay_time_session": 54.5346, + "visit_depth": 1.9735 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getVisitTrend("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetWeeklyVisitTrend) + if err != nil { + t.Fatal(err) + } +} + +func TestGetDailyVisitTrend(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetDailyVisitTrend { + t.Fatalf("Except to path '%s',get '%s'", apiGetDailyVisitTrend, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["begin_date"] + if !ok || param == "" { + t.Log("param begin_date can not be empty") + t.Fail() + } + param, ok = params["end_date"] + if !ok || param == "" { + t.Log("param end_date can not be empty") + t.Fail() + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "list": [ + { + "ref_date": "20170313", + "session_cnt": 142549, + "visit_pv": 472351, + "visit_uv": 55500, + "visit_uv_new": 5464, + "stay_time_session": 0, + "visit_depth": 1.9838 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getVisitTrend("mock-access-token", "mock-begin-date", "mock-end-date", ts.URL+apiGetDailyVisitTrend) + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/auth.go b/app/lib/weapp/auth.go new file mode 100644 index 0000000..e04e9fd --- /dev/null +++ b/app/lib/weapp/auth.go @@ -0,0 +1,218 @@ +package weapp + +import ( + "applet/app/cfg" + "applet/app/utils" + "encoding/json" + "errors" + "fmt" + "github.com/tidwall/gjson" +) + +const ( + apiLogin = "/sns/jscode2session" + apiGetAccessToken = "/cgi-bin/token" + apiGetPaidUnionID = "/wxa/getpaidunionid" + apiQetticket = "/cgi-bin/ticket/getticket" + apiLoginWebsiteBackend = "/Wx/getJsCode2session" +) + +// LoginResponse 返回给用户的数据 +type LoginResponse struct { + CommonError + OpenID string `json:"openid"` + SessionKey string `json:"session_key"` + // 用户在开放平台的唯一标识符 + // 只在满足一定条件的情况下返回 + UnionID string `json:"unionid"` +} + +// Login 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。 +// +// appID 小程序 appID +// secret 小程序的 app secret +// code 小程序登录时获取的 code +func Login(appID, secret, code string) (*LoginResponse, error) { + api := baseURL + apiLogin + + return login(appID, secret, code, api) +} + +// 调用总站长后台的接口 +func LoginForWebsiteBackend(uid string, appID, code string) (*LoginResponse, error) { + utils.FilePutContents("o2o_wechat_mini", "appId :"+appID+", code: "+code) + api := cfg.WebsiteBackend.URL + apiLoginWebsiteBackend + "?appid=" + appID + "&js_code=" + code + "&uid=" + uid + //res := new(LoginResponse) + resByte, err := utils.CurlGet(api, nil) + if err != nil { + utils.FilePutContents("o2o_wechat_mini", "url:"+api) + return nil, err + } + fmt.Println(api, string(resByte), err) + var data struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data LoginResponse `json:"data"` + } + if gjson.Get(string(resByte), "code").Int() > 0 { + return nil, errors.New(gjson.Get(string(resByte), "msg").String()) + } + err = json.Unmarshal(resByte, &data) + if err != nil { + utils.FilePutContents("o2o_wechat_mini", "err:"+err.Error()+"res: "+string(resByte)) + return nil, err + } + if data.Code != 0 { + return nil, errors.New(data.Msg) + } + //if err := getJSON(api, res); err != nil { + // utils.FilePutContents("o2o_wechat_mini", "url:"+api) + // return nil, err + //} + + utils.FilePutContents("o2o_wechat_mini", string(resByte)) + return &data.Data, nil +} + +func login(appID, secret, code, api string) (*LoginResponse, error) { + queries := requestQueries{ + "appid": appID, + "secret": secret, + "js_code": code, + "grant_type": "authorization_code", + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(LoginResponse) + if err := getJSON(url, res); err != nil { + return nil, err + } + return res, nil +} + +// TokenResponse 获取 access_token 成功返回数据 +type TokenResponse struct { + CommonError + AccessToken string `json:"access_token"` // 获取到的凭证 + ExpiresIn uint `json:"expires_in"` // 凭证有效时间,单位:秒。目前是7200秒之内的值。 +} + +// GetAccessToken 获取小程序全局唯一后台接口调用凭据(access_token)。 +// 调调用绝大多数后台接口时都需使用 access_token,开发者需要进行妥善保存,注意缓存。 +func GetAccessToken(appID, secret string) (*TokenResponse, error) { + api := baseURL + apiGetAccessToken + return getAccessToken(appID, secret, api) +} + +func getAccessToken(appID, secret, api string) (*TokenResponse, error) { + + queries := requestQueries{ + "appid": appID, + "secret": secret, + "grant_type": "client_credential", + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(TokenResponse) + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// TicketResponse 获取 Ticket 成功返回数据 +type TicketResponse struct { + CommonError + ExpiresIn uint `json:"expires_in"` // 凭证有效时间,单位:秒。目前是7200秒之内的值。 + Errcode int `json:"errcode"` + Ticket string `json:"ticket"` +} + +func Getticket(appID, access_token string) (*TicketResponse, error) { + api := baseURL + apiQetticket + return getticket(appID, access_token, api) +} + +func getticket(appID, access_token, api string) (*TicketResponse, error) { + queries := requestQueries{ + "access_token": access_token, + "type": "jsapi", + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(TicketResponse) + fmt.Println(res, "res") + fmt.Println(access_token, "access_token") + + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetPaidUnionIDResponse response data +type GetPaidUnionIDResponse struct { + CommonError + UnionID string `json:"unionid"` +} + +// GetPaidUnionID 用户支付完成后,通过微信支付订单号(transaction_id)获取该用户的 UnionId, +func GetPaidUnionID(accessToken, openID, transactionID string) (*GetPaidUnionIDResponse, error) { + api := baseURL + apiGetPaidUnionID + return getPaidUnionID(accessToken, openID, transactionID, api) +} + +func getPaidUnionID(accessToken, openID, transactionID, api string) (*GetPaidUnionIDResponse, error) { + queries := requestQueries{ + "openid": openID, + "access_token": accessToken, + "transaction_id": transactionID, + } + + return getPaidUnionIDRequest(api, queries) +} + +// GetPaidUnionIDWithMCH 用户支付完成后,通过微信支付商户订单号和微信支付商户号(out_trade_no 及 mch_id)获取该用户的 UnionId, +func GetPaidUnionIDWithMCH(accessToken, openID, outTradeNo, mchID string) (*GetPaidUnionIDResponse, error) { + api := baseURL + apiGetPaidUnionID + return getPaidUnionIDWithMCH(accessToken, openID, outTradeNo, mchID, api) +} + +func getPaidUnionIDWithMCH(accessToken, openID, outTradeNo, mchID, api string) (*GetPaidUnionIDResponse, error) { + queries := requestQueries{ + "openid": openID, + "mch_id": mchID, + "out_trade_no": outTradeNo, + "access_token": accessToken, + } + + return getPaidUnionIDRequest(api, queries) +} + +func getPaidUnionIDRequest(api string, queries requestQueries) (*GetPaidUnionIDResponse, error) { + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(GetPaidUnionIDResponse) + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/auth_test.go b/app/lib/weapp/auth_test.go new file mode 100644 index 0000000..56eb362 --- /dev/null +++ b/app/lib/weapp/auth_test.go @@ -0,0 +1,181 @@ +package weapp + +import ( + "net/http" + "net/http/httptest" + "testing" +) + +func TestLogin(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiLogin { + t.Fatalf("Except to path '%s',get '%s'", apiLogin, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"appid", "secret", "js_code", "grant_type"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "openid": "mock-openid", + "session_key": "mock-session_key", + "unionid": "mock-unionid", + "errcode": 0, + "errmsg": "mock-errmsg" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := login("mock-appid", "mock-secret", "mock-code", ts.URL+apiLogin) + if err != nil { + t.Fatal(err) + } +} + +func TestGetAccessToken(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetAccessToken { + t.Fatalf("Except to path '%s',get '%s'", apiGetAccessToken, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("grant_type") != "client_credential" { + t.Fatal("invalid client_credential") + } + + queries := []string{"appid", "secret"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + + raw := `{"access_token":"ACCESS_TOKEN","expires_in":7200}` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getAccessToken("mock-appid", "mock-secret", ts.URL+apiGetAccessToken) + if err != nil { + t.Fatal(err) + } +} + +func TestGetPaidUnionID(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetPaidUnionID { + t.Fatalf("Except to path '%s',get '%s'", apiGetPaidUnionID, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"openid", "access_token", "transaction_id"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "unionid": "oTmHYjg-tElZ68xxxxxxxxhy1Rgk", + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getPaidUnionID("mock-access-token", "mock-open-id", "mock-transaction-id", ts.URL+apiGetPaidUnionID) + if err != nil { + t.Fatal(err) + } +} + +func TestGetPaidUnionIDWithMCH(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetPaidUnionID { + t.Fatalf("Except to path '%s',get '%s'", apiGetPaidUnionID, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"openid", "access_token", "mch_id", "out_trade_no"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "unionid": "oTmHYjg-tElZ68xxxxxxxxhy1Rgk", + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getPaidUnionIDWithMCH("mock-access-token", "mock-open-id", "mock-out-trade-number", "mock-mch-id", ts.URL+apiGetPaidUnionID) + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/common_error.go b/app/lib/weapp/common_error.go new file mode 100644 index 0000000..f6ee34d --- /dev/null +++ b/app/lib/weapp/common_error.go @@ -0,0 +1,34 @@ +package weapp + +import "errors" + +// CommonError 微信返回错误信息 +type CommonError struct { + ErrCode int `json:"errcode"` // 错误码 + ErrMSG string `json:"errmsg"` // 错误描述 +} + +// GetResponseError 获取微信服务器错返回误信息 +func (err *CommonError) GetResponseError() error { + if err.ErrCode != 0 { + return errors.New(err.ErrMSG) + } + + return nil +} + +// CommonResult 微信返回错误信息 +type CommonResult struct { + ResultCode int `json:"resultcode"` // 错误码 + ResultMsg string `json:"resultmsg"` // 错误描述 +} + +// GetResponseError 获取微信服务器错返回误信息 +func (err *CommonResult) GetResponseError() error { + + if err.ResultCode != 0 { + return errors.New(err.ResultMsg) + } + + return nil +} diff --git a/app/lib/weapp/crypto.go b/app/lib/weapp/crypto.go new file mode 100644 index 0000000..f463d48 --- /dev/null +++ b/app/lib/weapp/crypto.go @@ -0,0 +1,114 @@ +package weapp + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha1" + "encoding/hex" + "errors" + "io" + "sort" + "strings" +) + +const pkcs7blocksize = 32 + +// pkcs7encode 对需要加密的明文进行填充补位 +// plaintext 需要进行填充补位操作的明文 +// 返回补齐明文字符串 +func pkcs7encode(plaintext []byte) []byte { + //计算需要填充的位数 + pad := pkcs7blocksize - len(plaintext)%pkcs7blocksize + if pad == 0 { + pad = pkcs7blocksize + } + + //获得补位所用的字符 + text := bytes.Repeat([]byte{byte(pad)}, pad) + + return append(plaintext, text...) +} + +// pkcs7decode 对解密后的明文进行补位删除 +// plaintext 解密后的明文 +// 返回删除填充补位后的明文和 +func pkcs7decode(plaintext []byte) []byte { + ln := len(plaintext) + + // 获取最后一个字符的 ASCII + pad := int(plaintext[ln-1]) + if pad < 1 || pad > pkcs7blocksize { + pad = 0 + } + + return plaintext[:(ln - pad)] +} + +// 对加密数据包进行签名校验,确保数据的完整性。 +func validateSignature(signature string, parts ...string) bool { + return signature == createSignature(parts...) +} + +// 校验用户数据数据 +func validateUserInfo(signature, rawData, ssk string) bool { + raw := sha1.Sum([]byte(rawData + ssk)) + return signature == hex.EncodeToString(raw[:]) +} + +// 拼凑签名 +func createSignature(parts ...string) string { + sort.Strings(parts) + raw := sha1.Sum([]byte(strings.Join(parts, ""))) + + return hex.EncodeToString(raw[:]) +} + +// cbcEncrypt CBC 加密数据 +func cbcEncrypt(key, plaintext, iv []byte) ([]byte, error) { + if len(plaintext)%aes.BlockSize != 0 { + return nil, errors.New("plaintext is not a multiple of the block size") + } + + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + ciphertext := make([]byte, aes.BlockSize+len(plaintext)) + iv = iv[:aes.BlockSize] + if _, err := io.ReadFull(rand.Reader, iv); err != nil { + return nil, err + } + + mode := cipher.NewCBCEncrypter(block, iv) + mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext) + + return ciphertext, nil +} + +// CBC解密数据 +func cbcDecrypt(key, ciphertext, iv []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + size := aes.BlockSize + iv = iv[:size] + // ciphertext = ciphertext[size:] TODO: really useless? + + if len(ciphertext) < size { + return nil, errors.New("ciphertext too short") + } + + if len(ciphertext)%size != 0 { + return nil, errors.New("ciphertext is not a multiple of the block size") + } + + mode := cipher.NewCBCDecrypter(block, iv) + mode.CryptBlocks(ciphertext, ciphertext) + + return pkcs7decode(ciphertext), nil +} diff --git a/app/lib/weapp/customer_service_message.go b/app/lib/weapp/customer_service_message.go new file mode 100644 index 0000000..c17e3b9 --- /dev/null +++ b/app/lib/weapp/customer_service_message.go @@ -0,0 +1,268 @@ +package weapp + +import ( + "encoding/json" + "errors" + "net/http" + "strings" +) + +const ( + apiSendMessage = "/cgi-bin/message/custom/send" + apiSetTyping = "/cgi-bin/message/custom/typing" + apiUploadTemplateMedia = "/cgi-bin/media/upload" + apiGetTemplateMedia = "/cgi-bin/media/get" +) + +// csMsgType 消息类型 +type csMsgType string + +// 所有消息类型 +const ( + csMsgTypeText csMsgType = "text" // 文本消息类型 + csMsgTypeLink = "link" // 图文链接消息类型 + csMsgTypeImage = "image" // 图片消息类型 + csMsgTypeMPCard = "miniprogrampage" // 小程序卡片消息类型 +) + +// csMessage 消息体 +type csMessage struct { + Receiver string `json:"touser"` // user openID + Type csMsgType `json:"msgtype"` // text | image | link | miniprogrampage + Text CSMsgText `json:"text,omitempty"` + Image CSMsgImage `json:"image,omitempty"` + Link CSMsgLink `json:"link,omitempty"` + MPCard CSMsgMPCard `json:"miniprogrampage,omitempty"` +} + +// CSMsgText 接收的文本消息 +type CSMsgText struct { + Content string `json:"content"` +} + +// SendTo 发送文本消息 +// +// openID 用户openID +// token 微信 access_token +func (msg CSMsgText) SendTo(openID, token string) (*CommonError, error) { + + params := csMessage{ + Receiver: openID, + Type: csMsgTypeText, + Text: msg, + } + + return sendMessage(token, params) +} + +// CSMsgImage 客服图片消息 +type CSMsgImage struct { + MediaID string `json:"media_id"` // 发送的图片的媒体ID,通过 新增素材接口 上传图片文件获得。 +} + +// SendTo 发送图片消息 +// +// openID 用户openID +// token 微信 access_token +func (msg CSMsgImage) SendTo(openID, token string) (*CommonError, error) { + + params := csMessage{ + Receiver: openID, + Type: csMsgTypeImage, + Image: msg, + } + + return sendMessage(token, params) +} + +// CSMsgLink 图文链接消息 +type CSMsgLink struct { + Title string `json:"title"` + Description string `json:"description"` + URL string `json:"url"` + ThumbURL string `json:"thumb_url"` +} + +// SendTo 发送图文链接消息 +// +// openID 用户openID +// token 微信 access_token +func (msg CSMsgLink) SendTo(openID, token string) (*CommonError, error) { + + params := csMessage{ + Receiver: openID, + Type: csMsgTypeLink, + Link: msg, + } + + return sendMessage(token, params) +} + +// CSMsgMPCard 接收的卡片消息 +type CSMsgMPCard struct { + Title string `json:"title"` // 标题 + PagePath string `json:"pagepath"` // 小程序页面路径 + ThumbMediaID string `json:"thumb_media_id"` // 小程序消息卡片的封面, image 类型的 media_id,通过 新增素材接口 上传图片文件获得,建议大小为 520*416 +} + +// SendTo 发送卡片消息 +// +// openID 用户openID +// token 微信 access_token +func (msg CSMsgMPCard) SendTo(openID, token string) (*CommonError, error) { + + params := csMessage{ + Receiver: openID, + Type: "miniprogrampage", + MPCard: msg, + } + + return sendMessage(token, params) +} + +// send 发送消息 +// +// token 微信 access_token +func sendMessage(token string, params interface{}) (*CommonError, error) { + api := baseURL + apiSendMessage + return doSendMessage(token, params, api) +} + +func doSendMessage(token string, params interface{}, api string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// SetTypingCommand 下发客服当前输入状态命令 +type SetTypingCommand = string + +// 所有下发客服当前输入状态命令 +const ( + SetTypingCommandTyping SetTypingCommand = "Typing" // 对用户下发"正在输入"状态 + SetTypingCommandCancelTyping = "CancelTyping" // 取消对用户的"正在输入"状态 +) + +// SetTyping 下发客服当前输入状态给用户。 +// +// token 接口调用凭证 +// openID 用户的 OpenID +// cmd 命令 +func SetTyping(token, openID string, cmd SetTypingCommand) (*CommonError, error) { + api := baseURL + apiSetTyping + return setTyping(token, openID, cmd, api) +} + +func setTyping(token, openID string, cmd SetTypingCommand, api string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "touser": openID, + "command": cmd, + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// TempMediaType 文件类型 +type TempMediaType = string + +// 所有文件类型 +const ( + TempMediaTypeImage TempMediaType = "image" // 图片 +) + +// UploadTempMediaResponse 上传媒体文件返回 +type UploadTempMediaResponse struct { + CommonError + Type string `json:"type"` // 文件类型 + MediaID string `json:"media_id"` // 媒体文件上传后,获取标识,3天内有效。 + CreatedAt uint `json:"created_at"` // 媒体文件上传时间戳 +} + +// UploadTempMedia 把媒体文件上传到微信服务器。目前仅支持图片。用于发送客服消息或被动回复用户消息。 +// +// token 接口调用凭证 +// mediaType 文件类型 +// medianame 媒体文件名 +func UploadTempMedia(token string, mediaType TempMediaType, medianame string) (*UploadTempMediaResponse, error) { + api := baseURL + apiUploadTemplateMedia + return uploadTempMedia(token, mediaType, medianame, api) +} + +func uploadTempMedia(token string, mediaType TempMediaType, medianame, api string) (*UploadTempMediaResponse, error) { + queries := requestQueries{ + "type": mediaType, + "access_token": token, + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(UploadTempMediaResponse) + if err := postFormByFile(url, "media", medianame, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetTempMedia 获取客服消息内的临时素材。即下载临时的多媒体文件。目前小程序仅支持下载图片文件。 +// +// token 接口调用凭证 +// mediaID 媒体文件 ID +func GetTempMedia(token, mediaID string) (*http.Response, *CommonError, error) { + api := baseURL + apiGetTemplateMedia + return getTempMedia(token, mediaID, api) +} + +func getTempMedia(token, mediaID, api string) (*http.Response, *CommonError, error) { + queries := requestQueries{ + "access_token": token, + "media_id": mediaID, + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, nil, err + } + res, err := http.Get(url) + if err != nil { + return nil, nil, err + } + + response := new(CommonError) + switch header := res.Header.Get("Content-Type"); { + case strings.HasPrefix(header, "application/json"): // 返回错误信息 + if err := json.NewDecoder(res.Body).Decode(response); err != nil { + res.Body.Close() + return nil, nil, err + } + return res, response, nil + + case strings.HasPrefix(header, "image"): // 返回文件 TODO: 应该确认一下 + return res, response, nil + + default: + res.Body.Close() + return nil, nil, errors.New("invalid response header: " + header) + } +} diff --git a/app/lib/weapp/customer_service_message_test.go b/app/lib/weapp/customer_service_message_test.go new file mode 100644 index 0000000..6e96743 --- /dev/null +++ b/app/lib/weapp/customer_service_message_test.go @@ -0,0 +1,343 @@ +package weapp + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "os" + "path" + "reflect" + "testing" +) + +func TestSetTyping(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSetTyping { + t.Fatalf("Except to path '%s',get '%s'", apiSetTyping, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + param, ok := params["touser"] + if !ok || param == "" { + t.Error("param touser can not be empty") + } + param, ok = params["command"] + if !ok || param == "" { + t.Error("param command can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := setTyping("mock-access-token", "mock-open-id", "mock-command", ts.URL+apiSetTyping) + if err != nil { + t.Fatal(err) + } +} + +func TestUploadTempMedia(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiUploadTemplateMedia { + t.Fatalf("Except to path '%s',get '%s'", apiUploadTemplateMedia, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "type"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + if _, _, err := r.FormFile("media"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "type": "image", + "media_id": "MEDIA_ID", + "created_at": 1234567890 + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := uploadTempMedia("mock-access-token", "mock-media-type", testIMGName, ts.URL+apiUploadTemplateMedia) + if err != nil { + t.Fatal(err) + } +} + +func TestGetTempMedia(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + ePath := r.URL.EscapedPath() + if ePath != apiGetTemplateMedia { + t.Fatalf("Except to path '%s',get '%s'", apiGetTemplateMedia, ePath) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "media_id"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + resp, _, err := getTempMedia("mock-access-token", "mock-media-id", ts.URL+apiGetTemplateMedia) + if err != nil { + t.Fatal(err) + } + resp.Body.Close() +} + +func TestSendCustomerServiceMessage(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSendMessage { + t.Fatalf("Except to path '%s',get '%s'", apiSendMessage, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Error("access_token can not be empty") + } + + params := make(object) + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + param, ok := params["touser"] + if !ok || param == "" { + t.Error("param touser can not be empty") + } + param, ok = params["msgtype"] + if !ok || param == "" { + t.Error("param command can not be empty") + } + switch param { + + case "text": + param, ok := params["text"] + if !ok { + t.Error("param text can not be empty") + } + + obj, ok := param.(object) + if !ok { + t.Errorf("unexpected value type of tex: %s", reflect.TypeOf(param)) + } + + param, ok = obj["content"] + if !ok { + t.Error("param text.content can not be empty") + } + + case "image": + param, ok := params["image"] + if !ok { + t.Error("param command can not be empty") + } + + obj, ok := param.(object) + if !ok { + t.Error("unexpected value type of image") + } + + param, ok = obj["media_id"] + if !ok { + t.Error("param image.media_id can not be empty") + } + + case "link": + param, ok := params["link"] + if !ok { + t.Error("param link can not be empty") + } + + obj, ok := param.(object) + if !ok { + t.Error("unexpected value type of link") + } + + param, ok = obj["title"] + if !ok { + t.Error("param link.title can not be empty") + } + + param, ok = obj["description"] + if !ok { + t.Error("param link.description can not be empty") + } + + param, ok = obj["url"] + if !ok { + t.Error("param link.url can not be empty") + } + + param, ok = obj["thumb_url"] + if !ok { + t.Error("param link.thumb_url can not be empty") + } + + case "miniprogrampage": + param, ok := params["miniprogrampage"] + if !ok { + t.Error("param miniprogrampage can not be empty") + } + + obj, ok := param.(object) + if !ok { + t.Error("unexpected value type of miniprogrampage") + } + + param, ok = obj["title"] + if !ok { + t.Error("param miniprogrampage.title can not be empty") + } + + param, ok = obj["pagepath"] + if !ok { + t.Error("param miniprogrampage.pagepath can not be empty") + } + + param, ok = obj["thumb_media_id"] + if !ok { + t.Error("param miniprogrampage.thumb_media_id can not be empty") + } + + default: + t.Fatalf("unexpected msgtype: %s", param) + } + + w.WriteHeader(http.StatusOK) + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + messages := []csMessage{ + csMessage{ + Receiver: "mock-open-id", + Type: csMsgTypeText, + Image: CSMsgImage{ + MediaID: "mock-media-id", + }, + }, + csMessage{ + Receiver: "mock-open-id", + Type: csMsgTypeLink, + Link: CSMsgLink{ + Title: "mock-title", + Description: "mock-description", + URL: "mock-url", + ThumbURL: "mock-thumb-url", + }, + }, + csMessage{ + Receiver: "mock-open-id", + Type: csMsgTypeMPCard, + MPCard: CSMsgMPCard{ + Title: "mock-title", + PagePath: "mock-page-path", + ThumbMediaID: "mock-thumb-media-id", + }, + }, + csMessage{ + Receiver: "mock-open-id", + Type: csMsgTypeText, + Text: CSMsgText{ + Content: "mock-content", + }, + }, + } + for _, msg := range messages { + _, err := doSendMessage("mock-access-token", msg, ts.URL+apiSendMessage) + if err != nil { + t.Error(err) + } + } +} diff --git a/app/lib/weapp/decrypt.go b/app/lib/weapp/decrypt.go new file mode 100644 index 0000000..b21199e --- /dev/null +++ b/app/lib/weapp/decrypt.go @@ -0,0 +1,154 @@ +package weapp + +import ( + "encoding/base64" + "encoding/json" + "errors" +) + +// DecryptUserData 解密用户数据 +func DecryptUserData(ssk, ciphertext, iv string) ([]byte, error) { + key, err := base64.StdEncoding.DecodeString(ssk) + if err != nil { + return nil, err + } + cipher, err := base64.StdEncoding.DecodeString(ciphertext) + if err != nil { + return nil, err + } + + rawIV, err := base64.StdEncoding.DecodeString(iv) + if err != nil { + return nil, err + } + return cbcDecrypt(key, cipher, rawIV) +} + +type watermark struct { + AppID string `json:"appid"` + Timestamp int64 `json:"timestamp"` +} + +// Mobile 解密后的用户手机号码信息 +type Mobile struct { + PhoneNumber string `json:"phoneNumber"` + PurePhoneNumber string `json:"purePhoneNumber"` + CountryCode string `json:"countryCode"` + Watermark watermark `json:"watermark"` +} + +// DecryptMobile 解密手机号码 +// +// sessionKey 通过 Login 向微信服务端请求得到的 session_key +// encryptedData 小程序通过 api 得到的加密数据(encryptedData) +// iv 小程序通过 api 得到的初始向量(iv) +func DecryptMobile(sessionKey, encryptedData, iv string) (*Mobile, error) { + raw, err := DecryptUserData(sessionKey, encryptedData, iv) + if err != nil { + return nil, err + } + + mobile := new(Mobile) + if err := json.Unmarshal(raw, mobile); err != nil { + return nil, err + } + + return mobile, nil +} + +// ShareInfo 解密后的分享信息 +type ShareInfo struct { + GID string `json:"openGId"` +} + +// DecryptShareInfo 解密转发信息的加密数据 +// +// sessionKey 通过 Login 向微信服务端请求得到的 session_key +// encryptedData 小程序通过 api 得到的加密数据(encryptedData) +// iv 小程序通过 api 得到的初始向量(iv) +// +// gid 小程序唯一群号 +func DecryptShareInfo(sessionKey, encryptedData, iv string) (*ShareInfo, error) { + + raw, err := DecryptUserData(sessionKey, encryptedData, iv) + if err != nil { + return nil, err + } + + info := new(ShareInfo) + if err = json.Unmarshal(raw, info); err != nil { + return nil, err + } + + return info, nil +} + +// UserInfo 解密后的用户信息 +type UserInfo struct { + OpenID string `json:"openId"` + Nickname string `json:"nickName"` + Gender int `json:"gender"` + Province string `json:"province"` + Language string `json:"language"` + Country string `json:"country"` + City string `json:"city"` + Avatar string `json:"avatarUrl"` + UnionID string `json:"unionId"` + Watermark watermark `json:"watermark"` +} + +// DecryptUserInfo 解密用户信息 +// +// sessionKey 微信 session_key +// rawData 不包括敏感信息的原始数据字符串,用于计算签名。 +// encryptedData 包括敏感数据在内的完整用户信息的加密数据 +// signature 使用 sha1( rawData + session_key ) 得到字符串,用于校验用户信息 +// iv 加密算法的初始向量 +func DecryptUserInfo(sessionKey, rawData, encryptedData, signature, iv string) (*UserInfo, error) { + + if ok := validateUserInfo(signature, rawData, sessionKey); !ok { + return nil, errors.New("failed to validate signature") + } + + raw, err := DecryptUserData(sessionKey, encryptedData, iv) + if err != nil { + return nil, err + } + + info := new(UserInfo) + if err := json.Unmarshal(raw, info); err != nil { + return nil, err + } + + return info, nil +} + +// RunData 解密后的最近30天微信运动步数 +type RunData struct { + StepInfoList []SetpInfo `json:"stepInfoList"` +} + +// SetpInfo 运动步数 +type SetpInfo struct { + Step int `json:"step"` + Timestamp int64 `json:"timestamp"` +} + +// DecryptRunData 解密微信运动的加密数据 +// +// sessionKey 通过 Login 向微信服务端请求得到的 session_key +// encryptedData 小程序通过 api 得到的加密数据(encryptedData) +// iv 小程序通过 api 得到的初始向量(iv) +func DecryptRunData(sessionKey, encryptedData, iv string) (*RunData, error) { + raw, err := DecryptUserData(sessionKey, encryptedData, iv) + if err != nil { + return nil, err + } + + info := new(RunData) + if err := json.Unmarshal(raw, info); err != nil { + return nil, err + } + + return info, nil +} diff --git a/app/lib/weapp/express.go b/app/lib/weapp/express.go new file mode 100644 index 0000000..492a939 --- /dev/null +++ b/app/lib/weapp/express.go @@ -0,0 +1,66 @@ +package weapp + +// ExpressOrder 物流订单 +type ExpressOrder struct { + OrderID string `json:"order_id"` // 订单ID,须保证全局唯一,不超过512字节 + OpenID string `json:"openid,omitempty"` // 用户openid,当add_source=2时无需填写(不发送物流服务通知) + DeliveryID string `json:"delivery_id"` // 快递公司ID,参见getAllDelivery + BizID string `json:"biz_id"` // 快递客户编码或者现付编码 + CustomRemark string `json:"custom_remark,omitempty"` // 快递备注信息,比如"易碎物品",不超过1024字节 + Sender ExpreseeUserInfo `json:"sender"` // 发件人信息 + Receiver ExpreseeUserInfo `json:"receiver"` // 收件人信息 + Cargo ExpressCargo `json:"cargo"` // 包裹信息,将传递给快递公司 + Shop ExpressShop `json:"shop,omitempty"` // 商家信息,会展示到物流服务通知中,当add_source=2时无需填写(不发送物流服务通知) + Insured ExpressInsure `json:"insured"` // 保价信息 + Service ExpressService `json:"service"` // 服务类型 +} + +// ExpreseeUserInfo 收件人/发件人信息 +type ExpreseeUserInfo struct { + Name string `json:"name"` // 收件人/发件人姓名,不超过64字节 + Tel string `json:"tel,omitempty"` // 收件人/发件人座机号码,若不填写则必须填写 mobile,不超过32字节 + Mobile string `json:"mobile,omitempty"` // 收件人/发件人手机号码,若不填写则必须填写 tel,不超过32字节 + Company string `json:"company,omitempty"` // 收件人/发件人公司名称,不超过64字节 + PostCode string `json:"post_code,omitempty"` // 收件人/发件人邮编,不超过10字节 + Country string `json:"country,omitempty"` // 收件人/发件人国家,不超过64字节 + Province string `json:"province"` // 收件人/发件人省份,比如:"广东省",不超过64字节 + City string `json:"city"` // 收件人/发件人市/地区,比如:"广州市",不超过64字节 + Area string `json:"area"` // 收件人/发件人区/县,比如:"海珠区",不超过64字节 + Address string `json:"address"` // 收件人/发件人详细地址,比如:"XX路XX号XX大厦XX",不超过512字节 +} + +// ExpressCargo 包裹信息 +type ExpressCargo struct { + Count uint `json:"count"` // 包裹数量 + Weight float64 `json:"weight"` // 包裹总重量,单位是千克(kg) + SpaceX float64 `json:"space_x"` // 包裹长度,单位厘米(cm) + SpaceY float64 `json:"space_y"` // 包裹宽度,单位厘米(cm) + SpaceZ float64 `json:"space_z"` // 包裹高度,单位厘米(cm) + DetailList []CargoDetail `json:"detail_list"` // 包裹中商品详情列表 +} + +// CargoDetail 包裹详情 +type CargoDetail struct { + Name string `json:"name"` // 商品名,不超过128字节 + Count uint `json:"count"` // 商品数量 +} + +// ExpressShop 商家信息 +type ExpressShop struct { + WXAPath string `json:"wxa_path"` // 商家小程序的路径,建议为订单页面 + IMGUrl string `json:"img_url"` // 商品缩略图 url + GoodsName string `json:"goods_name"` // 商品名称 + GoodsCount uint `json:"goods_count"` // 商品数量 +} + +// ExpressInsure 订单保价 +type ExpressInsure struct { + Used InsureStatus `json:"use_insured"` // 是否保价,0 表示不保价,1 表示保价 + Value uint `json:"insured_value"` // 保价金额,单位是分,比如: 10000 表示 100 元 +} + +// ExpressService 服务类型 +type ExpressService struct { + Type uint8 `json:"service_type"` // 服务类型ID + Name string `json:"service_name"` // 服务名称 +} diff --git a/app/lib/weapp/express_business.go b/app/lib/weapp/express_business.go new file mode 100644 index 0000000..de49c2f --- /dev/null +++ b/app/lib/weapp/express_business.go @@ -0,0 +1,432 @@ +package weapp + +const ( + apiBindAccount = "/cgi-bin/express/business/account/bind" + apiGetAllAccount = "/cgi-bin/express/business/account/getall" + apiGetExpressPath = "/cgi-bin/express/business/path/get" + apiAddExpressOrder = "/cgi-bin/express/business/order/add" + apiCancelExpressOrder = "/cgi-bin/express/business/order/cancel" + apiGetAllDelivery = "/cgi-bin/express/business/delivery/getall" + apiGetExpressOrder = "/cgi-bin/express/business/order/get" + apiGetPrinter = "/cgi-bin/express/business/printer/getall" + apiGetQuota = "/cgi-bin/express/business/quota/get" + apiUpdatePrinter = "/cgi-bin/express/business/printer/update" + apiTestUpdateOrder = "/cgi-bin/express/business/test_update_order" +) + +// ExpressAccount 物流账号 +type ExpressAccount struct { + Type BindType `json:"type"` // bind表示绑定,unbind表示解除绑定 + BizID string `json:"biz_id"` // 快递公司客户编码 + DeliveryID string `json:"delivery_id"` // 快递公司 ID + Password string `json:"password"` // 快递公司客户密码 + RemarkContent string `json:"remark_content"` // 备注内容(提交EMS审核需要) +} + +// BindType 绑定动作类型 +type BindType = string + +// 所有绑定动作类型 +const ( + Bind = "bind" // 绑定 + Unbind = "unbind" // 解除绑定 +) + +// Bind 绑定、解绑物流账号 +// token 接口调用凭证 +func (ea *ExpressAccount) Bind(token string) (*CommonError, error) { + api := baseURL + apiBindAccount + return ea.bind(api, token) +} + +func (ea *ExpressAccount) bind(api, token string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, ea, res); err != nil { + return nil, err + } + + return res, nil +} + +// AccountList 所有绑定的物流账号 +type AccountList struct { + CommonError + Count uint `json:"count"` // 账号数量 + List []struct { + BizID string `json:"biz_id"` // 快递公司客户编码 + DeliveryID string `json:"delivery_id"` // 快递公司 ID + CreateTime uint `json:"create_time"` // 账号绑定时间 + UpdateTime uint `json:"update_time"` // 账号更新时间 + StatusCode BindStatus `json:"status_code"` // 绑定状态 + Alias string `json:"alias"` // 账号别名 + RemarkWrongMsg string `json:"remark_wrong_msg"` // 账号绑定失败的错误信息(EMS审核结果) + RemarkContent string `json:"remark_content"` // 账号绑定时的备注内容(提交EMS审核需要)) + QuotaNum uint `json:"quota_num"` // 电子面单余额 + QuotaUpdateTime uint `json:"quota_update_time"` // 电子面单余额更新时间 + } `json:"list"` // 账号列表 +} + +// BindStatus 账号绑定状态 +type BindStatus = int8 + +// 所有账号绑定状态 +const ( + BindSuccess = 0 // 成功 + BindFailed = -1 // 系统失败 +) + +// GetAllAccount 获取所有绑定的物流账号 +// token 接口调用凭证 +func GetAllAccount(token string) (*AccountList, error) { + api := baseURL + apiGetAllAccount + return getAllAccount(api, token) +} + +func getAllAccount(api, token string) (*AccountList, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(AccountList) + if err := postJSON(url, requestParams{}, res); err != nil { + return nil, err + } + + return res, nil +} + +// ExpressPathGetter 查询运单轨迹所需参数 +type ExpressPathGetter ExpressOrderGetter + +// GetExpressPathResponse 运单轨迹 +type GetExpressPathResponse struct { + CommonError + OpenID string `json:"openid"` // 用户openid + DeliveryID string `json:"delivery_id"` // 快递公司 ID + WaybillID string `json:"waybill_id"` // 运单 ID + PathItemNum uint `json:"path_item_num"` // 轨迹节点数量 + PathItemList []ExpressPathNode `json:"path_item_list"` // 轨迹节点列表 +} + +// ExpressPathNode 运单轨迹节点 +type ExpressPathNode struct { + ActionTime uint `json:"action_time"` // 轨迹节点 Unix 时间戳 + ActionType uint `json:"action_type"` // 轨迹节点类型 + ActionMsg string `json:"action_msg"` // 轨迹节点详情 +} + +// Get 查询运单轨迹 +// token 接口调用凭证 +func (ep *ExpressPathGetter) Get(token string) (*GetExpressPathResponse, error) { + api := baseURL + apiGetExpressPath + return ep.get(api, token) +} + +func (ep *ExpressPathGetter) get(api, token string) (*GetExpressPathResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetExpressPathResponse) + if err := postJSON(url, ep, res); err != nil { + return nil, err + } + + return res, nil +} + +// ExpressOrderSource 订单来源 +type ExpressOrderSource = uint8 + +// 所有订单来源 +const ( + FromWeapp ExpressOrderSource = 0 // 小程序订单 + FromAppOrH5 = 2 // APP或H5订单 +) + +// ExpressOrderCreator 订单创建器 +type ExpressOrderCreator struct { + ExpressOrder + AddSource ExpressOrderSource `json:"add_source"` // 订单来源,0为小程序订单,2为App或H5订单,填2则不发送物流服务通知 + WXAppID string `json:"wx_appid,omitempty"` // App或H5的appid,add_source=2时必填,需和开通了物流助手的小程序绑定同一open帐号 + ExpectTime uint `json:"expect_time,omitempty"` // 顺丰必须填写此字段。预期的上门揽件时间,0表示已事先约定取件时间;否则请传预期揽件时间戳,需大于当前时间,收件员会在预期时间附近上门。例如expect_time为“1557989929”,表示希望收件员将在2019年05月16日14:58:49-15:58:49内上门取货。 + TagID uint `json:"tagid,omitempty"` //订单标签id,用于平台型小程序区分平台上的入驻方,tagid须与入驻方账号一一对应,非平台型小程序无需填写该字段 +} + +// InsureStatus 保价状态 +type InsureStatus = uint8 + +// 所有保价状态 +const ( + Uninsured = 0 // 不保价 + Insured = 1 // 保价 +) + +// CreateExpressOrderResponse 创建订单返回数据 +type CreateExpressOrderResponse struct { + CommonError + OrderID string `json:"order_id"` // 订单ID,下单成功时返回 + WaybillID string `json:"waybill_id"` // 运单ID,下单成功时返回 + WaybillData []struct { + Key string `json:"key"` // 运单信息 key + Value string `json:"value"` // 运单信息 value + } `json:"waybill_data"` // 运单信息,下单成功时返回 + DeliveryResultcode int `json:"delivery_resultcode"` // 快递侧错误码,下单失败时返回 + DeliveryResultmsg string `json:"delivery_resultmsg"` // 快递侧错误信息,下单失败时返回 +} + +// Create 生成运单 +// token 接口调用凭证 +func (creator *ExpressOrderCreator) Create(token string) (*CreateExpressOrderResponse, error) { + api := baseURL + apiAddExpressOrder + return creator.create(api, token) +} + +func (creator *ExpressOrderCreator) create(api, token string) (*CreateExpressOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CreateExpressOrderResponse) + if err := postJSON(url, creator, res); err != nil { + return nil, err + } + + return res, nil +} + +// CancelOrderResponse 取消订单返回数据 +type CancelOrderResponse struct { + CommonError + Count uint `json:"count"` //快递公司数量 + Data []struct { + DeliveryID string `json:"delivery_id"` // 快递公司 ID + DeliveryName string `json:"delivery_name"` // 快递公司名称 + + } `json:"data"` //快递公司信息列表 +} + +// DeliveryList 支持的快递公司列表 +type DeliveryList struct { + CommonError + Count uint `json:"count"` // 快递公司数量 + Data []struct { + ID string `json:"delivery_id"` // 快递公司 ID + Name string `json:"delivery_name"` // 快递公司名称 + } `json:"data"` // 快递公司信息列表 +} + +// GetAllDelivery 获取支持的快递公司列表 +// token 接口调用凭证 +func GetAllDelivery(token string) (*DeliveryList, error) { + api := baseURL + apiGetAllDelivery + return getAllDelivery(api, token) +} + +func getAllDelivery(api, token string) (*DeliveryList, error) { + queries := requestQueries{ + "access_token": token, + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(DeliveryList) + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// ExpressOrderGetter 订单获取器 +type ExpressOrderGetter struct { + OrderID string `json:"order_id"` // 订单 ID,需保证全局唯一 + OpenID string `json:"openid,omitempty"` // 用户openid,当add_source=2时无需填写(不发送物流服务通知) + DeliveryID string `json:"delivery_id"` // 快递公司ID,参见getAllDelivery + WaybillID string `json:"waybill_id"` // 运单ID +} + +// GetExpressOrderResponse 获取运单返回数据 +type GetExpressOrderResponse struct { + CommonError + PrintHTML string `json:"print_html"` // 运单 html 的 BASE64 结果 + WaybillData []struct { + Key string `json:"key"` // 运单信息 key + Value string `json:"value"` // 运单信息 value + } `json:"waybill_data"` // 运单信息 +} + +// Get 获取运单数据 +// token 接口调用凭证 +func (getter *ExpressOrderGetter) Get(token string) (*GetExpressOrderResponse, error) { + api := baseURL + apiGetExpressOrder + return getter.get(api, token) +} + +func (getter *ExpressOrderGetter) get(api, token string) (*GetExpressOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetExpressOrderResponse) + if err := postJSON(url, getter, res); err != nil { + return nil, err + } + + return res, nil +} + +// ExpressOrderCanceler 订单取消器 +type ExpressOrderCanceler ExpressOrderGetter + +// Cancel 取消运单 +// token 接 口调用凭证 +func (canceler *ExpressOrderCanceler) Cancel(token string) (*CommonError, error) { + api := baseURL + apiCancelExpressOrder + return canceler.cancel(api, token) +} + +func (canceler *ExpressOrderCanceler) cancel(api, token string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, canceler, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetPrinterResponse 获取打印员返回数据 +type GetPrinterResponse struct { + CommonError + Count uint `json:"count"` // 已经绑定的打印员数量 + OpenID []string `json:"openid"` // 打印员 openid 列表 + TagIDList []string `json:"tagid_list"` +} + +// GetPrinter 获取打印员。若需要使用微信打单 PC 软件,才需要调用。 +// token 接口调用凭证 +func GetPrinter(token string) (*GetPrinterResponse, error) { + api := baseURL + apiGetPrinter + return getPrinter(api, token) +} + +func getPrinter(api, token string) (*GetPrinterResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetPrinterResponse) + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// QuotaGetter 电子面单余额获取器 +type QuotaGetter struct { + DeliveryID string `json:"delivery_id"` // 快递公司ID,参见getAllDelivery + BizID string `json:"biz_id"` // 快递公司客户编码 +} + +// QuotaGetResponse 电子面单余额 +type QuotaGetResponse struct { + CommonError + Number uint // 电子面单余额 +} + +// Get 获取电子面单余额。仅在使用加盟类快递公司时,才可以调用。 +func (getter *QuotaGetter) Get(token string) (*QuotaGetResponse, error) { + api := baseURL + apiGetQuota + return getter.get(api, token) +} + +func (getter *QuotaGetter) get(api, token string) (*QuotaGetResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(QuotaGetResponse) + if err := postJSON(url, getter, res); err != nil { + return nil, err + } + + return res, nil +} + +// UpdateExpressOrderTester 模拟的快递公司更新订单 +type UpdateExpressOrderTester struct { + BizID string `json:"biz_id"` // 商户id,需填test_biz_id + OrderID string `json:"order_id"` // 订单ID,下单成功时返回 + WaybillID string `json:"waybill_id"` // 运单 ID + DeliveryID string `json:"delivery_id"` // 快递公司 ID + ActionTime uint `json:"action_time"` // 轨迹变化 Unix 时间戳 + ActionType uint `json:"action_type"` // 轨迹变化类型 + ActionMsg string `json:"action_msg"` // 轨迹变化具体信息说明,展示在快递轨迹详情页中。若有手机号码,则直接写11位手机号码。使用UTF-8编码。 +} + +// Test 模拟快递公司更新订单状态, 该接口只能用户测试 +func (tester *UpdateExpressOrderTester) Test(token string) (*CommonError, error) { + api := baseURL + apiTestUpdateOrder + return tester.test(api, token) +} + +func (tester *UpdateExpressOrderTester) test(api, token string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, tester, res); err != nil { + return nil, err + } + + return res, nil +} + +// PrinterUpdater 打印员更新器 +type PrinterUpdater struct { + OpenID string `json:"openid"` // 打印员 openid + Type BindType `json:"update_type"` // 更新类型 + TagIDList string `json:"tagid_list"` // 用于平台型小程序设置入驻方的打印员面单打印权限,同一打印员最多支持10个tagid,使用逗号分隔,如填写123,456,表示该打印员可以拉取到tagid为123和456的下的单,非平台型小程序无需填写该字段 +} + +// Update 更新打印员。若需要使用微信打单 PC 软件,才需要调用。 +func (updater *PrinterUpdater) Update(token string) (*CommonError, error) { + api := baseURL + apiUpdatePrinter + return updater.update(api, token) +} + +func (updater *PrinterUpdater) update(api, token string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, updater, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/express_business_test.go b/app/lib/weapp/express_business_test.go new file mode 100644 index 0000000..3fc7717 --- /dev/null +++ b/app/lib/weapp/express_business_test.go @@ -0,0 +1,954 @@ +package weapp + +import ( + "encoding/base64" + "encoding/json" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestAddExpressOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiAddExpressOrder { + t.Fatalf("Except to path '%s',get '%s'", apiAddExpressOrder, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + AddSource uint8 `json:"add_source"` + WXAppID string `json:"wx_appid"` + OrderID string `json:"order_id"` + OpenID string `json:"openid"` + DeliveryID string `json:"delivery_id"` + BizID string `json:"biz_id"` + CustomRemark string `json:"custom_remark"` + Sender struct { + Name string `json:"name"` + Tel string `json:"tel"` + Mobile string `json:"mobile"` + Company string `json:"company"` + PostCode string `json:"post_code"` + Country string `json:"country"` + Province string `json:"province"` + City string `json:"city"` + Area string `json:"area"` + Address string `json:"address"` + } `json:"sender"` + Receiver struct { + Name string `json:"name"` + Tel string `json:"tel"` + Mobile string `json:"mobile"` + Company string `json:"company"` + PostCode string `json:"post_code"` + Country string `json:"country"` + Province string `json:"province"` + City string `json:"city"` + Area string `json:"area"` + Address string `json:"address"` + } `json:"receiver"` + Cargo struct { + Count uint `json:"count"` + Weight float64 `json:"weight"` + SpaceX float64 `json:"space_x"` + SpaceY float64 `json:"space_y"` + SpaceZ float64 `json:"space_z"` + DetailList []struct { + Name string `json:"name"` + Count uint `json:"count"` + } `json:"detail_list"` + } `json:"cargo"` + Shop struct { + WXAPath string `json:"wxa_path"` + IMGUrl string `json:"img_url"` + GoodsName string `json:"goods_name"` + GoodsCount uint `json:"goods_count"` + } `json:"shop"` + Insured struct { + Used InsureStatus `json:"use_insured"` + Value uint `json:"insured_value"` + } `json:"insured"` + Service struct { + Type uint8 `json:"service_type"` + Name string `json:"service_name"` + } `json:"service"` + ExpectTime uint `json:"expect_time"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.AddSource == 2 && params.WXAppID == "" { + t.Error("param wx_appid can not be empty") + } + if params.AddSource != 2 && params.OpenID == "" { + t.Error("param openid can not be empty") + } + if params.OrderID == "" { + t.Error("param order_id can not be empty") + } + if params.DeliveryID == "" { + t.Error("param delivery_id can not be empty") + } + + if params.BizID == "" { + t.Error("param biz_id can not be empty") + } + + if params.Sender.Name == "" { + t.Error("param sender.name can not be empty") + } + if params.Sender.Province == "" { + t.Error("param sender.province can not be empty") + } + if params.Sender.City == "" { + t.Error("param sender.city can not be empty") + } + if params.Sender.Area == "" { + t.Error("param sender.area can not be empty") + } + if params.Sender.Address == "" { + t.Error("param sender.address can not be empty") + } + if params.Receiver.Name == "" { + t.Error("param receiver.name can not be empty") + } + if params.Receiver.Province == "" { + t.Error("param receiver.province can not be empty") + } + if params.Receiver.City == "" { + t.Error("param receiver.city can not be empty") + } + if params.Receiver.Area == "" { + t.Error("param receiver.area can not be empty") + } + if params.Receiver.Address == "" { + t.Error("param receiver.address can not be empty") + } + + if params.Cargo.Count == 0 { + t.Error("param cargo.count can not be zero") + } + if params.Cargo.Weight == 0 { + t.Error("param cargo.weight can not be zero") + } + if params.Cargo.SpaceX == 0 { + t.Error("param cargo.spaceX can not be zero") + } + if params.Cargo.SpaceY == 0 { + t.Error("param cargo.spaceY can not be zero") + } + if params.Cargo.SpaceZ == 0 { + t.Error("param cargo.spaceZ can not be zero") + } + if len(params.Cargo.DetailList) == 0 { + t.Error("param cargo.detailList can not be empty") + } else { + if (params.Cargo.DetailList[0].Name) == "" { + t.Error("param cargo.detailList.name can not be empty") + } + if (params.Cargo.DetailList[0].Count) == 0 { + t.Error("param cargo.detailList.count can not be zero") + } + } + if params.Shop.WXAPath == "" { + t.Error("param shop.wxa_path can not be empty") + } + if params.Shop.IMGUrl == "" { + t.Error("param shop.img_url can not be empty") + } + if params.Shop.GoodsName == "" { + t.Error("param shop.goods_name can not be empty") + } + if params.Shop.GoodsCount == 0 { + t.Error("param shop.goods_count can not be zero") + } + if params.Insured.Used == 0 { + t.Error("param insured.use_insured can not be zero") + } + if params.Service.Name == "" { + t.Error("param Service.service_name can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 9300501, + "errmsg": "delivery logic fail", + "delivery_resultcode": 10002, + "delivery_resultmsg": "客户密码不正确", + "order_id": "01234567890123456789", + "waybill_id": "123456789", + "waybill_data": [ + { + "key": "SF_bagAddr", + "value": "广州" + }, + { + "key": "SF_mark", + "value": "101- 07-03 509" + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + creator := ExpressOrderCreator{ + AddSource: 0, + ExpressOrder: ExpressOrder{ + OrderID: "01234567890123456789", + OpenID: "oABC123456", + DeliveryID: "SF", + BizID: "xyz", + CustomRemark: "易碎物品", + Sender: ExpreseeUserInfo{ + "张三", + "020-88888888", + "18666666666", + "公司名", + "123456", + "中国", + "广东省", + "广州市", + "海珠区", + "XX路XX号XX大厦XX栋XX", + }, + Receiver: ExpreseeUserInfo{ + "王小蒙", + "020-77777777", + "18610000000", + "公司名", + "654321", + "中国", + "广东省", + "广州市", + "天河区", + "XX路XX号XX大厦XX栋XX", + }, + Shop: ExpressShop{ + "/index/index?from=waybill&id=01234567890123456789", + "https://mmbiz.qpic.cn/mmbiz_png/OiaFLUqewuIDNQnTiaCInIG8ibdosYHhQHPbXJUrqYSNIcBL60vo4LIjlcoNG1QPkeH5GWWEB41Ny895CokeAah8A/640", + "一千零一夜钻石包&爱马仕铂金包", + 2, + }, + Cargo: ExpressCargo{ + 2, + 5.5, + 30.5, + 20, + 20, + []CargoDetail{ + { + "一千零一夜钻石包", + 1, + }, + { + "爱马仕铂金包", + 1, + }, + }, + }, + Insured: ExpressInsure{ + 1, + 10000, + }, + Service: ExpressService{ + 0, + "标准快递", + }, + }, + } + _, err := creator.create(ts.URL+apiAddExpressOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestCancelExpressOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiCancelExpressOrder { + t.Fatalf("Except to path '%s',get '%s'", apiCancelExpressOrder, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + OrderID string `json:"order_id"` + OpenID string `json:"openid"` + DeliveryID string `json:"delivery_id"` + WaybillID string `json:"waybill_id"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.OrderID == "" { + t.Error("param order_id can not be empty") + } + if params.DeliveryID == "" { + t.Error("param delivery_id can not be empty") + } + if params.WaybillID == "" { + t.Error("param waybill_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + canceler := ExpressOrderCanceler{ + OrderID: "01234567890123456789", + OpenID: "oABC123456", + DeliveryID: "SF", + WaybillID: "123456789", + } + _, err := canceler.cancel(ts.URL+apiCancelExpressOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestGetAllDelivery(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetAllDelivery { + t.Fatalf("Except to path '%s',get '%s'", apiGetAllDelivery, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "count": 8, + "data": [ + { + "delivery_id": "BEST", + "delivery_name": "百世快递" + }, + { + "delivery_id": "EMS", + "delivery_name": "中国邮政速递物流" + }, + { + "delivery_id": "OTP", + "delivery_name": "承诺达特快" + }, + { + "delivery_id": "PJ", + "delivery_name": "品骏物流" + }, + { + "delivery_id": "SF", + "delivery_name": "顺丰速运" + }, + { + "delivery_id": "YTO", + "delivery_name": "圆通速递" + }, + { + "delivery_id": "YUNDA", + "delivery_name": "韵达快递" + }, + { + "delivery_id": "ZTO", + "delivery_name": "中通快递" + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getAllDelivery(ts.URL+apiGetAllDelivery, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestGetExpressOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetExpressOrder { + t.Fatalf("Except to path '%s',get '%s'", apiGetExpressOrder, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + OrderID string `json:"order_id"` + OpenID string `json:"openid"` + DeliveryID string `json:"delivery_id"` + WaybillID string `json:"waybill_id"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.OrderID == "" { + t.Error("param order_id can not be empty") + } + if params.DeliveryID == "" { + t.Error("param delivery_id can not be empty") + } + if params.WaybillID == "" { + t.Error("param waybill_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + canceler := ExpressOrderGetter{ + OrderID: "01234567890123456789", + OpenID: "oABC123456", + DeliveryID: "SF", + WaybillID: "123456789", + } + _, err := canceler.get(ts.URL+apiGetExpressOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestGetExpressPath(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + expectedPath := "/cgi-bin/express/business/path/get" + if path != expectedPath { + t.Fatalf("Except to path '%s',get '%s'", expectedPath, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + OrderID string `json:"order_id"` + OpenID string `json:"openid"` + DeliveryID string `json:"delivery_id"` + WaybillID string `json:"waybill_id"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.OrderID == "" { + t.Error("param order_id can not be empty") + } + if params.DeliveryID == "" { + t.Error("param delivery_id can not be empty") + } + if params.WaybillID == "" { + t.Error("param waybill_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "openid": "OPENID", + "delivery_id": "SF", + "waybill_id": "12345678901234567890", + "path_item_num": 3, + "path_item_list": [ + { + "action_time": 1533052800, + "action_type": 100001, + "action_msg": "快递员已成功取件" + }, + { + "action_time": 1533062800, + "action_type": 200001, + "action_msg": "快件已到达xxx集散中心,准备发往xxx" + }, + { + "action_time": 1533072800, + "action_type": 300001, + "action_msg": "快递员已出发,联系电话xxxxxx" + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + getter := ExpressPathGetter{ + OrderID: "01234567890123456789", + OpenID: "oABC123456", + DeliveryID: "SF", + WaybillID: "123456789", + } + _, err := getter.get(ts.URL+apiGetExpressPath, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestGetPrinter(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + expectedPath := "/cgi-bin/express/business/printer/getall" + if path != expectedPath { + t.Fatalf("Except to path '%s',get '%s'", expectedPath, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "count": 2, + "openid": [ + "oABC", + "oXYZ" + ], + "tagid_list": [ + "123", + "456" + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getPrinter(ts.URL+apiGetPrinter, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestGetQuota(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + expectedPath := "/cgi-bin/express/business/quota/get" + if path != expectedPath { + t.Fatalf("Except to path '%s',get '%s'", expectedPath, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + DeliveryID string `json:"delivery_id"` + BizID string `json:"biz_id"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.DeliveryID == "" { + t.Error("param delivery_id can not be empty") + } + if params.BizID == "" { + t.Error("param biz_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "quota_num": 210 + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + getter := QuotaGetter{ + DeliveryID: "YTO", + BizID: "xyz", + } + + _, err := getter.get(ts.URL+apiGetQuota, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestOnPathUpdate(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnExpressPathUpdate(func(mix *ExpressPathUpdateResult) { + if mix.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + + if mix.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if mix.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if mix.MsgType != "event" { + t.Error("Unexpected message type") + } + + if mix.Event != "add_express_path" { + t.Error("Unexpected message event") + } + + if mix.DeliveryID == "" { + t.Error("DeliveryID can not be empty") + } + if mix.WayBillID == "" { + t.Error("WayBillID can not be empty") + } + if mix.Version == 0 { + t.Error("Version can not be zero") + } + if mix.Count == 0 { + t.Error("Count can not be zero") + } + + if len(mix.Actions) > 0 { + if mix.Actions[0].ActionTime == 0 { + t.Error("Actions.ActionTime can not be zero") + } + if mix.Actions[0].ActionType == 0 { + t.Error("Actions.ActionType can not be zero") + } + if mix.Actions[0].ActionMsg == "" { + t.Error("Actions.ActionMsg can not be empty") + } + } + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + xmlData := ` + + + 1546924844 + + + + + 3 + 3 + + 1546924840 + 100001 + + + + 1546924841 + 200001 + + + + 1546924842 + 200001 + + + ` + res, err := http.Post(ts.URL, "text/xml", strings.NewReader(xmlData)) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + + jsonData := `{ + "ToUserName": "toUser", + "FromUserName": "fromUser", + "CreateTime": 1546924844, + "MsgType": "event", + "Event": "add_express_path", + "DeliveryID": "SF", + "WayBillId": "123456789", + "Version": 2, + "Count": 3, + "Actions": [ + { + "ActionTime": 1546924840, + "ActionType": 100001, + "ActionMsg": "小哥A揽件成功" + }, + { + "ActionTime": 1546924841, + "ActionType": 200001, + "ActionMsg": "到达广州集包地" + }, + { + "ActionTime": 1546924842, + "ActionType": 200001, + "ActionMsg": "运往目的地" + } + ] + }` + res, err = http.Post(ts.URL, "application/json", strings.NewReader(jsonData)) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() +} + +func TestTestUpdateOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + expectedPath := "/cgi-bin/express/business/test_update_order" + if path != expectedPath { + t.Fatalf("Except to path '%s',get '%s'", expectedPath, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + BizID string `json:"biz_id"` // 商户id,需填test_biz_id + OrderID string `json:"order_id"` // 订单ID,下单成功时返回 + WaybillID string `json:"waybill_id"` // 运单 ID + DeliveryID string `json:"delivery_id"` // 快递公司 ID + ActionTime uint `json:"action_time"` // 轨迹变化 Unix 时间戳 + ActionType int `json:"action_type"` // 轨迹变化类型 + ActionMsg string `json:"action_msg"` // 轨迹变化具体信息说明,展示在快递轨迹详情页中。若有手机号码,则直接写11位手机号码。使用UTF-8编码。 + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.DeliveryID == "" { + t.Error("param delivery_id can not be empty") + } + if params.OrderID == "" { + t.Error("param order_id can not be empty") + } + if params.WaybillID == "" { + t.Error("param waybill_id can not be empty") + } + + if params.BizID == "" { + t.Error("param biz_id can not be empty") + } + if params.ActionMsg == "" { + t.Error("param action_msg can not be empty") + } + if params.ActionTime == 0 { + t.Error("param action_time can not be empty") + } + if params.ActionType == 0 { + t.Error("param action_type can not be empty") + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + params := `{ + "biz_id": "test_biz_id", + "order_id": "xxxxxxxxxxxx", + "delivery_id": "TEST", + "waybill_id": "xxxxxxxxxx", + "action_time": 123456789, + "action_type": 100001, + "action_msg": "揽件阶段" + }` + + tester := new(UpdateExpressOrderTester) + err := json.Unmarshal([]byte(params), tester) + if err != nil { + t.Error(err) + } + + _, err = tester.test(ts.URL+apiTestUpdateOrder, "mock-access-token") + if err != nil { + t.Error(err) + } +} + +func TestUpdatePrinter(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != "/cgi-bin/express/business/printer/update" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + OpenID string `json:"openid"` // 打印员 openid + Type BindType `json:"update_type"` // 更新类型 + TagIDList string `json:"tagid_list"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.OpenID == "" { + t.Error("param openid can not be empty") + } + if params.Type == "" { + t.Error("param update_type can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + params := `{ + "openid": "oJ4v0wRAfiXcnIbM3SgGEUkTw3Qw", + "update_type": "bind", + "tagid_list": "123,456" + }` + updater := new(PrinterUpdater) + err := json.Unmarshal([]byte(params), updater) + if err != nil { + t.Fatal(err) + } + + _, err = updater.update(ts.URL+apiUpdatePrinter, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/express_provider.go b/app/lib/weapp/express_provider.go new file mode 100644 index 0000000..0b7ef69 --- /dev/null +++ b/app/lib/weapp/express_provider.go @@ -0,0 +1,154 @@ +package weapp + +const ( + apiGetContact = "/cgi-bin/express/delivery/contact/get" + apiPreviewTemplate = "/cgi-bin/express/delivery/template/preview" + apiUpdateBusiness = "/cgi-bin/express/delivery/service/business/update" + apiUpdatePath = "/cgi-bin/express/delivery/path/update" +) + +// GetContactResponse 获取面单联系人信息返回数据 +type GetContactResponse struct { + CommonError + WaybillID string `json:"waybill_id"` // 运单 ID + Sender ContactUser `json:"sender"` // 发件人信息 + Receiver ContactUser `json:"receiver"` // 收件人信息 +} + +// ContactUser 联系人 +type ContactUser struct { + Address string `json:"address"` //地址,已经将省市区信息合并 + Name string `json:"name"` //用户姓名 + Tel string `json:"tel"` //座机号码 + Mobile string `json:"mobile"` //手机号码 +} + +// GetContact 获取面单联系人信息 +// accessToken, token, watBillID 接口调用凭证 +func GetContact(accessToken, token, watBillID string) (*GetContactResponse, error) { + api := baseURL + apiGetContact + return getContact(api, accessToken, token, watBillID) +} + +func getContact(api, accessToken, token, watBillID string) (*GetContactResponse, error) { + url, err := tokenAPI(api, accessToken) + if err != nil { + return nil, err + } + + params := requestParams{ + "token": token, + "waybill_id": watBillID, + } + + res := new(GetContactResponse) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// ExpressTemplatePreviewer 面单模板预览器 +type ExpressTemplatePreviewer struct { + WaybillID string `json:"waybill_id"` // 运单 ID + WaybillTemplate string `json:"waybill_template"` // 面单 HTML 模板内容(需经 Base64 编码) + WaybillData string `json:"waybill_data"` // 面单数据。详情参考下单事件返回值中的 WaybillData + Custom ExpressOrder `json:"custom"` // 商户下单数据,格式是商户侧下单 API 中的请求体 +} + +// PreviewTemplateResponse 预览面单模板返回数据 +type PreviewTemplateResponse struct { + CommonError + WaybillID string `json:"waybill_id"` // 运单 ID + RenderedWaybillTemplate string `json:"rendered_waybill_template"` // 渲染后的面单 HTML 文件(已经过 Base64 编码) +} + +// Preview 预览面单模板。用于调试面单模板使用。 +// token 接口调用凭证 +func (previewer *ExpressTemplatePreviewer) Preview(token string) (*PreviewTemplateResponse, error) { + api := baseURL + apiPreviewTemplate + return previewer.preview(api, token) +} + +func (previewer *ExpressTemplatePreviewer) preview(api, token string) (*PreviewTemplateResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(PreviewTemplateResponse) + if err := postJSON(url, previewer, res); err != nil { + return nil, err + } + + return res, nil +} + +// BusinessResultCode 商户审核结果状态码 +type BusinessResultCode = int8 + +// 所有商户审核结果状态码 +const ( + ResultSuccess BusinessResultCode = 0 // 审核通过 + ResultFailed = 1 // 审核失败 +) + +// BusinessUpdater 商户审核结果更新器 +type BusinessUpdater struct { + ShopAppID string `json:"shop_app_id"` // 商户的小程序AppID,即审核商户事件中的 ShopAppID + BizID string `json:"biz_id"` // 商户账户 + ResultCode BusinessResultCode `json:"result_code"` // 审核结果,0 表示审核通过,其他表示审核失败 + ResultMsg string `json:"result_msg,omitempty"` // 审核错误原因,仅 result_code 不等于 0 时需要设置 +} + +// Update 更新商户审核结果 +// token 接口调用凭证 +func (updater *BusinessUpdater) Update(token string) (*CommonError, error) { + api := baseURL + apiUpdateBusiness + return updater.update(api, token) +} + +func (updater *BusinessUpdater) update(api, token string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, updater, res); err != nil { + return nil, err + } + + return res, nil +} + +// ExpressPathUpdater 运单轨迹更新器 +type ExpressPathUpdater struct { + Token string `json:"token"` // 商户侧下单事件中推送的 Token 字段 + WaybillID string `json:"waybill_id"` // 运单 ID + ActionTime uint `json:"action_time"` // 轨迹变化 Unix 时间戳 + ActionType uint `json:"action_type"` // 轨迹变化类型 + ActionMsg string `json:"action_msg"` // 轨迹变化具体信息说明,展示在快递轨迹详情页中。若有手机号码,则直接写11位手机号码。使用UTF-8编码。 +} + +// Update 更新运单轨迹 +// token 接口调用凭证 +func (updater *ExpressPathUpdater) Update(token string) (*CommonError, error) { + api := baseURL + apiUpdatePath + return updater.update(api, token) +} + +func (updater *ExpressPathUpdater) update(api, token string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(url, updater, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/express_provider_test.go b/app/lib/weapp/express_provider_test.go new file mode 100644 index 0000000..0d6b7c9 --- /dev/null +++ b/app/lib/weapp/express_provider_test.go @@ -0,0 +1,1332 @@ +package weapp + +import ( + "encoding/base64" + "encoding/json" + "encoding/xml" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestGetContact(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != "/cgi-bin/express/delivery/contact/get" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Token string `json:"token"` + WaybillID string `json:"waybill_id"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Token == "" { + t.Error("param token can not be empty") + } + if params.WaybillID == "" { + t.Error("param waybill_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "waybill_id": "12345678901234567890", + "sender": { + "address": "广东省广州市海珠区XX路XX号XX大厦XX栋XX", + "name": "张三", + "tel": "020-88888888", + "mobile": "18666666666" + }, + "receiver": { + "address": "广东省广州市天河区XX路XX号XX大厦XX栋XX", + "name": "王小蒙", + "tel": "029-77777777", + "mobile": "18610000000" + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getContact(ts.URL+apiGetContact, "mock-access-token", "mock-token", "mock-wat-bill-id") + if err != nil { + t.Fatal(err) + } +} + +func TestOnAddExpressOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnAddExpressOrder(func(result *AddExpressOrderResult) *AddExpressOrderReturn { + if result.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + if result.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if result.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if result.MsgType != "event" { + t.Error("Unexpected message type") + } + if result.Event != "add_waybill" { + t.Error("Unexpected message event") + } + if result.Token == "" { + t.Error("Result column 'Token' can not be empty") + } + if result.OrderID == "" { + t.Error("Result column 'OrderID' can not be empty") + } + if result.BizID == "" { + t.Error("Result column 'BizID' can not be empty") + } + if result.BizPwd == "" { + t.Error("Result column 'BizPwd' can not be empty") + } + if result.ShopAppID == "" { + t.Error("Result column 'ShopAppID' can not be empty") + } + if result.WayBillID == "" { + t.Error("Result column 'WayBillID' can not be empty") + } + if result.Remark == "" { + t.Error("Result column 'Remark' can not be empty") + } + + if result.Sender.Name == "" { + t.Error("Result column 'Sender.Name' can not be empty") + } + if result.Sender.Tel == "" { + t.Error("Result column 'Sender.Tel' can not be empty") + } + if result.Sender.Mobile == "" { + t.Error("Result column 'Sender.Mobile' can not be empty") + } + if result.Sender.Company == "" { + t.Error("Result column 'Sender.Company' can not be empty") + } + if result.Sender.PostCode == "" { + t.Error("Result column 'Sender.PostCode' can not be empty") + } + if result.Sender.Country == "" { + t.Error("Result column 'Sender.Country' can not be empty") + } + if result.Sender.Province == "" { + t.Error("Result column 'Sender.Province' can not be empty") + } + if result.Sender.City == "" { + t.Error("Result column 'Sender.City' can not be empty") + } + if result.Sender.Area == "" { + t.Error("Result column 'Sender.Area' can not be empty") + } + if result.Sender.Address == "" { + t.Error("Result column 'Sender.Address' can not be empty") + } + if result.Receiver.Name == "" { + t.Error("Result column 'Receiver.Name' can not be empty") + } + if result.Receiver.Tel == "" { + t.Error("Result column 'Receiver.Tel' can not be empty") + } + if result.Receiver.Mobile == "" { + t.Error("Result column 'Receiver.Mobile' can not be empty") + } + if result.Receiver.Company == "" { + t.Error("Result column 'Receiver.Company' can not be empty") + } + if result.Receiver.PostCode == "" { + t.Error("Result column 'Receiver.PostCode' can not be empty") + } + if result.Receiver.Country == "" { + t.Error("Result column 'Receiver.Country' can not be empty") + } + if result.Receiver.Province == "" { + t.Error("Result column 'Receiver.Province' can not be empty") + } + if result.Receiver.City == "" { + t.Error("Result column 'Receiver.City' can not be empty") + } + if result.Receiver.Area == "" { + t.Error("Result column 'Receiver.Area' can not be empty") + } + if result.Receiver.Address == "" { + t.Error("Result column 'Receiver.Address' can not be empty") + } + if result.Cargo.Weight == 0 { + t.Error("Result column 'Cargo.Weight' can not be zero") + } + if result.Cargo.SpaceX == 0 { + t.Error("Result column 'Cargo.SpaceX' can not be zero") + } + if result.Cargo.SpaceY == 0 { + t.Error("Result column 'Cargo.SpaceY' can not be zero") + } + if result.Cargo.SpaceZ == 0 { + t.Error("Result column 'Cargo.SpaceZ' can not be zero") + } + if result.Cargo.Count == 0 { + t.Error("Result column 'Cargo.Count' can not be zero") + } + if result.Insured.Used == 0 { + t.Error("Result column 'Insured.Used' can not be zero") + } + if result.Insured.Value == 0 { + t.Error("Result column 'Insured.Value' can not be zero") + } + if result.Service.Type == 0 { + t.Error("Result column 'Service.Type' can not be zero") + } + if result.Service.Name == "" { + t.Error("Result column 'Service.Name' can not be empty") + } + + res := AddExpressOrderReturn{ + CommonServerReturn: CommonServerReturn{ + "oABCD", "gh_abcdefg", 1533042556, "event", "add_waybill", 1, "success", + }, + Token: "1234ABC234523451", + OrderID: "012345678901234567890123456789", + BizID: "xyz", + WayBillID: "123456789", + WaybillData: "##ZTO_bagAddr##广州##ZTO_mark##888-666-666##", + } + + return &res + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + xmlData := ` + + + 1533042556 + + + 1234ABC234523451 + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + 1.2 + 20.5 + 15.0 + 10.0 + 2 + + + 1 + + + + 1 + + + + 1 + 10000 + + + 123 + + +
` + xmlResp, err := http.Post(ts.URL, "text/xml", strings.NewReader(xmlData)) + if err != nil { + t.Error(err) + } + defer xmlResp.Body.Close() + res := new(AddExpressOrderReturn) + if err := xml.NewDecoder(xmlResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event == "" { + t.Error("Response column 'Event' can not be empty") + } + if res.Token == "" { + t.Error("Response column 'Token' can not be empty") + } + if res.OrderID == "" { + t.Error("Response column 'OrderID' can not be empty") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.WayBillID == "" { + t.Error("Response column 'WayBillID' can not be empty") + } + + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } + if res.WaybillData == "" { + t.Error("Response column 'WaybillData' can not be empty") + } + + jsonData := `{ + "ToUserName": "gh_abcdefg", + "FromUserName": "oABCD", + "CreateTime": 1533042556, + "MsgType": "event", + "Event": "add_waybill", + "Token": "1234ABC234523451", + "OrderID": "012345678901234567890123456789", + "BizID": "xyz", + "BizPwd": "xyz123", + "ShopAppID": "wxABCD", + "WayBillID": "123456789", + "Remark": "易碎物品", + "Sender": { + "Name": "张三", + "Tel": "020-88888888", + "Mobile": "18666666666", + "Company": "公司名", + "PostCode": "123456", + "Country": "中国", + "Province": "广东省", + "City": "广州市", + "Area": "海珠区", + "Address": "XX路XX号XX大厦XX栋XX" + }, + "Receiver": { + "Name": "王小蒙", + "Tel": "029-77777777", + "Mobile": "18610000000", + "Company": "公司名", + "PostCode": "654321", + "Country": "中国", + "Province": "广东省", + "City": "广州市", + "Area": "天河区", + "Address": "XX路XX号XX大厦XX栋XX" + }, + "Cargo": { + "Weight": 1.2, + "Space_X": 20.5, + "Space_Y": 15, + "Space_Z": 10, + "Count": 2, + "DetailList": [ + { + "Name": "一千零一夜钻石包", + "Count": 1 + }, + { + "Name": "爱马仕柏金钻石包", + "Count": 1 + } + ] + }, + "Insured": { + "UseInsured": 1, + "InsuredValue": 10000 + }, + "Service": { + "ServiceType": 123, + "ServiceName": "标准快递" + } + }` + + jsonResp, err := http.Post(ts.URL, "application/json", strings.NewReader(jsonData)) + if err != nil { + t.Error(err) + } + defer jsonResp.Body.Close() + res = new(AddExpressOrderReturn) + if err := json.NewDecoder(jsonResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event == "" { + t.Error("Response column 'Event' can not be empty") + } + if res.Token == "" { + t.Error("Response column 'Token' can not be empty") + } + if res.OrderID == "" { + t.Error("Response column 'OrderID' can not be empty") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.WayBillID == "" { + t.Error("Response column 'WayBillID' can not be empty") + } + + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } + if res.WaybillData == "" { + t.Error("Response column 'WaybillData' can not be empty") + } +} + +func TestOnCancelExpressOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnCancelExpressOrder(func(result *CancelExpressOrderResult) *CancelExpressOrderReturn { + if result.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + if result.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if result.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if result.MsgType != "event" { + t.Error("Unexpected message type") + } + if result.Event != "cancel_waybill" { + t.Error("Unexpected message event") + } + + if result.OrderID == "" { + t.Error("Result column 'OrderID' can not be empty") + } + if result.BizID == "" { + t.Error("Result column 'BizID' can not be empty") + } + if result.BizPwd == "" { + t.Error("Result column 'BizPwd' can not be empty") + } + if result.ShopAppID == "" { + t.Error("Result column 'ShopAppID' can not be empty") + } + if result.WayBillID == "" { + t.Error("Result column 'WayBillID' can not be empty") + } + + res := CancelExpressOrderReturn{ + CommonServerReturn: CommonServerReturn{ + "oABCD", "gh_abcdefg", 1533042556, "event", "cancel_waybill", 1, "success", + }, + OrderID: "012345678901234567890123456789", + BizID: "xyz", + WayBillID: "123456789", + } + + return &res + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + xmlData := ` + + + 1533042556 + + + + + + + +` + xmlResp, err := http.Post(ts.URL, "text/xml", strings.NewReader(xmlData)) + if err != nil { + t.Error(err) + } + defer xmlResp.Body.Close() + res := new(CancelExpressOrderReturn) + if err := xml.NewDecoder(xmlResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event == "" { + t.Error("Response column 'Event' can not be empty") + } + if res.OrderID == "" { + t.Error("Response column 'OrderID' can not be empty") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.WayBillID == "" { + t.Error("Response column 'WayBillID' can not be empty") + } + + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } + + jsonData := `{ + "ToUserName": "gh_abcdefg", + "FromUserName": "oABCD", + "CreateTime": 1533042556, + "MsgType": "event", + "Event": "cancel_waybill", + "BizID": "xyz", + "BizPwd": "xyz123", + "ShopAppID": "wxABCD", + "OrderID": "012345678901234567890123456789", + "WayBillID": "123456789" + }` + + jsonResp, err := http.Post(ts.URL, "application/json", strings.NewReader(jsonData)) + if err != nil { + t.Error(err) + } + defer jsonResp.Body.Close() + res = new(CancelExpressOrderReturn) + if err := json.NewDecoder(jsonResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event == "" { + t.Error("Response column 'Event' can not be empty") + } + if res.OrderID == "" { + t.Error("Response column 'OrderID' can not be empty") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.WayBillID == "" { + t.Error("Response column 'WayBillID' can not be empty") + } + + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } +} + +func TestOnCheckBusiness(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnCheckExpressBusiness(func(result *CheckExpressBusinessResult) *CheckExpressBusinessReturn { + if result.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + if result.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if result.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if result.MsgType != "event" { + t.Error("Unexpected message type") + } + if result.Event != "check_biz" { + t.Error("Unexpected message event") + } + + if result.BizID == "" { + t.Error("Result column 'BizID' can not be empty") + } + if result.BizPwd == "" { + t.Error("Result column 'BizPwd' can not be empty") + } + if result.ShopAppID == "" { + t.Error("Result column 'ShopAppID' can not be empty") + } + if result.ShopName == "" { + t.Error("Result column 'ShopName' can not be empty") + } + + if result.ShopTelphone == "" { + t.Error("Result column 'ShopTelphone' can not be empty") + } + if result.SenderAddress == "" { + t.Error("Result column 'SenderAddress' can not be empty") + } + if result.ShopContact == "" { + t.Error("Result column 'ShopContact' can not be empty") + } + if result.ServiceName == "" { + t.Error("Result column 'ServiceName' can not be empty") + } + + res := CheckExpressBusinessReturn{ + CommonServerReturn: CommonServerReturn{ + "oABCD", "gh_abcdefg", 1533042556, "event", "check_biz", 1, "success", + }, + BizID: "xyz", + Quota: 3.14159265358, + } + return &res + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + xmlData := ` + + + 1533042556 + + + + + + + + + + +` + xmlResp, err := http.Post(ts.URL, "text/xml", strings.NewReader(xmlData)) + if err != nil { + t.Error(err) + } + defer xmlResp.Body.Close() + res := new(CheckExpressBusinessReturn) + if err := xml.NewDecoder(xmlResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event == "" { + t.Error("Response column 'Event' can not be empty") + } + if res.Quota == 0 { + t.Error("Response column 'Quota' can not be zero") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } + + jsonData := `{ + "ToUserName": "gh_abcdefg", + "FromUserName": "oABCD", + "CreateTime": 1533042556, + "MsgType": "event", + "Event": "check_biz", + "BizID": "xyz", + "BizPwd": "xyz123", + "ShopAppID": "wxABCD", + "ShopName": "商户名称", + "ShopTelphone": "18677778888", + "ShopContact": "村正", + "ServiceName": "标准快递", + "SenderAddress": "广东省广州市海珠区新港中路397号" + }` + + jsonResp, err := http.Post(ts.URL, "application/json", strings.NewReader(jsonData)) + if err != nil { + t.Error(err) + } + defer jsonResp.Body.Close() + res = new(CheckExpressBusinessReturn) + if err := json.NewDecoder(jsonResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event == "" { + t.Error("Response column 'Event' can not be empty") + } + if res.Quota == 0 { + t.Error("Response column 'Quota' can not be zero") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } +} + +func TestOnGetExpressQuota(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnGetExpressQuota(func(result *GetExpressQuotaResult) *GetExpressQuotaReturn { + if result.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + if result.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if result.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if result.MsgType != "event" { + t.Error("Unexpected message type") + } + if result.Event != "get_quota" { + t.Error("Unexpected message event") + } + + if result.BizID == "" { + t.Error("Result column 'BizID' can not be empty") + } + if result.BizPwd == "" { + t.Error("Result column 'BizPwd' can not be empty") + } + if result.ShopAppID == "" { + t.Error("Result column 'ShopAppID' can not be empty") + } + + res := GetExpressQuotaReturn{ + CommonServerReturn: CommonServerReturn{ + "oABCD", "gh_abcdefg", 1533042556, "event", "get_quota", 1, "success", + }, + BizID: "xyz", + Quota: 3.14159265358, + } + return &res + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + xmlData := ` + + + 1533042556 + + + + + +` + xmlResp, err := http.Post(ts.URL, "text/xml", strings.NewReader(xmlData)) + if err != nil { + t.Error(err) + } + defer xmlResp.Body.Close() + res := new(GetExpressQuotaReturn) + if err := xml.NewDecoder(xmlResp.Body).Decode(res); err != nil { + t.Error(err) + } + + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event != "get_quota" { + t.Error("Invalid event") + } + if res.Quota == 0 { + t.Error("Response column 'Quota' can not be zero") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } + + jsonData := `{ + "ToUserName": "gh_abcdefg", + "FromUserName": "oABCD", + "CreateTime": 1533042556, + "MsgType": "event", + "Event": "get_quota", + "BizID": "xyz", + "BizPwd": "xyz123", + "ShopAppID": "wxABCD" + }` + + jsonResp, err := http.Post(ts.URL, "application/json", strings.NewReader(jsonData)) + if err != nil { + t.Error(err) + } + defer jsonResp.Body.Close() + res = new(GetExpressQuotaReturn) + if err := json.NewDecoder(jsonResp.Body).Decode(res); err != nil { + t.Error(err) + } + if res.ToUserName == "" { + t.Error("Response column 'ToUserName' can not be empty") + } + if res.FromUserName == "" { + t.Error("Response column 'FromUserName' can not be empty") + } + if res.CreateTime == 0 { + t.Error("Response column 'CreateTime' can not be zero") + } + if res.MsgType == "" { + t.Error("Response column 'MsgType' can not be empty") + } + if res.Event != "get_quota" { + t.Error("Invalid event") + } + if res.Quota == 0 { + t.Error("Response column 'Quota' can not be zero") + } + if res.BizID == "" { + t.Error("Response column 'BizID' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response column 'ResultMsg' can not be empty") + } +} + +func TestPreviewTemplate(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/delivery/template/preview" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + WaybillTemplate string `json:"waybill_template"` + WaybillData string `json:"waybill_data"` + Custom struct { + OrderID string `json:"order_id"` + OpenID string `json:"openid"` + DeliveryID string `json:"delivery_id"` + BizID string `json:"biz_id"` + CustomRemark string `json:"custom_remark"` + Sender struct { + Name string `json:"name"` + Tel string `json:"tel"` + Mobile string `json:"mobile"` + Company string `json:"company"` + PostCode string `json:"post_code"` + Country string `json:"country"` + Province string `json:"province"` + City string `json:"city"` + Area string `json:"area"` + Address string `json:"address"` + } `json:"sender"` + Receiver struct { + Name string `json:"name"` + Tel string `json:"tel"` + Mobile string `json:"mobile"` + Company string `json:"company"` + PostCode string `json:"post_code"` + Country string `json:"country"` + Province string `json:"province"` + City string `json:"city"` + Area string `json:"area"` + Address string `json:"address"` + } `json:"receiver"` + Cargo struct { + Count uint `json:"count"` + Weight float64 `json:"weight"` + SpaceX float64 `json:"space_x"` + SpaceY float64 `json:"space_y"` + SpaceZ float64 `json:"space_z"` + DetailList []struct { + Name string `json:"name"` + Count uint `json:"count"` + } `json:"detail_list"` + } `json:"cargo"` + Shop struct { + WXAPath string `json:"wxa_path"` + IMGUrl string `json:"img_url"` + GoodsName string `json:"goods_name"` + GoodsCount uint `json:"goods_count"` + } `json:"shop"` + Insured struct { + Used InsureStatus `json:"use_insured"` + Value uint `json:"insured_value"` + } `json:"insured"` + Service struct { + Type uint8 `json:"service_type"` + Name string `json:"service_name"` + } `json:"service"` + } `json:"custom"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.WaybillTemplate == "" { + t.Error("Response column waybill_template can not be empty") + } + if params.WaybillData == "" { + t.Error("Response column waybill_data can not be empty") + } + if params.Custom.OrderID == "" { + t.Error("param custom.order_id can not be empty") + } + if params.Custom.DeliveryID == "" { + t.Error("param custom.delivery_id can not be empty") + } + + if params.Custom.BizID == "" { + t.Error("param custom.biz_id can not be empty") + } + + if params.Custom.Sender.Name == "" { + t.Error("param custom.sender.name can not be empty") + } + if params.Custom.Sender.Province == "" { + t.Error("param custom.sender.province can not be empty") + } + if params.Custom.Sender.City == "" { + t.Error("param custom.sender.city can not be empty") + } + if params.Custom.Sender.Area == "" { + t.Error("param custom.sender.area can not be empty") + } + if params.Custom.Sender.Address == "" { + t.Error("param custom.sender.address can not be empty") + } + if params.Custom.Receiver.Name == "" { + t.Error("param custom.receiver.name can not be empty") + } + if params.Custom.Receiver.Province == "" { + t.Error("param custom.receiver.province can not be empty") + } + if params.Custom.Receiver.City == "" { + t.Error("param custom.receiver.city can not be empty") + } + if params.Custom.Receiver.Area == "" { + t.Error("param custom.receiver.area can not be empty") + } + if params.Custom.Receiver.Address == "" { + t.Error("param custom.receiver.address can not be empty") + } + + if params.Custom.Cargo.Count == 0 { + t.Error("param custom.cargo.count can not be zero") + } + if params.Custom.Cargo.Weight == 0 { + t.Error("param custom.cargo.weight can not be zero") + } + if params.Custom.Cargo.SpaceX == 0 { + t.Error("param custom.cargo.spaceX can not be zero") + } + if params.Custom.Cargo.SpaceY == 0 { + t.Error("param custom.cargo.spaceY can not be zero") + } + if params.Custom.Cargo.SpaceZ == 0 { + t.Error("param custom.cargo.spaceZ can not be zero") + } + if len(params.Custom.Cargo.DetailList) == 0 { + t.Error("param cargo.custom.detailList can not be empty") + } else { + if (params.Custom.Cargo.DetailList[0].Name) == "" { + t.Error("param custom.cargo.detailList.name can not be empty") + } + if (params.Custom.Cargo.DetailList[0].Count) == 0 { + t.Error("param custom.cargo.detailList.count can not be zero") + } + } + if params.Custom.Shop.WXAPath == "" { + t.Error("param custom.shop.wxa_path can not be empty") + } + if params.Custom.Shop.IMGUrl == "" { + t.Error("param custom.shop.img_url can not be empty") + } + if params.Custom.Shop.GoodsName == "" { + t.Error("param custom.shop.goods_name can not be empty") + } + if params.Custom.Shop.GoodsCount == 0 { + t.Error("param custom.shop.goods_count can not be zero") + } + if params.Custom.Insured.Used == 0 { + t.Error("param custom.insured.use_insured can not be zero") + } + if params.Custom.Service.Name == "" { + t.Error("param custom.service.service_name can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "waybill_id": "1234567890123", + "rendered_waybill_template": "PGh0bWw+dGVzdDwvaHRtbD4=" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "waybill_id": "1234567890123", + "waybill_data": "##ZTO_mark##11-22-33##ZTO_bagAddr##广州##", + "waybill_template": "PGh0bWw+dGVzdDwvaHRtbD4=", + "custom": { + "order_id": "012345678901234567890123456789", + "openid": "oABC123456", + "delivery_id": "ZTO", + "biz_id": "xyz", + "custom_remark": "易碎物品", + "sender": { + "name": "张三", + "tel": "18666666666", + "mobile": "020-88888888", + "company": "公司名", + "post_code": "123456", + "country": "中国", + "province": "广东省", + "city": "广州市", + "area": "海珠区", + "address": "XX路XX号XX大厦XX栋XX" + }, + "receiver": { + "name": "王小蒙", + "tel": "18610000000", + "mobile": "020-77777777", + "company": "公司名", + "post_code": "654321", + "country": "中国", + "province": "广东省", + "city": "广州市", + "area": "天河区", + "address": "XX路XX号XX大厦XX栋XX" + }, + "shop": { + "wxa_path": "/index/index?from=waybill", + "img_url": "https://mmbiz.qpic.cn/mmbiz_png/KfrZwACMrmwbPGicysN6kibW0ibXwzmA3mtTwgSsdw4Uicabduu2pfbfwdKicQ8n0v91kRAUX6SDESQypl5tlRwHUPA/640", + "goods_name": "一千零一夜钻石包&爱马仕柏金钻石包", + "goods_count": 2 + }, + "cargo": { + "count": 2, + "weight": 5.5, + "space_x": 30.5, + "space_y": 20, + "space_z": 20, + "detail_list": [ + { + "name": "一千零一夜钻石包", + "count": 1 + }, + { + "name": "爱马仕柏金钻石包", + "count": 1 + } + ] + }, + "insured": { + "use_insured": 1, + "insured_value": 10000 + }, + "service": { + "service_type": 0, + "service_name": "标准快递" + } + } + }` + + previewer := new(ExpressTemplatePreviewer) + err := json.Unmarshal([]byte(raw), previewer) + if err != nil { + t.Fatal(err) + } + + _, err = previewer.preview(ts.URL+apiPreviewTemplate, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestUpdateBusiness(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/delivery/service/business/update" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + ShopAppID string `json:"shop_app_id"` // 商户的小程序AppID,即审核商户事件中的 ShopAppID + BizID string `json:"biz_id"` // 商户账户 + ResultCode int `json:"result_code"` // 审核结果,0 表示审核通过,其他表示审核失败 + ResultMsg string `json:"result_msg"` // 审核错误原因,仅 result_code 不等于 0 时需要设置 + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.ShopAppID == "" { + t.Error("Response column shop_app_id can not be empty") + } + if params.BizID == "" { + t.Error("Response column biz_id can not be empty") + } + if params.ResultCode == 0 { + t.Error("Response column result_code can not be zero") + } + if params.ResultMsg == "" { + t.Error("Response column result_msg can not be empty") + } + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "shop_app_id": "wxABCD", + "biz_id": "xyz", + "result_code": 1, + "result_msg": "审核通过" + }` + + updater := new(BusinessUpdater) + err := json.Unmarshal([]byte(raw), updater) + if err != nil { + t.Fatal(err) + } + + _, err = updater.update(ts.URL+apiUpdateBusiness, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestUpdatePath(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/delivery/path/update" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Token string `json:"token"` // 商户侧下单事件中推送的 Token 字段 + WaybillID string `json:"waybill_id"` // 运单 ID + ActionTime uint `json:"action_time"` // 轨迹变化 Unix 时间戳 + ActionType int `json:"action_type"` // 轨迹变化类型 + ActionMsg string `json:"action_msg"` // 轨迹变化具体信息说明,展示在快递轨迹详情页中。若有手机号码,则直接写11位手机号码。使用UTF-8编码。 + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.Token == "" { + t.Error("Response column token can not be empty") + } + if params.WaybillID == "" { + t.Error("Response column waybill_id can not be empty") + } + if params.ActionMsg == "" { + t.Error("Response column action_msg can not be empty") + } + if params.ActionTime == 0 { + t.Error("Response column action_time can not be zero") + } + if params.ActionType == 0 { + t.Error("Response column action_type can not be zero") + } + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "token": "TOKEN", + "waybill_id": "12345678901234567890", + "action_time": 1533052800, + "action_type": 300002, + "action_msg": "丽影邓丽君【18666666666】正在派件" + }` + + updater := new(ExpressPathUpdater) + err := json.Unmarshal([]byte(raw), updater) + if err != nil { + t.Fatal(err) + } + + _, err = updater.update(ts.URL+apiUpdatePath, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/face_identify.go b/app/lib/weapp/face_identify.go new file mode 100644 index 0000000..3f3aaef --- /dev/null +++ b/app/lib/weapp/face_identify.go @@ -0,0 +1,46 @@ +package weapp + +const ( + apiFaceIdentify = "/cityservice/face/identify/getinfo" +) + +// FaceIdentifyResponse 人脸识别结果返回 +type FaceIdentifyResponse struct { + CommonError + Result int `json:"identify_ret"` // 认证结果 + Time uint32 `json:"identify_time"` // 认证时间 + Data string `json:"validate_data"` // 用户读的数字(如是读数字) + OpenID string `json:"openid"` // 用户openid + UserIDKey string `json:"user_id_key"` // 用于后台交户表示用户姓名、身份证的凭证 + FinishTime uint32 `json:"finish_time"` // 认证结束时间 + IDCardNumberMD5 string `json:"id_card_number_md5"` // 身份证号的md5(最后一位X为大写) + NameUTF8MD5 string `json:"name_utf8_md5"` // 姓名MD5 +} + +// FaceIdentify 获取人脸识别结果 +// +// token 微信 access_token +// key 小程序 verify_result +func FaceIdentify(token, key string) (*FaceIdentifyResponse, error) { + api := baseURL + apiFaceIdentify + return faceIdentify(api, token, key) +} + +func faceIdentify(api, token, key string) (*FaceIdentifyResponse, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "verify_result": key, + } + + res := new(FaceIdentifyResponse) + err = postJSON(api, params, res) + if err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/img.go b/app/lib/weapp/img.go new file mode 100644 index 0000000..191b470 --- /dev/null +++ b/app/lib/weapp/img.go @@ -0,0 +1,188 @@ +package weapp + +const ( + apiAICrop = "/cv/img/aicrop" + apiScanQRCode = "/cv/img/qrcode" + apiSuperResolution = "/cv/img/superResolution" +) + +// AICropResponse 图片智能裁剪后的返回数据 +type AICropResponse struct { + CommonError + Results []struct { + CropLeft uint `json:"crop_left"` + CropTop uint `json:"crop_top"` + CropRight uint `json:"crop_right"` + CropBottom uint `json:"crop_bottom"` + } `json:"results"` + IMGSize struct { + Width uint `json:"w"` + Height uint `json:"h"` + } `json:"img_size"` +} + +// AICrop 本接口提供基于小程序的图片智能裁剪能力。 +func AICrop(token, filename string) (*AICropResponse, error) { + api := baseURL + apiAICrop + return aiCrop(api, token, filename) +} + +func aiCrop(api, token, filename string) (*AICropResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(AICropResponse) + if err := postFormByFile(url, "img", filename, res); err != nil { + return nil, err + } + + return res, nil +} + +// AICropByURL 本接口提供基于小程序的图片智能裁剪能力。 +func AICropByURL(token, url string) (*AICropResponse, error) { + api := baseURL + apiAICrop + return aiCropByURL(api, token, url) +} + +func aiCropByURL(api, token, imgURL string) (*AICropResponse, error) { + queries := requestQueries{ + "access_token": token, + "img_url": imgURL, + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(AICropResponse) + if err := postJSON(url, nil, res); err != nil { + return nil, err + } + + return res, nil +} + +// QRCodePoint 二维码角的位置 +type QRCodePoint struct { + X uint `json:"x"` + Y uint `json:"y"` +} + +// ScanQRCodeResponse 小程序的条码/二维码识别后的返回数据 +type ScanQRCodeResponse struct { + CommonError + CodeResults []struct { + TypeName string `json:"type_name"` + Data string `json:"data"` + Position struct { + LeftTop QRCodePoint `json:"left_top"` + RightTop QRCodePoint `json:"right_top"` + RightBottom QRCodePoint `json:"right_bottom"` + LeftBottom QRCodePoint `json:"left_bottom"` + } `json:"pos"` + } `json:"code_results"` + IMGSize struct { + Width uint `json:"w"` + Height uint `json:"h"` + } `json:"img_size"` +} + +// ScanQRCode 本接口提供基于小程序的条码/二维码识别的API。 +func ScanQRCode(token, filename string) (*ScanQRCodeResponse, error) { + api := baseURL + apiScanQRCode + return scanQRCode(api, token, filename) +} + +func scanQRCode(api, token, filename string) (*ScanQRCodeResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(ScanQRCodeResponse) + if err := postFormByFile(url, "img", filename, res); err != nil { + return nil, err + } + + return res, nil +} + +// ScanQRCodeByURL 把网络文件上传到微信服务器。目前仅支持图片。用于发送客服消息或被动回复用户消息。 +func ScanQRCodeByURL(token, imgURL string) (*ScanQRCodeResponse, error) { + api := baseURL + apiScanQRCode + return scanQRCodeByURL(api, token, imgURL) +} + +func scanQRCodeByURL(api, token, imgURL string) (*ScanQRCodeResponse, error) { + queries := requestQueries{ + "access_token": token, + "img_url": imgURL, + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(ScanQRCodeResponse) + if err := postJSON(url, nil, res); err != nil { + return nil, err + } + + return res, nil +} + +// SuperResolutionResponse 图片高清化后的返回数据 +type SuperResolutionResponse struct { + CommonError + MediaID string `json:"media_id"` +} + +// SuperResolution 本接口提供基于小程序的图片高清化能力。 +func SuperResolution(token, filename string) (*SuperResolutionResponse, error) { + api := baseURL + apiSuperResolution + return superResolution(api, token, filename) +} + +func superResolution(api, token, filename string) (*SuperResolutionResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(SuperResolutionResponse) + if err := postFormByFile(url, "img", filename, res); err != nil { + return nil, err + } + + return res, nil +} + +// SuperResolutionByURL 把网络文件上传到微信服务器。目前仅支持图片。用于发送客服消息或被动回复用户消息。 +func SuperResolutionByURL(token, imgURL string) (*SuperResolutionResponse, error) { + api := baseURL + apiSuperResolution + return superResolutionByURL(api, token, imgURL) +} + +func superResolutionByURL(api, token, imgURL string) (*SuperResolutionResponse, error) { + queries := requestQueries{ + "access_token": token, + "img_url": imgURL, + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(SuperResolutionResponse) + if err := postJSON(url, nil, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/img_test.go b/app/lib/weapp/img_test.go new file mode 100644 index 0000000..8c393f8 --- /dev/null +++ b/app/lib/weapp/img_test.go @@ -0,0 +1,474 @@ +package weapp + +import ( + "fmt" + "io" + "net/http" + "net/http/httptest" + "os" + "path" + "testing" +) + +func TestAICrop(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + if r.URL.EscapedPath() != "/cv/img/aicrop" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "results": [ + { + "crop_left": 112, + "crop_top": 0, + "crop_right": 839, + "crop_bottom": 727 + }, + { + "crop_left": 0, + "crop_top": 205, + "crop_right": 965, + "crop_bottom": 615 + } + ], + "img_size": { + "w": 966, + "h": 728 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := aiCrop(ts.URL+apiAICrop, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestAICropByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc("/cv/img/aicrop", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + if r.URL.EscapedPath() != "/cv/img/aicrop" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "results": [ + { + "crop_left": 112, + "crop_top": 0, + "crop_right": 839, + "crop_bottom": 727 + }, + { + "crop_left": 0, + "crop_top": 205, + "crop_right": 965, + "crop_bottom": 615 + } + ], + "img_size": { + "w": 966, + "h": 728 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := aiCropByURL(ts.URL+apiAICrop, "mock-access-token", ts.URL+"/mediaurl") + if err != nil { + t.Fatal(err) + } +} +func TestScanQRCode(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiScanQRCode { + t.Fatalf("Except to path '%s',get '%s'", apiScanQRCode, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "code_results": [ + { + "type_name": "QR_CODE", + "data": "http://www.qq.com", + "pos": { + "left_top": { + "x": 585, + "y": 378 + }, + "right_top": { + "x": 828, + "y": 378 + }, + "right_bottom": { + "x": 828, + "y": 618 + }, + "left_bottom": { + "x": 585, + "y": 618 + } + } + }, + { + "type_name": "QR_CODE", + "data": "https://mp.weixin.qq.com", + "pos": { + "left_top": { + "x": 185, + "y": 142 + }, + "right_top": { + "x": 396, + "y": 142 + }, + "right_bottom": { + "x": 396, + "y": 353 + }, + "left_bottom": { + "x": 185, + "y": 353 + } + } + }, + { + "type_name": "EAN_13", + "data": "5906789678957" + }, + { + "type_name": "CODE_128", + "data": "50090500019191" + } + ], + "img_size": { + "w": 1000, + "h": 900 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := scanQRCode(ts.URL+apiScanQRCode, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestScanQRCodeByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc(apiScanQRCode, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiScanQRCode { + t.Fatalf("Except to path '%s',get '%s'", apiScanQRCode, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "code_results": [ + { + "type_name": "QR_CODE", + "data": "http://www.qq.com", + "pos": { + "left_top": { + "x": 585, + "y": 378 + }, + "right_top": { + "x": 828, + "y": 378 + }, + "right_bottom": { + "x": 828, + "y": 618 + }, + "left_bottom": { + "x": 585, + "y": 618 + } + } + }, + { + "type_name": "QR_CODE", + "data": "https://mp.weixin.qq.com", + "pos": { + "left_top": { + "x": 185, + "y": 142 + }, + "right_top": { + "x": 396, + "y": 142 + }, + "right_bottom": { + "x": 396, + "y": 353 + }, + "left_bottom": { + "x": 185, + "y": 353 + } + } + }, + { + "type_name": "EAN_13", + "data": "5906789678957" + }, + { + "type_name": "CODE_128", + "data": "50090500019191" + } + ], + "img_size": { + "w": 1000, + "h": 900 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := scanQRCodeByURL(ts.URL+apiScanQRCode, "mock-access-token", ts.URL+"/mediaurl") + if err != nil { + t.Fatal(err) + } +} + +func TestSuperResolution(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSuperResolution { + t.Fatalf("Except to path '%s',get '%s'", apiSuperResolution, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "media_id": "6WXsIXkG7lXuDLspD9xfm5dsvHzb0EFl0li6ySxi92ap8Vl3zZoD9DpOyNudeJGB" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := superResolution(ts.URL+apiSuperResolution, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestSuperResolutionByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc(apiSuperResolution, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSuperResolution { + t.Fatalf("Except to path '%s',get '%s'", apiSuperResolution, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("%v can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "media_id": "6WXsIXkG7lXuDLspD9xfm5dsvHzb0EFl0li6ySxi92ap8Vl3zZoD9DpOyNudeJGB" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := superResolutionByURL(ts.URL+apiSuperResolution, "mock-access-token", ts.URL+"/mediaurl") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/immediate_delivery.go b/app/lib/weapp/immediate_delivery.go new file mode 100644 index 0000000..4319d49 --- /dev/null +++ b/app/lib/weapp/immediate_delivery.go @@ -0,0 +1,479 @@ +package weapp + +const ( + apiAbnormalConfirm = "/cgi-bin/express/local/business/order/confirm_return" + apiAddDeliveryOrder = "/cgi-bin/express/local/business/order/add" + apiAddDeliveryTip = "/cgi-bin/express/local/business/order/addtips" + apiCancelDeliveryOrder = "/cgi-bin/express/local/business/order/cancel" + apiGetAllImmediateDelivery = "/cgi-bin/express/local/business/delivery/getall" + apiGetDeliveryBindAccount = "/cgi-bin/express/local/business/shop/get" + apiGetDeliveryOrder = "/cgi-bin/express/local/business/order/get" + apiPreAddDeliveryOrder = "/cgi-bin/express/local/business/order/pre_add" + apiPreCancelDeliveryOrder = "/cgi-bin/express/local/business/order/precancel" + apiReAddDeliveryOrder = "/cgi-bin/express/local/business/order/readd" + apiMockUpdateDeliveryOrder = "/cgi-bin/express/local/business/test_update_order" + apiUpdateDeliveryOrder = "/cgi-bin/express/local/delivery/update_order" +) + +// AbnormalConfirmer 异常件退回商家商家确认器 +type AbnormalConfirmer struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + WaybillID string `json:"waybill_id"` // 配送单id + Remark string `json:"remark"` // 备注 +} + +// Confirm 异常件退回商家商家确认收货 +func (confirmer *AbnormalConfirmer) Confirm(token string) (*CommonResult, error) { + api := baseURL + apiAbnormalConfirm + return confirmer.confirm(api, token) +} + +func (confirmer *AbnormalConfirmer) confirm(api, token string) (*CommonResult, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonResult) + if err := postJSON(url, confirmer, res); err != nil { + return nil, err + } + + return res, nil +} + +// DeliveryOrderCreator 下配送单参数 +type DeliveryOrderCreator struct { + DeliveryToken string `json:"delivery_token,omitempty"` // 预下单接口返回的参数,配送公司可保证在一段时间内运费不变 + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 配送公司ID + OpenID string `json:"openid"` // 下单用户的openid + Sender DeliveryUser `json:"sender"` // 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段 + Receiver DeliveryUser `json:"receiver"` // 收件人信息 + Cargo DeliveryCargo `json:"cargo"` // 货物信息 + OrderInfo DeliveryOrderInfo `json:"order_info"` // 订单信息 + Shop DeliveryShop `json:"shop"` // 商品信息,会展示到物流通知消息中 + SubBizID string `json:"sub_biz_id"` // 子商户id,区分小程序内部多个子商户 +} + +// DeliveryUser 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段 +type DeliveryUser struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 +} + +// DeliveryCargo 货物信息 +type DeliveryCargo struct { + GoodsValue float64 `json:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail DeliveryGoodsDetail `json:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class"` // 品类二级类目 +} + +// DeliveryGoodsDetail 货物详情 +type DeliveryGoodsDetail struct { + Goods []DeliveryGoods `json:"goods"` // 货物交付信息,最长不超过100个字符 +} + +// DeliveryGoods 货物 +type DeliveryGoods struct { + Count uint `json:"good_count"` // 货物数量 + Name string `json:"good_name"` // 货品名称 + Price float32 `json:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit"` // 货品单位,最长不超过20个字符 +} + +// DeliveryOrderInfo 订单信息 +type DeliveryOrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time"` // 期望派单时间(顺丰同城急送、达达、支持),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time"` // 期望送达时间(顺丰同城急送、美团配送支持),unix-timestamp + ExpectedPickTime uint `json:"expected_pick_time"` // 期望取件时间(闪送支持),unix-timestamp + PoiSeq string `json:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery uint `json:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery uint `json:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup uint `json:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) +} + +// DeliveryShop 商品信息,会展示到物流通知消息中 +type DeliveryShop struct { + WxaPath string `json:"wxa_path"` // 商家小程序的路径,建议为订单页面 + ImgURL string `json:"img_url"` // 商品缩略图 url + GoodsName string `json:"goods_name"` // 商品名称 + GoodsCount uint `json:"goods_count"` // 商品数量 +} + +// PreDeliveryOrderResponse 返回数据 +type PreDeliveryOrderResponse struct { + Fee float64 `json:"fee"` // 实际运费(单位:元),运费减去优惠券费用 + Deliverfee float64 `json:"deliverfee"` // 运费(单位:元) + Couponfee float64 `json:"couponfee"` // 优惠券费用(单位:元) + Tips float64 `json:"tips"` // 小费(单位:元) + Insurancefee float64 `json:"insurancefee"` // 保价费(单位:元) + Distance float64 `json:"distance"` // 配送距离(单位:米) + DispatchDuration uint `json:"dispatch_duration"` // 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0 + DeliveryToken string `json:"delivery_token"` // 配送公司可以返回此字段,当用户下单时候带上这个字段,保证在一段时间内运费不变 +} + +// Prepare 预下配送单接口 +func (creator *DeliveryOrderCreator) Prepare(token string) (*PreDeliveryOrderResponse, error) { + api := baseURL + apiPreCancelDeliveryOrder + return creator.prepare(api, token) +} + +func (creator *DeliveryOrderCreator) prepare(api, token string) (*PreDeliveryOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(PreDeliveryOrderResponse) + if err := postJSON(url, creator, res); err != nil { + return nil, err + } + + return res, nil +} + +// CreateDeliveryOrderResponse 返回数据 +type CreateDeliveryOrderResponse struct { + CommonResult + Fee uint `json:"fee"` //实际运费(单位:元),运费减去优惠券费用 + Deliverfee uint `json:"deliverfee"` //运费(单位:元) + Couponfee uint `json:"couponfee"` //优惠券费用(单位:元) + Tips uint `json:"tips"` //小费(单位:元) + Insurancefee uint `json:"insurancefee"` //保价费(单位:元) + Distance float64 `json:"distance"` // 配送距离(单位:米) + WaybillID string `json:"waybill_id"` //配送单号 + OrderStatus int `json:"order_status"` //配送状态 + FinishCode uint `json:"finish_code"` // 收货码 + PickupCode uint `json:"pickup_code"` //取货码 + DispatchDuration uint `json:"dispatch_duration"` // 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0 +} + +// Create 下配送单 +func (creator *DeliveryOrderCreator) Create(token string) (*CreateDeliveryOrderResponse, error) { + api := baseURL + apiAddDeliveryOrder + return creator.create(api, token) +} + +func (creator *DeliveryOrderCreator) create(api, token string) (*CreateDeliveryOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CreateDeliveryOrderResponse) + if err := postJSON(url, creator, res); err != nil { + return nil, err + } + + return res, nil +} + +// Recreate 重新下单 +func (creator *DeliveryOrderCreator) Recreate(token string) (*CreateDeliveryOrderResponse, error) { + api := baseURL + apiReAddDeliveryOrder + return creator.recreate(api, token) +} + +func (creator *DeliveryOrderCreator) recreate(api, token string) (*CreateDeliveryOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CreateDeliveryOrderResponse) + if err := postJSON(url, creator, res); err != nil { + return nil, err + } + + return res, nil +} + +// DeliveryTipAdder 增加小费参数 +type DeliveryTipAdder struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + WaybillID string `json:"waybill_id"` // 配送单id + OpenID string `json:"openid"` // 下单用户的openid + Tips float64 `json:"tips"` // 小费金额(单位:元) 各家配送公司最大值不同 + Remark string `json:"Remark"` // 备注 +} + +// Add 对待接单状态的订单增加小费。需要注意:订单的小费,以最新一次加小费动作的金额为准,故下一次增加小费额必须大于上一次小费额 +func (adder *DeliveryTipAdder) Add(token string) (*CommonResult, error) { + api := baseURL + apiAddDeliveryTip + return adder.add(api, token) +} + +func (adder *DeliveryTipAdder) add(api, token string) (*CommonResult, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonResult) + if err := postJSON(url, adder, res); err != nil { + return nil, err + } + + return res, nil +} + +// DeliveryOrderCanceler 取消配送单参数 +type DeliveryOrderCanceler struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 快递公司ID + WaybillID string `json:"waybill_id"` // 配送单id + ReasonID uint8 `json:"cancel_reason_id"` // 取消原因Id + Reason string `json:"cancel_reason"` // 取消原因 +} + +// CancelDeliveryOrderResponse 取消配送单返回数据 +type CancelDeliveryOrderResponse struct { + CommonResult + DeductFee float64 `json:"deduct_fee"` // 预计扣除的违约金(单位:元),精确到分 + Desc string `json:"desc"` //说明 +} + +// Prepare 预取消配送单 +func (canceler *DeliveryOrderCanceler) Prepare(token string) (*CancelDeliveryOrderResponse, error) { + api := baseURL + apiCancelDeliveryOrder + return canceler.prepare(api, token) +} + +func (canceler *DeliveryOrderCanceler) prepare(api, token string) (*CancelDeliveryOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CancelDeliveryOrderResponse) + if err := postJSON(url, canceler, res); err != nil { + return nil, err + } + + return res, nil +} + +// Cancel 取消配送单 +func (canceler *DeliveryOrderCanceler) Cancel(token string) (*CancelDeliveryOrderResponse, error) { + api := baseURL + apiCancelDeliveryOrder + return canceler.cancel(api, token) +} + +func (canceler *DeliveryOrderCanceler) cancel(api, token string) (*CancelDeliveryOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CancelDeliveryOrderResponse) + if err := postJSON(url, canceler, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetAllImmediateDeliveryResponse 获取已支持的配送公司列表接口返回数据 +type GetAllImmediateDeliveryResponse struct { + CommonResult + List []struct { + ID string `json:"delivery_id"` //配送公司Id + Name string `json:"delivery_name"` // 配送公司名称 + } `json:"list"` // 配送公司列表 +} + +// GetAllImmediateDelivery 获取已支持的配送公司列表接口 +func GetAllImmediateDelivery(token string) (*GetAllImmediateDeliveryResponse, error) { + api := baseURL + apiGetAllImmediateDelivery + return getAllImmediateDelivery(api, token) +} + +func getAllImmediateDelivery(api, token string) (*GetAllImmediateDeliveryResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetAllImmediateDeliveryResponse) + if err := postJSON(url, nil, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetBindAccountResponse 返回数据 +type GetBindAccountResponse struct { + CommonResult + ShopList []struct { + DeliveryID string `json:"delivery_id"` // 配送公司Id + ShopID string `json:"shopid"` // 商家id + AuditResult uint8 `json:"audit_result"` // 审核状态 + } `json:"shop_list"` // 配送公司列表 +} + +// GetBindAccount 拉取已绑定账号 +func GetBindAccount(token string) (*GetBindAccountResponse, error) { + api := baseURL + apiGetDeliveryBindAccount + return getBindAccount(api, token) +} + +func getBindAccount(api, token string) (*GetBindAccountResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetBindAccountResponse) + if err := postJSON(url, nil, res); err != nil { + return nil, err + } + + return res, nil +} + +// DeliveryOrderGetter 请求参数 +type DeliveryOrderGetter struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串说明 +} + +// GetDeliveryOrderResponse 返回数据 +type GetDeliveryOrderResponse struct { + CommonResult + OrderStatus int `json:"order_status"` // 配送状态,枚举值 + WaybillID string `json:"waybill_id"` // 配送单号 + RiderName string `json:"rider_name"` // 骑手姓名 + RiderPhone string `json:"rider_phone"` // 骑手电话 + RiderLng float64 `json:"rider_lng"` // 骑手位置经度, 配送中时返回 + RiderLat float64 `json:"rider_lat"` // 骑手位置纬度, 配送中时返回 +} + +// Get 下配送单 +func (getter *DeliveryOrderGetter) Get(token string) (*GetDeliveryOrderResponse, error) { + api := baseURL + apiGetDeliveryOrder + return getter.get(api, token) +} + +func (getter *DeliveryOrderGetter) get(api, token string) (*GetDeliveryOrderResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetDeliveryOrderResponse) + if err := postJSON(url, getter, res); err != nil { + return nil, err + } + + return res, nil +} + +// UpdateDeliveryOrderMocker 请求参数 +type UpdateDeliveryOrderMocker struct { + ShopID string `json:"shopid"` // 商家id, 必须是 "test_shop_id" + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ActionTime uint `json:"action_time"` // 状态变更时间点,Unix秒级时间戳 + OrderStatus int `json:"order_status"` // 配送状态,枚举值 + ActionMsg string `json:"action_msg"` // 附加信息 +} + +// Mock 模拟配送公司更新配送单状态 +func (mocker *UpdateDeliveryOrderMocker) Mock(token string) (*CommonResult, error) { + api := baseURL + apiMockUpdateDeliveryOrder + return mocker.mock(api, token) +} + +func (mocker *UpdateDeliveryOrderMocker) mock(api, token string) (*CommonResult, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonResult) + if err := postJSON(url, mocker, res); err != nil { + return nil, err + } + + return res, nil +} + +// DeliveryOrderUpdater 请求参数 +type DeliveryOrderUpdater struct { + WXToken string `json:"wx_token"` // 下单事件中推送的wx_token字段 + ShopID string `json:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no,omitempty"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id"` // 配送单id + ActionTime uint `json:"action_time"` // 状态变更时间点,Unix秒级时间戳 + OrderStatus int `json:"order_status"` // 订单状态,枚举值,下附枚举值列表及说明 + ActionMsg string `json:"action_msg,omitempty"` // 附加信息 + WxaPath string `json:"wxa_path"` // 配送公司小程序跳转路径,用于用户收到消息会间接跳转到这个页面 + Agent DeliveryAgent `json:"agent,omitempty"` // 骑手信息, 骑手接单时需返回 + ExpectedDeliveryTime uint `json:"expected_delivery_time,omitempty"` // 预计送达时间戳, 骑手接单时需返回 +} + +// DeliveryAgent 骑手信息 +type DeliveryAgent struct { + Name string `json:"name"` // 骑手姓名 + Phone string `json:"phone"` // 骑手电话 + Encrypted uint8 `json:"is_phone_encrypted,omitempty"` // 电话是否加密 +} + +// Update 模拟配送公司更新配送单状态 +func (updater *DeliveryOrderUpdater) Update(token string) (*CommonResult, error) { + api := baseURL + apiUpdateDeliveryOrder + return updater.update(api, token) +} + +func (updater *DeliveryOrderUpdater) update(api, token string) (*CommonResult, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonResult) + if err := postJSON(url, updater, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/immediate_delivery_test.go b/app/lib/weapp/immediate_delivery_test.go new file mode 100644 index 0000000..cf34975 --- /dev/null +++ b/app/lib/weapp/immediate_delivery_test.go @@ -0,0 +1,2041 @@ +package weapp + +import ( + "encoding/base64" + "encoding/json" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestAbnormalConfirm(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/confirm_return" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + WaybillID string `json:"waybill_id"` // 配送单id + Remark string `json:"remark"` // 备注 + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.ShopID == "" { + t.Error("Response column shopid can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column shop_order_id can not be empty") + } + if params.ShopNo == "" { + t.Error("Response column shop_no can not be empty") + } + + if params.DeliverySign == "" { + t.Error("Response column delivery_sign can not be empty") + } + + if params.WaybillID == "" { + t.Error("Response column waybill_id can not be empty") + } + if params.Remark == "" { + t.Error("Response column remark can not be empty") + } + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 1, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "shopid": "123456", + "shop_order_id": "123456", + "shop_no": "shop_no_111", + "waybill_id": "123456", + "remark": "remark", + "delivery_sign": "123456" + }` + + confirmer := new(AbnormalConfirmer) + err := json.Unmarshal([]byte(raw), confirmer) + if err != nil { + t.Fatal(err) + } + + _, err = confirmer.confirm(ts.URL+apiAbnormalConfirm, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestAddDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/add" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + DeliveryToken string `json:"delivery_token"` // 预下单接口返回的参数,配送公司可保证在一段时间内运费不变 + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 配送公司ID + OpenID string `json:"openid"` // 下单用户的openid + SubBizID string `json:"sub_biz_id"` // 子商户id,区分小程序内部多个子商户 + Sender struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"sender"` // 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段 + Receiver struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"receiver"` // 收件人信息 + Cargo struct { + GoodsValue float64 `json:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail struct { + Goods []struct { + Count uint `json:"good_count"` // 货物数量 + Name string `json:"good_name"` // 货品名称 + Price float32 `json:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit"` // 货品单位,最长不超过20个字符 + } `json:"goods"` // 货物交付信息,最长不超过100个字符 + } `json:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class"` // 品类二级类目 + } `json:"cargo"` // 货物信息 + OrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time"` // 期望派单时间(顺丰同城急送、达达、支持),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time"` // 期望送达时间(顺丰同城急送、美团配送支持),unix-timestamp + ExpectedPickTime uint `json:"expected_pick_time"` // 期望取件时间(闪送支持),unix-timestamp + PoiSeq string `json:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery uint `json:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery uint `json:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup uint `json:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) + } `json:"order_info"` // 订单信息 + Shop struct { + WxaPath string `json:"wxa_path"` // 商家小程序的路径,建议为订单页面 + ImgURL string `json:"img_url"` // 商品缩略图 url + GoodsName string `json:"goods_name"` // 商品名称 + GoodsCount uint `json:"goods_count"` // 商品数量 + } `json:"shop"` // 商品信息,会展示到物流通知消息中 + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.DeliveryToken == "" { + t.Error("Response column 'delivery_token' can not be empty") + } + if params.ShopID == "" { + t.Error("Response column 'shopid' can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column 'shop_order_id' can not be empty") + } + if params.ShopNo == "" { + t.Error("Response column 'shop_no' can not be empty") + } + if params.DeliverySign == "" { + t.Error("Response column 'delivery_sign' can not be empty") + } + if params.DeliveryID == "" { + t.Error("Response column 'delivery_id' can not be empty") + } + if params.OpenID == "" { + t.Error("Response column 'openid' can not be empty") + } + if params.SubBizID == "" { + t.Error("Response column 'sub_biz_id' can not be empty") + } + + if params.Sender.Name == "" { + t.Error("Param 'sender.name' can not be empty") + } + if params.Sender.City == "" { + t.Error("Param 'sender.city' can not be empty") + } + if params.Sender.Address == "" { + t.Error("Param 'sender.address' can not be empty") + } + if params.Sender.AddressDetail == "" { + t.Error("Param 'sender.address_detail' can not be empty") + } + if params.Sender.Phone == "" { + t.Error("Param 'sender.phone' can not be empty") + } + if params.Sender.Lng == 0 { + t.Error("Param 'sender.lng' can not be empty") + } + if params.Sender.Lat == 0 { + t.Error("Param 'sender.lat' can not be empty") + } + if params.Sender.CoordinateType == 0 { + t.Error("Param 'sender.coordinate_type' can not be empty") + } + + if params.Receiver.Name == "" { + t.Error("Param 'receiver.name' can not be empty") + } + if params.Receiver.City == "" { + t.Error("Param 'receiver.city' can not be empty") + } + if params.Receiver.Address == "" { + t.Error("Param 'receiver.address' can not be empty") + } + if params.Receiver.AddressDetail == "" { + t.Error("Param 'receiver.address_detail' can not be empty") + } + if params.Receiver.Phone == "" { + t.Error("Param 'receiver.phone' can not be empty") + } + if params.Receiver.Lng == 0 { + t.Error("Param 'receiver.lng' can not be empty") + } + if params.Receiver.Lat == 0 { + t.Error("Param 'receiver.lat' can not be empty") + } + if params.Receiver.CoordinateType == 0 { + t.Error("Param 'receiver.coordinate_type' can not be empty") + } + if params.Cargo.GoodsValue == 0 { + t.Error("Param 'cargo.goods_value' can not be empty") + } + if params.Cargo.GoodsHeight == 0 { + t.Error("Param 'cargo.goods_height' can not be empty") + } + if params.Cargo.GoodsLength == 0 { + t.Error("Param 'cargo.goods_length' can not be empty") + } + if params.Cargo.GoodsWidth == 0 { + t.Error("Param 'cargo.goods_width' can not be empty") + } + if params.Cargo.GoodsWeight == 0 { + t.Error("Param 'cargo.goods_weight' can not be empty") + } + if params.Cargo.CargoFirstClass == "" { + t.Error("Param 'cargo.cargo_first_class' can not be empty") + } + if params.Cargo.CargoSecondClass == "" { + t.Error("Param 'cargo.cargo_second_class' can not be empty") + } + if len(params.Cargo.GoodsDetail.Goods) > 0 { + if params.Cargo.GoodsDetail.Goods[0].Count == 0 { + t.Error("Param 'cargo.goods_detail.goods.good_count' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Name == "" { + t.Error("Param 'cargo.goods_detail.goods.good_name' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Price == 0 { + t.Error("Param 'cargo.goods_detail.goods.good_price' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Unit == "" { + t.Error("Param 'cargo.goods_detail.goods.good_unit' can not be empty") + } + } + if params.OrderInfo.DeliveryServiceCode == "" { + t.Error("Param 'order_info.delivery_service_code' can not be empty") + } + if params.Shop.WxaPath == "" { + t.Error("Param 'shop.wxa_path' can not be empty") + } + if params.Shop.ImgURL == "" { + t.Error("Param 'shop.img_url' can not be empty") + } + if params.Shop.GoodsName == "" { + t.Error("Param 'shop.goods_name' can not be empty") + } + if params.Shop.GoodsCount == 0 { + t.Error("Param 'shop.goods_count' can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "fee": 11, + "deliverfee": 11, + "couponfee": 1, + "tips": 1, + "insurancefee": 1000, + "insurancfee": 1, + "distance": 1001, + "waybill_id": "123456789", + "order_status": 101, + "finish_code": 1024, + "pickup_code": 2048, + "dispatch_duration": 300 + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "cargo": { + "cargo_first_class": "美食宵夜", + "cargo_second_class": "零食小吃", + "goods_detail": { + "goods": [ + { + "good_count": 1, + "good_name": "水果", + "good_price": 11, + "good_unit": "元" + }, + { + "good_count": 2, + "good_name": "蔬菜", + "good_price": 21, + "good_unit": "元" + } + ] + }, + "goods_height": 1, + "goods_length": 3, + "goods_value": 5, + "goods_weight": 1, + "goods_width": 2 + }, + "delivery_id": "SFTC", + "delivery_sign": "01234567890123456789", + "openid": "oABC123456", + "order_info": { + "delivery_service_code": "xxx", + "expected_delivery_time": 1, + "is_direct_delivery": 1, + "is_finish_code_needed": 1, + "is_insured": 1, + "is_pickup_code_needed": 1, + "note": "test_note", + "order_time": 1555220757, + "order_type": 1, + "poi_seq": "1111", + "tips": 0 + }, + "receiver": { + "address": "xxx地铁站", + "address_detail": "2号楼202", + "city": "北京市", + "coordinate_type": 1, + "lat": 40.1529600001, + "lng": 116.5060300001, + "name": "老王", + "phone": "18512345678" + }, + "sender": { + "address": "xx大厦", + "address_detail": "1号楼101", + "city": "北京市", + "coordinate_type": 1, + "lat": 40.4486120001, + "lng": 116.3830750001, + "name": "刘一", + "phone": "13712345678" + }, + "shop": { + "goods_count": 2, + "goods_name": "宝贝", + "img_url": "https://mmbiz.qpic.cn/mmbiz_png/xxxxxxxxx/0?wx_fmt=png", + "wxa_path": "/page/index/index" + }, + "shop_no": "12345678", + "sub_biz_id": "sub_biz_id_1", + "shop_order_id": "SFTC_001", + "shopid": "122222222", + "delivery_token": "xxxxxxxx" + }` + + creator := new(DeliveryOrderCreator) + err := json.Unmarshal([]byte(raw), creator) + if err != nil { + t.Fatal(err) + } + + res, err := creator.create(ts.URL+apiAddDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.Fee == 0 { + t.Error("Response 'fee' can not be empty") + } + if res.Deliverfee == 0 { + t.Error("Response 'deliverfee' can not be empty") + } + if res.Couponfee == 0 { + t.Error("Response 'couponfee' can not be empty") + } + if res.Tips == 0 { + t.Error("Response 'tips' can not be empty") + } + if res.Insurancefee == 0 { + t.Error("Response 'insurancefee' can not be empty") + } + if res.Distance == 0 { + t.Error("Response 'distance' can not be empty") + } + if res.WaybillID == "" { + t.Error("Response 'waybill_id' can not be empty") + } + if res.OrderStatus == 0 { + t.Error("Response 'order_status' can not be empty") + } + if res.FinishCode == 0 { + t.Error("Response 'finish_code' can not be empty") + } + if res.PickupCode == 0 { + t.Error("Response 'pickup_code' can not be empty") + } + if res.DispatchDuration == 0 { + t.Error("Response 'dispatch_duration' can not be empty") + } + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } +} + +func TestAddDeliveryTip(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/addtips" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` + ShopOrderID string `json:"shop_order_id"` + ShopNo string `json:"shop_no"` + DeliverySign string `json:"delivery_sign"` + WaybillID string `json:"waybill_id"` + OpenID string `json:"openid"` + Tips float64 `json:"tips"` + Remark string `json:"remark"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ShopID == "" { + t.Error("Param 'shopid' can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Param 'shop_order_id' can not be empty") + } + if params.ShopNo == "" { + t.Error("Param 'shop_no' can not be empty") + } + if params.DeliverySign == "" { + t.Error("Param 'delivery_sign' can not be empty") + } + if params.WaybillID == "" { + t.Error("Param 'waybill_id' can not be empty") + } + if params.OpenID == "" { + t.Error("Param 'openid' can not be empty") + } + if params.Tips == 0 { + t.Error("Param 'tips' can not be empty") + } + if params.Remark == "" { + t.Error("Param 'remark' can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "shopid": "123456", + "shop_order_id": "123456", + "waybill_id": "123456", + "tips": 5, + "openid": "mock-open-id", + "remark": "gogogo", + "delivery_sign": "123456", + "shop_no": "shop_no_111" + }` + + adder := new(DeliveryTipAdder) + err := json.Unmarshal([]byte(raw), adder) + if err != nil { + t.Fatal(err) + } + + res, err := adder.add(ts.URL+apiAddDeliveryTip, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } +} + +func TestCancelDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/cancel" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 快递公司ID + WaybillID string `json:"waybill_id"` // 配送单id + ReasonID uint8 `json:"cancel_reason_id"` // 取消原因Id + Reason string `json:"cancel_reason"` // 取消原因 + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ShopID == "" { + t.Error("Param 'shopid' can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Param 'shop_order_id' can not be empty") + } + if params.ShopNo == "" { + t.Error("Param 'shop_no' can not be empty") + } + if params.DeliverySign == "" { + t.Error("Param 'delivery_sign' can not be empty") + } + if params.WaybillID == "" { + t.Error("Param 'waybill_id' can not be empty") + } + if params.DeliveryID == "" { + t.Error("Param 'delivery_id' can not be empty") + } + if params.ReasonID == 0 { + t.Error("Param 'cancel_reason_id' can not be empty") + } + if params.Reason == "" { + t.Error("Param 'cancel_reason' can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "deduct_fee": 5, + "desc": "blabla" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "shopid": "123456", + "shop_order_id": "123456", + "waybill_id": "123456", + "delivery_id": "123456", + "cancel_reason_id": 1, + "cancel_reason": "mock-cancel-reson", + "delivery_sign": "123456", + "shop_no": "shop_no_111" + }` + + canceler := new(DeliveryOrderCanceler) + err := json.Unmarshal([]byte(raw), canceler) + if err != nil { + t.Fatal(err) + } + + res, err := canceler.cancel(ts.URL+apiCancelDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } + if res.DeductFee == 0 { + t.Error("Response 'deduct_fee' can not be empty") + } + if res.Desc == "" { + t.Error("Response 'desc' can not be empty") + } +} + +func TestGetAllImmediateDelivery(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/delivery/getall" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "list": [ + { + "delivery_id": "SFTC", + "delivery_name": "顺发同城" + }, + { + "delivery_id": "MTPS", + "delivery_name": "美团配送" + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + + res, err := getAllImmediateDelivery(ts.URL+apiGetAllImmediateDelivery, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } + if len(res.List) == 0 { + t.Error("Response 'list' can not be empty") + } else { + for _, item := range res.List { + if item.ID == "" { + t.Error("Response 'list.delivery_id' can not be empty") + } + if item.Name == "" { + t.Error("Response 'list.delivery_name' can not be empty") + } + } + } +} + +func TestGetBindAccount(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/shop/get" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "shop_list": [ + { + "delivery_id": "SFTC", + "shopid": "123456", + "audit_result": 1 + }, + { + "delivery_id": "MTPS", + "shopid": "123456", + "audit_result": 1 + } + ] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + + res, err := getBindAccount(ts.URL+apiGetDeliveryBindAccount, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } + if len(res.ShopList) == 0 { + t.Error("Response 'shop_list' can not be empty") + } else { + for _, item := range res.ShopList { + if item.DeliveryID == "" { + t.Error("Response 'shop_list.delivery_id' can not be empty") + } + if item.ShopID == "" { + t.Error("Response 'shop_list.shopid' can not be empty") + } + if item.AuditResult == 0 { + t.Error("Response 'audit_result.shopid' can not be empty") + } + } + } +} + +func TestGetDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/get" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` + ShopOrderID string `json:"shop_order_id"` + ShopNo string `json:"shop_no"` + DeliverySign string `json:"delivery_sign"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.ShopID == "" { + t.Error("Response column shopid can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column shop_order_id can not be empty") + } + if params.ShopNo == "" { + t.Error("Response column shop_no can not be empty") + } + if params.DeliverySign == "" { + t.Error("Response column delivery_sign can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "order_status": 1, + "waybill_id": "string", + "rider_name": "string", + "rider_phone": "string", + "rider_lng": 3.14, + "rider_lat": 3.14 + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + + raw := `{ + "shopid": "xxxxxx", + "shop_order_id": "xxxxxx", + "shop_no": "xxxxxx", + "delivery_sign": "xxxxxx" + }` + + getter := new(DeliveryOrderGetter) + err := json.Unmarshal([]byte(raw), getter) + if err != nil { + t.Fatal(err) + } + + res, err := getter.get(ts.URL+apiGetDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } + if res.WaybillID == "" { + t.Error("Response 'waybill_id' can not be empty") + } + if res.OrderStatus == 0 { + t.Error("Response 'order_status' can not be empty") + } + + if res.RiderName == "" { + t.Error("Response 'rider_name' can not be empty") + } + if res.RiderPhone == "" { + t.Error("Response 'rider_phone' can not be empty") + } + if res.RiderLng == 0 { + t.Error("Response 'rider_lng' can not be empty") + } + if res.RiderLat == 0 { + t.Error("Response 'rider_lat' can not be empty") + } +} + +func TestMockUpdateDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/test_update_order" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` + ShopOrderID string `json:"shop_order_id"` + ActionTime uint `json:"action_time"` + OrderStatus int `json:"order_status"` + ActionMsg string `json:"action_msg"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.ShopID == "" { + t.Error("Response column shopid can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column shop_order_id can not be empty") + } + if params.ActionTime == 0 { + t.Error("Response column action_time can not be empty") + } + if params.OrderStatus == 0 { + t.Error("Response column order_status can not be empty") + } + if params.ActionMsg == "" { + t.Error("Response column action_msg can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + + raw := `{ + "shopid": "test_shop_id", + "shop_order_id": "xxxxxxxxxxx", + "waybill_id": "xxxxxxxxxxxxx", + "action_time": 12345678, + "order_status": 101, + "action_msg": "xxxxxx" + }` + + mocker := new(UpdateDeliveryOrderMocker) + err := json.Unmarshal([]byte(raw), mocker) + if err != nil { + t.Fatal(err) + } + + res, err := mocker.mock(ts.URL+apiMockUpdateDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } +} + +func TestPreAddDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/pre_add" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 配送公司ID + OpenID string `json:"openid"` // 下单用户的openid + SubBizID string `json:"sub_biz_id"` // 子商户id,区分小程序内部多个子商户 + Sender struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"sender"` // 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段 + Receiver struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"receiver"` // 收件人信息 + Cargo struct { + GoodsValue float64 `json:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail struct { + Goods []struct { + Count uint `json:"good_count"` // 货物数量 + Name string `json:"good_name"` // 货品名称 + Price float32 `json:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit"` // 货品单位,最长不超过20个字符 + } `json:"goods"` // 货物交付信息,最长不超过100个字符 + } `json:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class"` // 品类二级类目 + } `json:"cargo"` // 货物信息 + OrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time"` // 期望派单时间(顺丰同城急送、达达、支持),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time"` // 期望送达时间(顺丰同城急送、美团配送支持),unix-timestamp + ExpectedPickTime uint `json:"expected_pick_time"` // 期望取件时间(闪送支持),unix-timestamp + PoiSeq string `json:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery uint `json:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery uint `json:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup uint `json:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) + } `json:"order_info"` // 订单信息 + Shop struct { + WxaPath string `json:"wxa_path"` // 商家小程序的路径,建议为订单页面 + ImgURL string `json:"img_url"` // 商品缩略图 url + GoodsName string `json:"goods_name"` // 商品名称 + GoodsCount uint `json:"goods_count"` // 商品数量 + } `json:"shop"` // 商品信息,会展示到物流通知消息中 + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ShopID == "" { + t.Error("Response column 'shopid' can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column 'shop_order_id' can not be empty") + } + if params.ShopNo == "" { + t.Error("Response column 'shop_no' can not be empty") + } + if params.DeliverySign == "" { + t.Error("Response column 'delivery_sign' can not be empty") + } + if params.DeliveryID == "" { + t.Error("Response column 'delivery_id' can not be empty") + } + if params.OpenID == "" { + t.Error("Response column 'openid' can not be empty") + } + if params.SubBizID == "" { + t.Error("Response column 'sub_biz_id' can not be empty") + } + + if params.Sender.Name == "" { + t.Error("Param 'sender.name' can not be empty") + } + if params.Sender.City == "" { + t.Error("Param 'sender.city' can not be empty") + } + if params.Sender.Address == "" { + t.Error("Param 'sender.address' can not be empty") + } + if params.Sender.AddressDetail == "" { + t.Error("Param 'sender.address_detail' can not be empty") + } + if params.Sender.Phone == "" { + t.Error("Param 'sender.phone' can not be empty") + } + if params.Sender.Lng == 0 { + t.Error("Param 'sender.lng' can not be empty") + } + if params.Sender.Lat == 0 { + t.Error("Param 'sender.lat' can not be empty") + } + if params.Sender.CoordinateType == 0 { + t.Error("Param 'sender.coordinate_type' can not be empty") + } + + if params.Receiver.Name == "" { + t.Error("Param 'receiver.name' can not be empty") + } + if params.Receiver.City == "" { + t.Error("Param 'receiver.city' can not be empty") + } + if params.Receiver.Address == "" { + t.Error("Param 'receiver.address' can not be empty") + } + if params.Receiver.AddressDetail == "" { + t.Error("Param 'receiver.address_detail' can not be empty") + } + if params.Receiver.Phone == "" { + t.Error("Param 'receiver.phone' can not be empty") + } + if params.Receiver.Lng == 0 { + t.Error("Param 'receiver.lng' can not be empty") + } + if params.Receiver.Lat == 0 { + t.Error("Param 'receiver.lat' can not be empty") + } + if params.Receiver.CoordinateType == 0 { + t.Error("Param 'receiver.coordinate_type' can not be empty") + } + if params.Cargo.GoodsValue == 0 { + t.Error("Param 'cargo.goods_value' can not be empty") + } + if params.Cargo.GoodsHeight == 0 { + t.Error("Param 'cargo.goods_height' can not be empty") + } + if params.Cargo.GoodsLength == 0 { + t.Error("Param 'cargo.goods_length' can not be empty") + } + if params.Cargo.GoodsWidth == 0 { + t.Error("Param 'cargo.goods_width' can not be empty") + } + if params.Cargo.GoodsWeight == 0 { + t.Error("Param 'cargo.goods_weight' can not be empty") + } + if params.Cargo.CargoFirstClass == "" { + t.Error("Param 'cargo.cargo_first_class' can not be empty") + } + if params.Cargo.CargoSecondClass == "" { + t.Error("Param 'cargo.cargo_second_class' can not be empty") + } + if len(params.Cargo.GoodsDetail.Goods) > 0 { + if params.Cargo.GoodsDetail.Goods[0].Count == 0 { + t.Error("Param 'cargo.goods_detail.goods.good_count' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Name == "" { + t.Error("Param 'cargo.goods_detail.goods.good_name' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Price == 0 { + t.Error("Param 'cargo.goods_detail.goods.good_price' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Unit == "" { + t.Error("Param 'cargo.goods_detail.goods.good_unit' can not be empty") + } + } + if params.OrderInfo.DeliveryServiceCode == "" { + t.Error("Param 'order_info.delivery_service_code' can not be empty") + } + if params.Shop.WxaPath == "" { + t.Error("Param 'shop.wxa_path' can not be empty") + } + if params.Shop.ImgURL == "" { + t.Error("Param 'shop.img_url' can not be empty") + } + if params.Shop.GoodsName == "" { + t.Error("Param 'shop.goods_name' can not be empty") + } + if params.Shop.GoodsCount == 0 { + t.Error("Param 'shop.goods_count' can not be empty") + } + + w.WriteHeader(http.StatusOK) + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "fee": 11, + "deliverfee": 11, + "couponfee": 1, + "insurancefee": 1000, + "tips": 1, + "insurancfee": 1, + "distance": 1001, + "dispatch_duration": 301, + "delivery_token": "1111111" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "cargo": { + "cargo_first_class": "美食宵夜", + "cargo_second_class": "零食小吃", + "goods_detail": { + "goods": [ + { + "good_count": 1, + "good_name": "水果", + "good_price": 11, + "good_unit": "元" + }, + { + "good_count": 2, + "good_name": "蔬菜", + "good_price": 21, + "good_unit": "元" + } + ] + }, + "goods_height": 1, + "goods_length": 3, + "goods_value": 5, + "goods_weight": 1, + "goods_width": 2 + }, + "delivery_id": "SFTC", + "delivery_sign": "01234567890123456789", + "openid": "oABC123456", + "order_info": { + "delivery_service_code": "xxx", + "expected_delivery_time": 1, + "is_direct_delivery": 1, + "is_finish_code_needed": 1, + "is_insured": 1, + "is_pickup_code_needed": 1, + "note": "test_note", + "order_time": 1555220757, + "order_type": 1, + "poi_seq": "1111", + "tips": 0 + }, + "receiver": { + "address": "xxx地铁站", + "address_detail": "2号楼202", + "city": "北京市", + "coordinate_type": 1, + "lat": 40.1529600001, + "lng": 116.5060300001, + "name": "老王", + "phone": "18512345678" + }, + "sender": { + "address": "xx大厦", + "address_detail": "1号楼101", + "city": "北京市", + "coordinate_type": 1, + "lat": 40.4486120001, + "lng": 116.3830750001, + "name": "刘一", + "phone": "13712345678" + }, + "shop": { + "goods_count": 2, + "goods_name": "宝贝", + "img_url": "https://mmbiz.qpic.cn/mmbiz_png/xxxxxxxxx/0?wx_fmt=png", + "wxa_path": "/page/index/index" + }, + "shop_no": "12345678", + "sub_biz_id": "sub_biz_id_1", + "shop_order_id": "SFTC_001", + "shopid": "122222222" + }` + + creator := new(DeliveryOrderCreator) + err := json.Unmarshal([]byte(raw), creator) + if err != nil { + t.Fatal(err) + } + + res, err := creator.prepare(ts.URL+apiPreAddDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.Fee == 0 { + t.Error("Response 'fee' can not be empty") + } + if res.Deliverfee == 0 { + t.Error("Response 'deliverfee' can not be empty") + } + if res.Couponfee == 0 { + t.Error("Response 'couponfee' can not be empty") + } + if res.Tips == 0 { + t.Error("Response 'tips' can not be empty") + } + if res.Insurancefee == 0 { + t.Error("Response 'insurancefee' can not be empty") + } + if res.Distance == 0 { + t.Error("Response 'distance' can not be empty") + } + if res.DispatchDuration == 0 { + t.Error("Response 'dispatch_duration' can not be empty") + } +} + +func TestPreCancelDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/precancel" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + params := struct { + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 快递公司ID + WaybillID string `json:"waybill_id"` // 配送单id + ReasonID uint8 `json:"cancel_reason_id"` // 取消原因Id + Reason string `json:"cancel_reason"` // 取消原因 + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ShopID == "" { + t.Error("Param 'shopid' can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Param 'shop_order_id' can not be empty") + } + if params.ShopNo == "" { + t.Error("Param 'shop_no' can not be empty") + } + if params.DeliverySign == "" { + t.Error("Param 'delivery_sign' can not be empty") + } + if params.WaybillID == "" { + t.Error("Param 'waybill_id' can not be empty") + } + if params.DeliveryID == "" { + t.Error("Param 'delivery_id' can not be empty") + } + if params.ReasonID == 0 { + t.Error("Param 'cancel_reason_id' can not be empty") + } + if params.Reason == "" { + t.Error("Param 'cancel_reason' can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "deduct_fee": 5, + "desc": "blabla" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "shopid": "123456", + "shop_order_id": "123456", + "waybill_id": "123456", + "delivery_id": "123456", + "cancel_reason_id": 1, + "cancel_reason": "xxxxxx", + "delivery_sign": "123456", + "shop_no": "shop_no_111" + }` + + canceler := new(DeliveryOrderCanceler) + err := json.Unmarshal([]byte(raw), canceler) + if err != nil { + t.Fatal(err) + } + + res, err := canceler.prepare(ts.URL+apiPreCancelDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } + if res.DeductFee == 0 { + t.Error("Response 'deduct_fee' can not be empty") + } + if res.Desc == "" { + t.Error("Response 'desc' can not be empty") + } +} + +func TestReAddDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/business/order/readd" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + DeliveryToken string `json:"delivery_token"` // 预下单接口返回的参数,配送公司可保证在一段时间内运费不变 + ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填 + DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串 + DeliveryID string `json:"delivery_id"` // 配送公司ID + OpenID string `json:"openid"` // 下单用户的openid + SubBizID string `json:"sub_biz_id"` // 子商户id,区分小程序内部多个子商户 + Sender struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"sender"` // 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段 + Receiver struct { + Name string `json:"name"` // 姓名,最长不超过256个字符 + City string `json:"city"` // 城市名称,如广州市 + Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"receiver"` // 收件人信息 + Cargo struct { + GoodsValue float64 `json:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail struct { + Goods []struct { + Count uint `json:"good_count"` // 货物数量 + Name string `json:"good_name"` // 货品名称 + Price float32 `json:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit"` // 货品单位,最长不超过20个字符 + } `json:"goods"` // 货物交付信息,最长不超过100个字符 + } `json:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class"` // 品类二级类目 + } `json:"cargo"` // 货物信息 + OrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time"` // 期望派单时间(顺丰同城急送、达达、支持),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time"` // 期望送达时间(顺丰同城急送、美团配送支持),unix-timestamp + ExpectedPickTime uint `json:"expected_pick_time"` // 期望取件时间(闪送支持),unix-timestamp + PoiSeq string `json:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery uint `json:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery uint `json:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup uint `json:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) + } `json:"order_info"` // 订单信息 + Shop struct { + WxaPath string `json:"wxa_path"` // 商家小程序的路径,建议为订单页面 + ImgURL string `json:"img_url"` // 商品缩略图 url + GoodsName string `json:"goods_name"` // 商品名称 + GoodsCount uint `json:"goods_count"` // 商品数量 + } `json:"shop"` // 商品信息,会展示到物流通知消息中 + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.DeliveryToken == "" { + t.Error("Response column 'delivery_token' can not be empty") + } + if params.ShopID == "" { + t.Error("Response column 'shopid' can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column 'shop_order_id' can not be empty") + } + if params.ShopNo == "" { + t.Error("Response column 'shop_no' can not be empty") + } + if params.DeliverySign == "" { + t.Error("Response column 'delivery_sign' can not be empty") + } + if params.DeliveryID == "" { + t.Error("Response column 'delivery_id' can not be empty") + } + if params.OpenID == "" { + t.Error("Response column 'openid' can not be empty") + } + if params.SubBizID == "" { + t.Error("Response column 'sub_biz_id' can not be empty") + } + + if params.Sender.Name == "" { + t.Error("Param 'sender.name' can not be empty") + } + if params.Sender.City == "" { + t.Error("Param 'sender.city' can not be empty") + } + if params.Sender.Address == "" { + t.Error("Param 'sender.address' can not be empty") + } + if params.Sender.AddressDetail == "" { + t.Error("Param 'sender.address_detail' can not be empty") + } + if params.Sender.Phone == "" { + t.Error("Param 'sender.phone' can not be empty") + } + if params.Sender.Lng == 0 { + t.Error("Param 'sender.lng' can not be empty") + } + if params.Sender.Lat == 0 { + t.Error("Param 'sender.lat' can not be empty") + } + if params.Sender.CoordinateType == 0 { + t.Error("Param 'sender.coordinate_type' can not be empty") + } + + if params.Receiver.Name == "" { + t.Error("Param 'receiver.name' can not be empty") + } + if params.Receiver.City == "" { + t.Error("Param 'receiver.city' can not be empty") + } + if params.Receiver.Address == "" { + t.Error("Param 'receiver.address' can not be empty") + } + if params.Receiver.AddressDetail == "" { + t.Error("Param 'receiver.address_detail' can not be empty") + } + if params.Receiver.Phone == "" { + t.Error("Param 'receiver.phone' can not be empty") + } + if params.Receiver.Lng == 0 { + t.Error("Param 'receiver.lng' can not be empty") + } + if params.Receiver.Lat == 0 { + t.Error("Param 'receiver.lat' can not be empty") + } + if params.Receiver.CoordinateType == 0 { + t.Error("Param 'receiver.coordinate_type' can not be empty") + } + if params.Cargo.GoodsValue == 0 { + t.Error("Param 'cargo.goods_value' can not be empty") + } + if params.Cargo.GoodsHeight == 0 { + t.Error("Param 'cargo.goods_height' can not be empty") + } + if params.Cargo.GoodsLength == 0 { + t.Error("Param 'cargo.goods_length' can not be empty") + } + if params.Cargo.GoodsWidth == 0 { + t.Error("Param 'cargo.goods_width' can not be empty") + } + if params.Cargo.GoodsWeight == 0 { + t.Error("Param 'cargo.goods_weight' can not be empty") + } + if params.Cargo.CargoFirstClass == "" { + t.Error("Param 'cargo.cargo_first_class' can not be empty") + } + if params.Cargo.CargoSecondClass == "" { + t.Error("Param 'cargo.cargo_second_class' can not be empty") + } + if len(params.Cargo.GoodsDetail.Goods) > 0 { + if params.Cargo.GoodsDetail.Goods[0].Count == 0 { + t.Error("Param 'cargo.goods_detail.goods.good_count' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Name == "" { + t.Error("Param 'cargo.goods_detail.goods.good_name' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Price == 0 { + t.Error("Param 'cargo.goods_detail.goods.good_price' can not be empty") + } + if params.Cargo.GoodsDetail.Goods[0].Unit == "" { + t.Error("Param 'cargo.goods_detail.goods.good_unit' can not be empty") + } + } + if params.OrderInfo.DeliveryServiceCode == "" { + t.Error("Param 'order_info.delivery_service_code' can not be empty") + } + if params.Shop.WxaPath == "" { + t.Error("Param 'shop.wxa_path' can not be empty") + } + if params.Shop.ImgURL == "" { + t.Error("Param 'shop.img_url' can not be empty") + } + if params.Shop.GoodsName == "" { + t.Error("Param 'shop.goods_name' can not be empty") + } + if params.Shop.GoodsCount == 0 { + t.Error("Param 'shop.goods_count' can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok", + "fee": 11, + "deliverfee": 11, + "couponfee": 1, + "tips": 1, + "insurancefee": 1000, + "insurancfee": 1, + "distance": 1001, + "waybill_id": "123456789", + "order_status": 101, + "finish_code": 1024, + "pickup_code": 2048, + "dispatch_duration": 300 + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + raw := `{ + "cargo": { + "cargo_first_class": "美食宵夜", + "cargo_second_class": "零食小吃", + "goods_detail": { + "goods": [ + { + "good_count": 1, + "good_name": "水果", + "good_price": 11, + "good_unit": "元" + }, + { + "good_count": 2, + "good_name": "蔬菜", + "good_price": 21, + "good_unit": "元" + } + ] + }, + "goods_height": 1, + "goods_length": 3, + "goods_value": 5, + "goods_weight": 1, + "goods_width": 2 + }, + "delivery_id": "SFTC", + "delivery_sign": "01234567890123456789", + "openid": "oABC123456", + "order_info": { + "delivery_service_code": "xxx", + "expected_delivery_time": 1, + "is_direct_delivery": 1, + "is_finish_code_needed": 1, + "is_insured": 1, + "is_pickup_code_needed": 1, + "note": "test_note", + "order_time": 1555220757, + "order_type": 1, + "poi_seq": "1111", + "tips": 0 + }, + "receiver": { + "address": "xxx地铁站", + "address_detail": "2号楼202", + "city": "北京市", + "coordinate_type": 1, + "lat": 40.1529600001, + "lng": 116.5060300001, + "name": "老王", + "phone": "18512345678" + }, + "sender": { + "address": "xx大厦", + "address_detail": "1号楼101", + "city": "北京市", + "coordinate_type": 1, + "lat": 40.4486120001, + "lng": 116.3830750001, + "name": "刘一", + "phone": "13712345678" + }, + "shop": { + "goods_count": 2, + "goods_name": "宝贝", + "img_url": "https://mmbiz.qpic.cn/mmbiz_png/xxxxxxxxx/0?wx_fmt=png", + "wxa_path": "/page/index/index" + }, + "shop_no": "12345678", + "sub_biz_id": "sub_biz_id_1", + "shop_order_id": "SFTC_001", + "shopid": "122222222", + "delivery_token": "xxxxxxxx" + }` + + creator := new(DeliveryOrderCreator) + err := json.Unmarshal([]byte(raw), creator) + if err != nil { + t.Fatal(err) + } + + res, err := creator.recreate(ts.URL+apiReAddDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.Fee == 0 { + t.Error("Response 'fee' can not be empty") + } + if res.Deliverfee == 0 { + t.Error("Response 'deliverfee' can not be empty") + } + if res.Couponfee == 0 { + t.Error("Response 'couponfee' can not be empty") + } + if res.Tips == 0 { + t.Error("Response 'tips' can not be empty") + } + if res.Insurancefee == 0 { + t.Error("Response 'insurancefee' can not be empty") + } + if res.Distance == 0 { + t.Error("Response 'distance' can not be empty") + } + if res.WaybillID == "" { + t.Error("Response 'waybill_id' can not be empty") + } + if res.OrderStatus == 0 { + t.Error("Response 'order_status' can not be empty") + } + if res.FinishCode == 0 { + t.Error("Response 'finish_code' can not be empty") + } + if res.PickupCode == 0 { + t.Error("Response 'pickup_code' can not be empty") + } + if res.DispatchDuration == 0 { + t.Error("Response 'dispatch_duration' can not be empty") + } + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } +} + +func TestUpdateDeliveryOrder(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Error("UnExpect request method") + } + + if r.URL.EscapedPath() != "/cgi-bin/express/local/delivery/update_order" { + t.Error("Unexpected path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("Query 'access_token' can not be empty") + } + + params := struct { + WxToken string `json:"wx_token"` + ShopID string `json:"shopid"` + ShopOrderID string `json:"shop_order_id"` + ShopNo string `json:"shop_no"` + WaybillID string `json:"waybill_id"` + ActionTime uint `json:"action_time"` + OrderStatus int `json:"order_status"` + ActionMsg string `json:"action_msg"` + WxaPath string `json:"wxa_path"` + Agent struct { + Name string `json:"name"` + Phone string `json:"phone"` + IsPhoneEncrypted uint8 `json:"is_phone_encrypted"` + } `json:"agent"` + ExpectedDeliveryTime uint `json:"expected_delivery_time"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.WxToken == "" { + t.Error("Response column wx_token can not be empty") + } + if params.Agent.Name == "" { + t.Error("Response column agent.name can not be empty") + } + if params.Agent.Phone == "" { + t.Error("Response column agent.phone can not be empty") + } + if params.Agent.IsPhoneEncrypted == 0 { + t.Error("Response column agent.is_phone_encrypted can not be empty") + } + if params.ShopID == "" { + t.Error("Response column shopid can not be empty") + } + if params.ShopNo == "" { + t.Error("Response column shop_no can not be empty") + } + if params.WaybillID == "" { + t.Error("Response column waybill_id can not be empty") + } + if params.ShopOrderID == "" { + t.Error("Response column expected_delivery_time can not be empty") + } + if params.ExpectedDeliveryTime == 0 { + t.Error("Response column action_time can not be empty") + } + if params.ActionTime == 0 { + t.Error("Response column action_time can not be empty") + } + if params.OrderStatus == 0 { + t.Error("Response column order_status can not be empty") + } + if params.ActionMsg == "" { + t.Error("Response column action_msg can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "resultcode": 1, + "resultmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + + raw := `{ + "wx_token": "xxxxxx", + "shopid": "test_shop_id", + "shop_no": "test_shop_id", + "shop_order_id": "xxxxxxxxxxx", + "waybill_id": "xxxxxxxxxxxxx", + "action_time": 12345678, + "order_status": 101, + "action_msg": "xxxxxx", + "wxa_path": "xxxxxx", + "expected_delivery_time": 123456, + "agent": { + "name": "xxxxxx", + "phone": "xxxxxx", + "is_phone_encrypted": 1 + } + }` + + updater := new(DeliveryOrderUpdater) + err := json.Unmarshal([]byte(raw), updater) + if err != nil { + t.Fatal(err) + } + + res, err := updater.update(ts.URL+apiUpdateDeliveryOrder, "mock-access-token") + if err != nil { + t.Fatal(err) + } + if res.ResultCode == 0 { + t.Error("Response 'resultcode' can not be empty") + } + if res.ResultMsg == "" { + t.Error("Response 'resultmsg' can not be empty") + } +} + +func TestOnDeliveryOrderStatusUpdate(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnDeliveryOrderStatusUpdate(func(mix *DeliveryOrderStatusUpdateResult) *DeliveryOrderStatusUpdateReturn { + if mix.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + + if mix.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if mix.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if mix.MsgType != "event" { + t.Error("Unexpected message type") + } + + if mix.Event != "update_waybill_status" { + t.Error("Unexpected message event") + } + + if mix.ShopID == "" { + t.Error("Result 'shopid' can not be zero") + } + + if mix.ShopOrderID == "" { + t.Error("Result 'shop_order_id' can not be zero") + } + + if mix.ShopNo == "" { + t.Error("Result 'shop_no' can not be zero") + } + + if mix.WaybillID == "" { + t.Error("Result 'waybill_id' can not be zero") + } + + if mix.ActionTime == 0 { + t.Error("Result 'action_time' can not be zero") + } + + if mix.OrderStatus == 0 { + t.Error("Result 'order_status' can not be zero") + } + + if mix.ActionMsg == "" { + t.Error("Result 'action_msg' can not be zero") + } + + if mix.Agent.Name == "" { + t.Error("Result 'agent.name' can not be zero") + } + + if mix.Agent.Phone == "" { + t.Error("Result 'agent.phone' can not be zero") + } + + return &DeliveryOrderStatusUpdateReturn{ + "mock-to-user-name", + "mock-from-user-name", + 20060102150405, + "mock-message-type", + "mock-event", + 0, + "mock-result-message", + } + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + jsonData := `{ + "ToUserName": "toUser", + "FromUserName": "fromUser", + "CreateTime": 1546924844, + "MsgType": "event", + "Event": "update_waybill_status", + "shopid": "123456", + "shop_order_id": "123456", + "waybill_id": "123456", + "action_time": 1546924844, + "order_status": 102, + "action_msg": "xxx", + "shop_no": "123456", + "agent": { + "name": "xxx", + "phone": "1234567" + } + }` + + res, err := http.Post(ts.URL, "application/json", strings.NewReader(jsonData)) + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() +} diff --git a/app/lib/weapp/nearby_poi.go b/app/lib/weapp/nearby_poi.go new file mode 100644 index 0000000..7d5849c --- /dev/null +++ b/app/lib/weapp/nearby_poi.go @@ -0,0 +1,231 @@ +package weapp + +import ( + "encoding/json" + "fmt" +) + +// apis +const ( + apiAddNearbyPoi = "/wxa/addnearbypoi" + apiDeleteNearbyPoi = "/wxa/delnearbypoi" + apiGetNearbyPoiList = "/wxa/getnearbypoilist" + apiSetNearbyPoiShowStatus = "/wxa/setnearbypoishowstatus" +) + +// NearbyPoi 附近地点 +type NearbyPoi struct { + PicList PicList `json:"pic_list"` // 门店图片,最多9张,最少1张,上传门店图片如门店外景、环境设施、商品服务等,图片将展示在微信客户端的门店页。图片链接通过文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729中的《上传图文消息内的图片获取URL》接口获取。必填,文件格式为bmp、png、jpeg、jpg或gif,大小不超过5M pic_list是字符串,内容是一个json! + ServiceInfos ServiceInfos `json:"service_infos"` // 必服务标签列表 选填,需要填写服务标签ID、APPID、对应服务落地页的path路径,详细字段格式见下方示例 + StoreName string `json:"store_name"` // 门店名字 必填,门店名称需按照所选地理位置自动拉取腾讯地图门店名称,不可修改,如需修改请重现选择地图地点或重新创建地点 + Hour string `json:"hour"` // 营业时间,格式11:11-12:12 必填 + Credential string `json:"credential"` // 资质号 必填, 15位营业执照注册号或9位组织机构代码 + Address string `json:"address"` // 地址 必填 + CompanyName string `json:"company_name"` // 主体名字 必填 + QualificationList string `json:"qualification_list"` // 证明材料 必填 如果company_name和该小程序主体不一致,需要填qualification_list,详细规则见附近的小程序使用指南-如何证明门店的经营主体跟公众号或小程序帐号主体相关http://kf.qq.com/faq/170401MbUnim17040122m2qY.html + KFInfo KFInfo `json:"kf_info"` // 客服信息 选填,可自定义服务头像与昵称,具体填写字段见下方示例kf_info pic_list是字符串,内容是一个json! + PoiID string `json:"poi_id"` // 如果创建新的门店,poi_id字段为空 如果更新门店,poi_id参数则填对应门店的poi_id 选填 +} + +// PicList 门店图片 +type PicList struct { + List []string `json:"list"` +} + +// ServiceInfos 必服务标签列表 +type ServiceInfos struct { + ServiceInfos []ServiceInfo `json:"service_infos"` +} + +// ServiceInfo 必服务标签 +type ServiceInfo struct { + ID uint `json:"id"` + Type uint8 `json:"type"` + Name string `json:"name"` + AppID string `json:"appid"` + Path string `json:"path"` +} + +// KFInfo // 客服信息 +type KFInfo struct { + OpenKF bool `json:"open_kf"` + KFHeading string `json:"kf_headimg"` + KFName string `json:"kf_name"` +} + +// AddNearbyPoiResponse response of add position. +type AddNearbyPoiResponse struct { + CommonError + Data struct { + AuditID string `json:"audit_id"` // 审核单 ID + PoiID string `json:"poi_id"` // 附近地点 ID + RelatedCredential string `json:"related_credential"` // 经营资质证件号 + } `json:"data"` +} + +// Add 添加地点 +// token 接口调用凭证 +func (p *NearbyPoi) Add(token string) (*AddNearbyPoiResponse, error) { + api := baseURL + apiAddNearbyPoi + return p.add(api, token) +} + +func (p *NearbyPoi) add(api, token string) (*AddNearbyPoiResponse, error) { + + pisList, err := json.Marshal(p.PicList) + if err != nil { + return nil, fmt.Errorf("failed to marshal picture list to json: %v", err) + } + + serviceInfos, err := json.Marshal(p.ServiceInfos) + if err != nil { + return nil, fmt.Errorf("failed to marshal service info list to json: %v", err) + } + + kfInfo, err := json.Marshal(p.KFInfo) + if err != nil { + return nil, fmt.Errorf("failed to marshal customer service staff info list to json: %v", err) + } + + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "is_comm_nearby": "1", + "pic_list": string(pisList), + "service_infos": string(serviceInfos), + "store_name": p.StoreName, + "hour": p.Hour, + "credential": p.Credential, + "address": p.Address, + "company_name": p.CompanyName, + "qualification_list": p.QualificationList, + "kf_info": string(kfInfo), + "poi_id": p.PoiID, + } + + res := new(AddNearbyPoiResponse) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// DeleteNearbyPoi 删除地点 +// token 接口调用凭证 +// id 附近地点 ID +func DeleteNearbyPoi(token, id string) (*CommonError, error) { + api := baseURL + apiDeleteNearbyPoi + return deleteNearbyPoi(api, token, id) +} + +func deleteNearbyPoi(api, token, id string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "poi_id": id, + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// PositionList 地点列表 +type PositionList struct { + CommonError + Data struct { + LeftApplyNum uint `json:"left_apply_num"` // 剩余可添加地点个数 + MaxApplyNum uint `json:"max_apply_num"` // 最大可添加地点个数 + Data struct { + List []struct { + PoiID string `json:"poi_id"` // 附近地点 ID + QualificationAddress string `json:"qualification_address"` // 资质证件地址 + QualificationNum string `json:"qualification_num"` // 资质证件证件号 + AuditStatus int `json:"audit_status"` // 地点审核状态 + DisplayStatus int `json:"display_status"` // 地点展示在附近状态 + RefuseReason string `json:"refuse_reason"` // 审核失败原因,audit_status=4 时返回 + } `json:"poi_list"` // 地址列表 + } `json:"-"` + RawData string `json:"data"` // 地址列表的 JSON 格式字符串 + } `json:"data"` // 返回数据 +} + +// GetNearbyPoiList 查看地点列表 +// token 接口调用凭证 +// page 起始页id(从1开始计数) +// rows 每页展示个数(最多1000个) +func GetNearbyPoiList(token string, page, rows uint) (*PositionList, error) { + api := baseURL + apiGetNearbyPoiList + return getNearbyPoiList(api, token, page, rows) +} + +func getNearbyPoiList(api, token string, page, rows uint) (*PositionList, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "page": page, + "page_rows": rows, + } + + res := new(PositionList) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(res.Data.RawData), &res.Data.Data) + if err != nil { + return nil, err + } + + return res, nil +} + +// NearbyPoiShowStatus 展示状态 +type NearbyPoiShowStatus int8 + +// 所有展示状态 +const ( + HideNearbyPoi NearbyPoiShowStatus = iota // 不展示 + ShowNearbyPoi // 展示 +) + +// SetNearbyPoiShowStatus 展示/取消展示附近小程序 +// token 接口调用凭证 +// poiID 附近地点 ID +// status 是否展示 +func SetNearbyPoiShowStatus(token, poiID string, status NearbyPoiShowStatus) (*CommonError, error) { + api := baseURL + apiSetNearbyPoiShowStatus + return setNearbyPoiShowStatus(api, token, poiID, status) +} + +func setNearbyPoiShowStatus(api, token, poiID string, status NearbyPoiShowStatus) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "poi_id": poiID, + "status": status, + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/nearby_poi_test.go b/app/lib/weapp/nearby_poi_test.go new file mode 100644 index 0000000..e1c1f98 --- /dev/null +++ b/app/lib/weapp/nearby_poi_test.go @@ -0,0 +1,348 @@ +package weapp + +import ( + "encoding/base64" + "encoding/json" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestAddNearbyPoi(t *testing.T) { + + localServer := http.NewServeMux() + localServer.HandleFunc("/notify", func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnAddNearbyPoi(func(mix *AddNearbyPoiResult) { + if mix.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + + if mix.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if mix.CreateTime == 0 { + t.Error("CreateTime can not be zero") + } + if mix.MsgType != "event" { + t.Error("Unexpected message type") + } + + if mix.Event != "add_nearby_poi_audit_info" { + t.Error("Unexpected message event") + } + + if mix.AuditID == 0 { + t.Error("audit_id can not be zero") + } + if mix.Status == 0 { + t.Error("status can not be zero") + } + if mix.Reason == "" { + t.Error("reason can not be empty") + } + if mix.PoiID == 0 { + t.Error("poi_id can not be zero") + } + + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + }) + + tls := httptest.NewServer(localServer) + defer tls.Close() + + remoteServer := http.NewServeMux() + remoteServer.HandleFunc(apiAddNearbyPoi, func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiAddNearbyPoi { + t.Fatalf("Except to path '%s',get '%s'", apiAddNearbyPoi, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + IsCommNearby string `json:"is_comm_nearby"` + PicList string `json:"pic_list"` // 门店图片,最多9张,最少1张,上传门店图片如门店外景、环境设施、商品服务等,图片将展示在微信客户端的门店页。图片链接通过文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729中的《上传图文消息内的图片获取URL》接口获取。必填,文件格式为bmp、png、jpeg、jpg或gif,大小不超过5M pic_list是字符串,内容是一个json! + ServiceInfos string `json:"service_infos"` // 必服务标签列表 选填,需要填写服务标签ID、APPID、对应服务落地页的path路径,详细字段格式见下方示例 + StoreName string `json:"store_name"` // 门店名字 必填,门店名称需按照所选地理位置自动拉取腾讯地图门店名称,不可修改,如需修改请重现选择地图地点或重新创建地点 + Hour string `json:"hour"` // 营业时间,格式11:11-12:12 必填 + Credential string `json:"credential"` // 资质号 必填, 15位营业执照注册号或9位组织机构代码 + Address string `json:"address"` // 地址 必填 + CompanyName string `json:"company_name"` // 主体名字 必填 + QualificationList string `json:"qualification_list"` // 证明材料 必填 如果company_name和该小程序主体不一致,需要填qualification_list,详细规则见附近的小程序使用指南-如何证明门店的经营主体跟公众号或小程序帐号主体相关http://kf.qq.com/faq/170401MbUnim17040122m2qY.html + KFInfo string `json:"kf_info"` // 客服信息 选填,可自定义服务头像与昵称,具体填写字段见下方示例kf_info pic_list是字符串,内容是一个json! + PoiID string `json:"poi_id"` // 如果创建新的门店,poi_id字段为空 如果更新门店,poi_id参数则填对应门店的poi_id 选填 + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + if params.IsCommNearby != "1" { + t.Error("param pic_list is invalid") + } + if params.PicList == "" { + t.Error("param pic_list can not be empty") + } + if params.ServiceInfos == "" { + t.Error("param service_infos can not be empty") + } + if params.StoreName == "" { + t.Error("param store_name can not be empty") + } + if params.Hour == "" { + t.Error("param hour can not be empty") + } + if params.Credential == "" { + t.Error("param credential can not be empty") + } + if params.Address == "" { + t.Error("param address can not be empty") + } + if params.CompanyName == "" { + t.Error("param company_name can not be empty") + } + if params.QualificationList == "" { + t.Error("param qualification_list can not be empty") + } + if params.KFInfo == "" { + t.Error("param kf_info can not be empty") + } + if params.PoiID == "" { + t.Error("param poi_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok", + "data":{ + "audit_id": "xxxxx", + "poi_id": "xxxxx", + "related_credential":"xxxxx" + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + + raw = ` + + + 1488856741 + + + 11111 + 3 + + 111111 + ` + reader := strings.NewReader(raw) + http.Post(tls.URL+"/notify", "text/xml", reader) + }) + trs := httptest.NewServer(remoteServer) + defer trs.Close() + + poi := NearbyPoi{ + PicList: PicList{[]string{"first-mock-picture-url", "second-mock-picture-url", "third-mock-picture-url"}}, + ServiceInfos: ServiceInfos{[]ServiceInfo{ + {1, 1, "mock-name", "mock-app-id", "mock-path"}, + }}, + StoreName: "mock-store-name", + Hour: "11:11-12:12", + Credential: "mock-credential", + Address: "mock-address", // 地址 必填 + CompanyName: "mock-company-name", // 主体名字 必填 + QualificationList: "mock-qualification-list", // 证明材料 必填 如果company_name和该小程序主体不一致,需要填qualification_list,详细规则见附近的小程序使用指南-如何证明门店的经营主体跟公众号或小程序帐号主体相关http://kf.qq.com/faq/170401MbUnim17040122m2qY.html + KFInfo: KFInfo{true, "kf-head-img", "kf-name"}, // 客服信息 选填,可自定义服务头像与昵称,具体填写字段见下方示例kf_info pic_list是字符串,内容是一个json! + PoiID: "mock-poi-id", // 如果创建新的门店,poi_id字段为空 如果更新门店,poi_id参数则填对应门店的poi_id 选填 + } + _, err := poi.add(trs.URL+apiAddNearbyPoi, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestDeleteNearbyPoi(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiDeleteNearbyPoi { + t.Fatalf("Except to path '%s',get '%s'", apiDeleteNearbyPoi, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + PoiID string `json:"poi_id"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.PoiID == "" { + t.Error("Response column poi_id can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := deleteNearbyPoi(ts.URL+apiDeleteNearbyPoi, "mock-access-token", "mock-poi-id") + if err != nil { + t.Fatal(err) + } +} + +func TestGetNearbyPoiList(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiGetNearbyPoiList { + t.Fatalf("Except to path '%s',get '%s'", apiGetNearbyPoiList, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Page uint `json:"page"` + Rows uint `json:"page_rows"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Page == 0 { + t.Error("Response column page can not be empty") + } + + if params.Rows == 0 { + t.Error("Response column page_rows can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "", + "data": { + "left_apply_num": 9, + "max_apply_num": 10, + "data": "{\"poi_list\": [{\"poi_id\": \"123456\",\"qualification_address\": \"广东省广州市海珠区新港中路123号\",\"qualification_num\": \"123456789-1\",\"audit_status\": 3,\"display_status\": 0,\"refuse_reason\": \"\"}]}" + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getNearbyPoiList(ts.URL+apiGetNearbyPoiList, "mock-access-token", 1, 10) + if err != nil { + t.Fatal(err) + } + +} + +func TestSetNearbyPoiShowStatus(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSetNearbyPoiShowStatus { + t.Fatalf("Except to path '%s',get '%s'", apiSetNearbyPoiShowStatus, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + PoiID string `json:"poi_id"` + Status uint8 `json:"status"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.PoiID == "" { + t.Error("Response column poi_id can not be empty") + } + + if params.Status == 0 { + t.Error("Response column status can not be zero") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := setNearbyPoiShowStatus(ts.URL+apiSetNearbyPoiShowStatus, "mock-access-token", "mock-poi-id", ShowNearbyPoi) + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/ocr.go b/app/lib/weapp/ocr.go new file mode 100644 index 0000000..01e5c13 --- /dev/null +++ b/app/lib/weapp/ocr.go @@ -0,0 +1,386 @@ +package weapp + +const ( + apiBankcard = "/cv/ocr/bankcard" + apiVehicleLicense = "/cv/ocr/driving" + apiDrivingLicense = "/cv/ocr/drivinglicense" + apiIDCard = "/cv/ocr/idcard" + apiBusinessLicense = "/cv/ocr/bizlicense" + apiPrintedText = "/cv/ocr/comm" +) + +// RecognizeMode 图片识别模式 +type RecognizeMode = string + +// 所有图片识别模式 +const ( + RecognizeModePhoto RecognizeMode = "photo" // 拍照模式 + RecognizeModeScan RecognizeMode = "scan" // 扫描模式 +) + +// BankCardResponse 识别银行卡返回数据 +type BankCardResponse struct { + CommonError + Number string `json:"number"` // 银行卡号 +} + +// BankCardByURL 通过URL识别银行卡 +// 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。 +// +// token 接口调用凭证 +// url 要检测的图片 url,传这个则不用传 img 参数。 +// mode 图片识别模式,photo(拍照模式)或 scan(扫描模式) +func BankCardByURL(token, cardURL string, mode RecognizeMode) (*BankCardResponse, error) { + api := baseURL + apiBankcard + return bankCardByURL(api, token, cardURL, mode) +} + +func bankCardByURL(api, token, cardURL string, mode RecognizeMode) (*BankCardResponse, error) { + res := new(BankCardResponse) + err := ocrByURL(api, token, cardURL, mode, res) + if err != nil { + return nil, err + } + + return res, nil +} + +// BankCard 通过文件识别银行卡 +// 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。 +// +// token 接口调用凭证 +// img form-data 中媒体文件标识,有filename、filelength、content-type等信息,传这个则不用传递 img_url。 +// mode 图片识别模式,photo(拍照模式)或 scan(扫描模式) +func BankCard(token, filename string, mode RecognizeMode) (*BankCardResponse, error) { + api := baseURL + apiBankcard + return bankCard(api, token, filename, mode) +} + +func bankCard(api, token, filename string, mode RecognizeMode) (*BankCardResponse, error) { + res := new(BankCardResponse) + err := ocrByFile(api, token, filename, mode, res) + if err != nil { + return nil, err + } + + return res, err +} + +// CardType 卡片方向 +type CardType = string + +// 所有卡片方向 +const ( + CardTypeFront = "Front" // 正面 + CardTypeBack = "Back" // 背面 +) + +// CardResponse 识别卡片返回数据 +type CardResponse struct { + CommonError + Type CardType `json:"type"` // 正面或背面,Front / Back + ValidDate string `json:"valid_date"` // 有效期 +} + +// DrivingLicenseResponse 识别行驶证返回数据 +type DrivingLicenseResponse struct { + CommonError + IDNum string `json:"id_num"` // 证号 + Name string `json:"name"` // 姓名 + Nationality string `json:"nationality"` // 国家 + Sex string `json:"sex"` // 性别 + Address string `json:"address"` // 地址 + BirthDate string `json:"birth_date"` // 出生日期 + IssueDate string `json:"issue_date"` // 初次领证日期 + CarClass string `json:"car_class"` // 准驾车型 + ValidFrom string `json:"valid_from"` // 有效期限起始日 + ValidTo string `json:"valid_to"` // 有效期限终止日 + OfficialSeal string `json:"official_seal"` // 印章文构 +} + +// DriverLicenseByURL 通过URL识别行驶证 +// 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。 +// +// token 接口调用凭证 +// url 要检测的图片 url,传这个则不用传 img 参数。 +// mode 图片识别模式,photo(拍照模式)或 scan(扫描模式) +func DriverLicenseByURL(token, licenseURL string) (*DrivingLicenseResponse, error) { + api := baseURL + apiDrivingLicense + return driverLicenseByURL(api, token, licenseURL) +} + +func driverLicenseByURL(api, token, licenseURL string) (*DrivingLicenseResponse, error) { + res := new(DrivingLicenseResponse) + err := ocrByURL(api, token, licenseURL, "", res) + if err != nil { + return nil, err + } + + return res, nil +} + +// DriverLicense 通过文件识别行驶证 +// 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。 +// +// token 接口调用凭证 +// img form-data 中媒体文件标识,有filename、filelength、content-type等信息,传这个则不用传递 img_url。 +// mode 图片识别模式,photo(拍照模式)或 scan(扫描模式) +func DriverLicense(token, filename string) (*DrivingLicenseResponse, error) { + api := baseURL + apiDrivingLicense + return driverLicense(api, token, filename) +} + +func driverLicense(api, token, filename string) (*DrivingLicenseResponse, error) { + res := new(DrivingLicenseResponse) + err := ocrByFile(api, token, filename, "", res) + if err != nil { + return nil, err + } + + return res, err +} + +// IDCardResponse 识别身份证返回数据 +type IDCardResponse = CardResponse + +// IDCardByURL 通过URL识别身份证 +// 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。 +// +// token 接口调用凭证 +// url 要检测的图片 url,传这个则不用传 img 参数。 +// mode 图片识别模式,photo(拍照模式)或 scan(扫描模式) +func IDCardByURL(token, cardURL string, mode RecognizeMode) (*IDCardResponse, error) { + api := baseURL + apiIDCard + return idCardByURL(api, token, cardURL, mode) +} + +func idCardByURL(api, token, cardURL string, mode RecognizeMode) (*IDCardResponse, error) { + res := new(IDCardResponse) + err := ocrByURL(api, token, cardURL, mode, res) + if err != nil { + return nil, err + } + + return res, nil +} + +// IDCard 通过文件识别身份证 +// 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。 +// +// token 接口调用凭证 +// img form-data 中媒体文件标识,有filename、filelength、content-type等信息,传这个则不用传递 img_url。 +// mode 图片识别模式,photo(拍照模式)或 scan(扫描模式) +func IDCard(token, filename string, mode RecognizeMode) (*IDCardResponse, error) { + api := baseURL + apiIDCard + return idCard(api, token, filename, mode) +} + +func idCard(api, token, filename string, mode RecognizeMode) (*IDCardResponse, error) { + res := new(IDCardResponse) + err := ocrByFile(api, token, filename, mode, res) + if err != nil { + return nil, err + } + + return res, err +} + +// VehicleLicenseResponse 识别卡片返回数据 +type VehicleLicenseResponse struct { + CommonError + VehicleType string `json:"vehicle_type"` + Owner string `json:"owner"` + Addr string `json:"addr"` + UseCharacter string `json:"use_character"` + Model string `json:"model"` + Vin string `json:"vin"` + EngineNum string `json:"engine_num"` + RegisterDate string `json:"register_date"` + IssueDate string `json:"issue_date"` + PlateNumB string `json:"plate_num_b"` + Record string `json:"record"` + PassengersNum string `json:"passengers_num"` + TotalQuality string `json:"total_quality"` + TotalprepareQualityQuality string `json:"totalprepare_quality_quality"` +} + +// VehicleLicenseByURL 行驶证 OCR 识别 +func VehicleLicenseByURL(token, cardURL string, mode RecognizeMode) (*VehicleLicenseResponse, error) { + api := baseURL + apiVehicleLicense + return vehicleLicenseByURL(api, token, cardURL, mode) +} + +func vehicleLicenseByURL(api, token, cardURL string, mode RecognizeMode) (*VehicleLicenseResponse, error) { + res := new(VehicleLicenseResponse) + err := ocrByURL(api, token, cardURL, mode, res) + if err != nil { + return nil, err + } + + return res, nil +} + +// VehicleLicense 通过文件识别行驶证 +func VehicleLicense(token, filename string, mode RecognizeMode) (*VehicleLicenseResponse, error) { + api := baseURL + apiVehicleLicense + return vehicleLicense(api, token, filename, mode) +} + +func vehicleLicense(api, token, filename string, mode RecognizeMode) (*VehicleLicenseResponse, error) { + res := new(VehicleLicenseResponse) + err := ocrByFile(api, token, filename, mode, res) + if err != nil { + return nil, err + } + + return res, err +} + +// LicensePoint 证件点 +type LicensePoint struct { + X uint `json:"x"` + Y uint `json:"y"` +} + +// LicensePosition 证件位置 +type LicensePosition struct { + LeftTop LicensePoint `json:"left_top"` + RightTop LicensePoint `json:"right_top"` + RightBottom LicensePoint `json:"right_bottom"` + LeftBottom LicensePoint `json:"left_bottom"` +} + +// BusinessLicenseResponse 营业执照 OCR 识别返回数据 +type BusinessLicenseResponse struct { + CommonError + RegNum string `json:"reg_num"` // 注册号 + Serial string `json:"serial"` // 编号 + LegalRepresentative string `json:"legal_representative"` // 法定代表人姓名 + EnterpriseName string `json:"enterprise_name"` // 企业名称 + TypeOfOrganization string `json:"type_of_organization"` // 组成形式 + Address string `json:"address"` // 经营场所/企业住所 + TypeOfEnterprise string `json:"type_of_enterprise"` // 公司类型 + BusinessScope string `json:"business_scope"` // 经营范围 + RegisteredCapital string `json:"registered_capital"` // 注册资本 + PaidInCapital string `json:"paid_in_capital"` // 实收资本 + ValidPeriod string `json:"valid_period"` // 营业期限 + RegisteredDate string `json:"registered_date"` // 注册日期/成立日期 + CertPosition struct { + Position LicensePosition `json:"pos"` + } `json:"cert_position"` // 营业执照位置 + ImgSize LicensePoint `json:"img_size"` // 图片大小 +} + +// BusinessLicenseByURL 通过链接进行营业执照 OCR 识别 +func BusinessLicenseByURL(token, cardURL string) (*BusinessLicenseResponse, error) { + api := baseURL + apiBusinessLicense + return businessLicenseByURL(api, token, cardURL) +} + +func businessLicenseByURL(api, token, cardURL string) (*BusinessLicenseResponse, error) { + res := new(BusinessLicenseResponse) + err := ocrByURL(api, token, cardURL, "", res) + if err != nil { + return nil, err + } + + return res, nil +} + +// BusinessLicense 通过文件进行营业执照 OCR 识别 +func BusinessLicense(token, filename string) (*BusinessLicenseResponse, error) { + api := baseURL + apiBusinessLicense + return businessLicense(api, token, filename) +} + +func businessLicense(api, token, filename string) (*BusinessLicenseResponse, error) { + res := new(BusinessLicenseResponse) + err := ocrByFile(api, token, filename, "", res) + if err != nil { + return nil, err + } + + return res, err +} + +// PrintedTextResponse 通用印刷体 OCR 识别返回数据 +type PrintedTextResponse struct { + CommonError + Items []struct { + Text string `json:"text"` + Position LicensePosition `json:"pos"` + } `json:"items"` // 识别结果 + ImgSize LicensePoint `json:"img_size"` // 图片大小 +} + +// PrintedTextByURL 通过链接进行通用印刷体 OCR 识别 +func PrintedTextByURL(token, cardURL string) (*PrintedTextResponse, error) { + api := baseURL + apiPrintedText + return printedTextByURL(api, token, cardURL) +} + +func printedTextByURL(api, token, cardURL string) (*PrintedTextResponse, error) { + res := new(PrintedTextResponse) + err := ocrByURL(api, token, cardURL, "", res) + if err != nil { + return nil, err + } + + return res, nil +} + +// PrintedText 通过文件进行通用印刷体 OCR 识别 +func PrintedText(token, filename string) (*PrintedTextResponse, error) { + api := baseURL + apiPrintedText + return printedText(api, token, filename) +} + +func printedText(api, token, filename string) (*PrintedTextResponse, error) { + res := new(PrintedTextResponse) + err := ocrByFile(api, token, filename, "", res) + if err != nil { + return nil, err + } + + return res, err +} + +func ocrByFile(api, token, filename string, mode RecognizeMode, response interface{}) error { + queries := requestQueries{ + "access_token": token, + "type": mode, + } + + url, err := encodeURL(api, queries) + if err != nil { + return err + } + + if err := postFormByFile(url, "img", filename, response); err != nil { + return err + } + + return nil +} + +func ocrByURL(api, token, cardURL string, mode RecognizeMode, response interface{}) error { + queries := requestQueries{ + "access_token": token, + "img_url": cardURL, + } + + if mode != "" { + queries["type"] = mode + } + + url, err := encodeURL(api, queries) + if err != nil { + return err + } + + if err := postJSON(url, nil, response); err != nil { + return err + } + + return nil +} diff --git a/app/lib/weapp/ocr_test.go b/app/lib/weapp/ocr_test.go new file mode 100644 index 0000000..4fdac9a --- /dev/null +++ b/app/lib/weapp/ocr_test.go @@ -0,0 +1,894 @@ +package weapp + +import ( + "fmt" + "io" + "net/http" + "net/http/httptest" + "os" + "path" + "testing" +) + +func TestBankCardByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc(apiBankcard, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiBankcard { + t.Fatalf("Except to path '%s',get '%s'", apiBankcard, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"type", "access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "id": "622213XXXXXXXXX" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := bankCardByURL(ts.URL+apiBankcard, "mock-access-token", ts.URL+"/mediaurl", RecognizeModePhoto) + if err != nil { + t.Fatal(err) + } + + _, err = bankCardByURL(ts.URL+apiBankcard, "mock-access-token", ts.URL+"/mediaurl", RecognizeModeScan) + if err != nil { + t.Fatal(err) + } +} + +func TestBankCard(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiBankcard { + t.Fatalf("Except to path '%s',get '%s'", apiBankcard, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"type", "access_token"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "id": "622213XXXXXXXXX" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := bankCard(ts.URL+apiBankcard, "mock-access-token", testIMGName, RecognizeModePhoto) + if err != nil { + t.Fatal(err) + } + _, err = bankCard(ts.URL+apiBankcard, "mock-access-token", testIMGName, RecognizeModeScan) + if err != nil { + t.Fatal(err) + } +} + +func TestDriverLicenseByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc(apiDrivingLicense, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiDrivingLicense { + t.Fatalf("Except to path '%s',get '%s'", apiDrivingLicense, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "id_num": "660601xxxxxxxx1234", + "name": "张三", + "sex": "男", + "nationality": "中国", + "address": "广东省东莞市xxxxx号", + "birth_date": "1990-12-21", + "issue_date": "2012-12-21", + "car_class": "C1", + "valid_from": "2018-07-06", + "valid_to": "2020-07-01", + "official_seal": "xx市公安局公安交通管理局" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := driverLicenseByURL(ts.URL+apiDrivingLicense, "mock-access-token", ts.URL+"/mediaurl") + if err != nil { + t.Fatal(err) + } +} + +func TestDriverLicense(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiDrivingLicense { + t.Fatalf("Except to path '%s',get '%s'", apiDrivingLicense, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "id_num": "660601xxxxxxxx1234", + "name": "张三", + "sex": "男", + "nationality": "中国", + "address": "广东省东莞市xxxxx号", + "birth_date": "1990-12-21", + "issue_date": "2012-12-21", + "car_class": "C1", + "valid_from": "2018-07-06", + "valid_to": "2020-07-01", + "official_seal": "xx市公安局公安交通管理局" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := driverLicense(ts.URL+apiDrivingLicense, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestBusinessLicenseByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc("/cv/ocr/bizlicense", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + if r.URL.EscapedPath() != "/cv/ocr/bizlicense" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "reg_num": "123123", + "serial": "123123", + "legal_representative": "张三", + "enterprise_name": "XX饮食店", + "type_of_organization": "个人经营", + "address": "XX市XX区XX路XX号", + "type_of_enterprise": "xxx", + "business_scope": "中型餐馆(不含凉菜、不含裱花蛋糕,不含生食海产品)。", + "registered_capital": "200万", + "paid_in_capital": "200万", + "valid_period": "2019年1月1日", + "registered_date": "2018年1月1日", + "cert_position": { + "pos": { + "left_top": { + "x": 155, + "y": 191 + }, + "right_top": { + "x": 725, + "y": 157 + }, + "right_bottom": { + "x": 743, + "y": 512 + }, + "left_bottom": { + "x": 164, + "y": 525 + } + } + }, + "img_size": { + "w": 966, + "h": 728 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := businessLicenseByURL(ts.URL+apiBusinessLicense, "mock-access-token", ts.URL+"/mediaurl") + if err != nil { + t.Fatal(err) + } +} + +func TestBusinessLicense(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + if r.URL.EscapedPath() != "/cv/ocr/bizlicense" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "reg_num": "123123", + "serial": "123123", + "legal_representative": "张三", + "enterprise_name": "XX饮食店", + "type_of_organization": "个人经营", + "address": "XX市XX区XX路XX号", + "type_of_enterprise": "xxx", + "business_scope": "中型餐馆(不含凉菜、不含裱花蛋糕,不含生食海产品)。", + "registered_capital": "200万", + "paid_in_capital": "200万", + "valid_period": "2019年1月1日", + "registered_date": "2018年1月1日", + "cert_position": { + "pos": { + "left_top": { + "x": 155, + "y": 191 + }, + "right_top": { + "x": 725, + "y": 157 + }, + "right_bottom": { + "x": 743, + "y": 512 + }, + "left_bottom": { + "x": 164, + "y": 525 + } + } + }, + "img_size": { + "w": 966, + "h": 728 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := businessLicense(ts.URL+apiBusinessLicense, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestPrintedTextByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc("/cv/ocr/comm", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + if r.URL.EscapedPath() != "/cv/ocr/comm" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "items": [ + { + "text": "腾讯", + "pos": { + "left_top": { + "x": 575, + "y": 519 + }, + "right_top": { + "x": 744, + "y": 519 + }, + "right_bottom": { + "x": 744, + "y": 532 + }, + "left_bottom": { + "x": 573, + "y": 532 + } + } + }, + { + "text": "微信团队", + "pos": { + "left_top": { + "x": 670, + "y": 516 + }, + "right_top": { + "x": 762, + "y": 517 + }, + "right_bottom": { + "x": 762, + "y": 532 + }, + "left_bottom": { + "x": 670, + "y": 531 + } + } + } + ], + "img_size": { + "w": 1280, + "h": 720 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := printedTextByURL(ts.URL+apiPrintedText, "mock-access-token", ts.URL+"/mediaurl") + if err != nil { + t.Fatal(err) + } +} + +func TestPrintedText(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + if r.URL.EscapedPath() != "/cv/ocr/comm" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "items": [ + { + "text": "腾讯", + "pos": { + "left_top": { + "x": 575, + "y": 519 + }, + "right_top": { + "x": 744, + "y": 519 + }, + "right_bottom": { + "x": 744, + "y": 532 + }, + "left_bottom": { + "x": 573, + "y": 532 + } + } + }, + { + "text": "微信团队", + "pos": { + "left_top": { + "x": 670, + "y": 516 + }, + "right_top": { + "x": 762, + "y": 517 + }, + "right_bottom": { + "x": 762, + "y": 532 + }, + "left_bottom": { + "x": 670, + "y": 531 + } + } + } + ], + "img_size": { + "w": 1280, + "h": 720 + } + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := printedText(ts.URL+apiPrintedText, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestIDCardByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc(apiIDCard, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiIDCard { + t.Fatalf("Except to path '%s',get '%s'", apiIDCard, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"type", "access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "type": "Front", + "id": "44XXXXXXXXXXXXXXX1" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := idCardByURL(ts.URL+apiIDCard, "mock-access-token", ts.URL+"/mediaurl", RecognizeModePhoto) + if err != nil { + t.Fatal(err) + } + + _, err = idCardByURL(ts.URL+apiIDCard, "mock-access-token", ts.URL+"/mediaurl", RecognizeModeScan) + if err != nil { + t.Fatal(err) + } +} + +func TestIDCard(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiIDCard { + t.Fatalf("Except to path '%s',get '%s'", apiIDCard, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + queries := []string{"type", "access_token"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok", + "type": "Front", + "id": "44XXXXXXXXXXXXXXX1" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := idCard(ts.URL+apiIDCard, "mock-access-token", testIMGName, RecognizeModePhoto) + if err != nil { + t.Fatal(err) + } + _, err = idCard(ts.URL+apiIDCard, "mock-access-token", testIMGName, RecognizeModeScan) + if err != nil { + t.Fatal(err) + } +} + +func TestVehicleLicenseByURL(t *testing.T) { + server := http.NewServeMux() + server.HandleFunc(apiVehicleLicense, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiVehicleLicense { + t.Fatalf("Except to path '%s',get '%s'", apiVehicleLicense, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + queries := []string{"type", "access_token", "img_url"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "vhicle_type": "小型普通客⻋", + "owner": "东莞市xxxxx机械厂", + "addr": "广东省东莞市xxxxx号", + "use_character": "非营运", + "model": "江淮牌HFCxxxxxxx", + "vin": "LJ166xxxxxxxx51", + "engine_num": "J3xxxxx3", + "register_date": "2018-07-06", + "issue_date": "2018-07-01", + "plate_num_b": "粤xxxxx", + "record": "441xxxxxx3", + "passengers_num": "7人", + "total_quality": "2700kg", + "prepare_quality": "1995kg" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + }) + + server.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + ts := httptest.NewServer(server) + defer ts.Close() + + _, err := vehicleLicenseByURL(ts.URL+apiVehicleLicense, "mock-access-token", ts.URL+"/mediaurl", RecognizeModePhoto) + if err != nil { + t.Fatal(err) + } + + _, err = vehicleLicenseByURL(ts.URL+apiVehicleLicense, "mock-access-token", ts.URL+"/mediaurl", RecognizeModeScan) + if err != nil { + t.Fatal(err) + } +} + +func TestVehicleLicense(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiVehicleLicense { + t.Fatalf("Except to path '%s',get '%s'", apiVehicleLicense, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + queries := []string{"type", "access_token"} + for _, v := range queries { + content := r.Form.Get(v) + if content == "" { + t.Fatalf("Params [%s] can not be empty", v) + } + } + + if _, _, err := r.FormFile("img"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "vhicle_type": "小型普通客⻋", + "owner": "东莞市xxxxx机械厂", + "addr": "广东省东莞市xxxxx号", + "use_character": "非营运", + "model": "江淮牌HFCxxxxxxx", + "vin": "LJ166xxxxxxxx51", + "engine_num": "J3xxxxx3", + "register_date": "2018-07-06", + "issue_date": "2018-07-01", + "plate_num_b": "粤xxxxx", + "record": "441xxxxxx3", + "passengers_num": "7人", + "total_quality": "2700kg", + "prepare_quality": "1995kg" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := vehicleLicense(ts.URL+apiVehicleLicense, "mock-access-token", testIMGName, RecognizeModePhoto) + if err != nil { + t.Fatal(err) + } + _, err = vehicleLicense(ts.URL+apiVehicleLicense, "mock-access-token", testIMGName, RecognizeModeScan) + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/plugin.go b/app/lib/weapp/plugin.go new file mode 100644 index 0000000..0769e44 --- /dev/null +++ b/app/lib/weapp/plugin.go @@ -0,0 +1,189 @@ +package weapp + +const ( + apiPlugin = "/wxa/plugin" + apiDevPlugin = "/wxa/devplugin" +) + +// ApplyPlugin 向插件开发者发起使用插件的申请 +// accessToken 接口调用凭证 +// action string 是 此接口下填写 "apply" +// appID string 是 插件 appId +// reason string 否 申请使用理由 +func ApplyPlugin(token, appID, reason string) (*CommonError, error) { + api := baseURL + apiPlugin + return applyPlugin(api, token, appID, reason) +} + +func applyPlugin(api, token, appID, reason string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "action": "apply", + "plugin_appid": appID, + } + + if reason != "" { + params["reason"] = reason + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetPluginDevApplyListResponse 查询已添加的插件返回数据 +type GetPluginDevApplyListResponse struct { + CommonError + ApplyList []struct { + AppID string `json:"appid"` // 插件 appId + Status uint8 `json:"status"` // 插件状态 + Nickname string `json:"nickname"` // 插件昵称 + HeadImgURL string `json:"headimgurl"` // 插件头像 + Categories []struct { + First string `json:"first"` + Second string `json:"second"` + } `json:"categories"` // 使用者的类目 + CreateTime string `json:"create_time"` // 使用者的申请时间 + ApplyURL string `json:"apply_url"` // 使用者的小程序码 + Reason string `json:"reason"` // 使用者的申请说明 + } `json:"apply_list"` // 申请或使用中的插件列表 +} + +// GetPluginDevApplyList 获取当前所有插件使用方 +// accessToken 接口调用凭证 +// page number 是 要拉取第几页的数据 +// num 是 每页的记录数 +func GetPluginDevApplyList(token string, page, num uint) (*GetPluginDevApplyListResponse, error) { + api := baseURL + apiDevPlugin + return getPluginDevApplyList(api, token, page, num) +} + +func getPluginDevApplyList(api, token string, page, num uint) (*GetPluginDevApplyListResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "num": num, + "page": page, + "action": "dev_apply_list", + } + + res := new(GetPluginDevApplyListResponse) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetPluginListResponse 查询已添加的插件返回数据 +type GetPluginListResponse struct { + CommonError + PluginList []struct { + AppID string `json:"appid"` // 插件 appId + Status int8 `json:"status"` // 插件状态 + Nickname string `json:"nickname"` // 插件昵称 + HeadImgURL string `json:"headimgurl"` // 插件头像 + } `json:"plugin_list"` // 申请或使用中的插件列表 +} + +// GetPluginList 查询已添加的插件 +// accessToken 接口调用凭证 +func GetPluginList(token string) (*GetPluginListResponse, error) { + api := baseURL + apiPlugin + return getPluginList(api, token) +} + +func getPluginList(api, token string) (*GetPluginListResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "action": "list", + } + + res := new(GetPluginListResponse) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// DevAction 修改操作 +type DevAction string + +// 所有修改操作 +const ( + DevAgree DevAction = "dev_agree" // 同意申请 + DevRefuse DevAction = "dev_refuse" // 拒绝申请 + DevDelete DevAction = "dev_refuse" // 删除已拒绝的申请者 +) + +// SetDevPluginApplyStatus 修改插件使用申请的状态 +// accessToken 接口调用凭证 +// appID 使用者的 appid。同意申请时填写。 +// reason 拒绝理由。拒绝申请时填写。 +// action 修改操作 +func SetDevPluginApplyStatus(token, appID, reason string, action DevAction) (*CommonError, error) { + api := baseURL + apiDevPlugin + return setDevPluginApplyStatus(api, token, appID, reason, action) +} + +func setDevPluginApplyStatus(api, token, appID, reason string, action DevAction) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "action": action, + "appid": appID, + "reason": reason, + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// UnbindPlugin 查询已添加的插件 +// accessToken 接口调用凭证 +// appID 插件 appId +func UnbindPlugin(token, appID string) (*CommonError, error) { + api := baseURL + apiPlugin + return unbindPlugin(api, token, appID) +} + +func unbindPlugin(api, token, appID string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "action": "unbind", + "plugin_appid": appID, + } + + res := new(CommonError) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/plugin_test.go b/app/lib/weapp/plugin_test.go new file mode 100644 index 0000000..9ecdbdb --- /dev/null +++ b/app/lib/weapp/plugin_test.go @@ -0,0 +1,300 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestApplyPlugin(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiPlugin { + t.Fatalf("Except to path '%s',get '%s'", apiPlugin, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Action string `json:"action"` + PluginAppID string `json:"plugin_appid"` + Reason string `json:"reason"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Action != "apply" { + t.Error("Unexpected action") + } + + if params.PluginAppID == "" { + t.Error("Response column plugin_appid can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := applyPlugin(ts.URL+apiPlugin, "mock-access-token", "plugin-app-id", "mock-reason") + if err != nil { + t.Fatal(err) + } +} + +func TestGetPluginDevApplyList(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiDevPlugin { + t.Fatalf("Except to path '%s',get '%s'", apiDevPlugin, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Action string `json:"action"` + Page uint `json:"page"` + Number uint `json:"num"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Action != "dev_apply_list" { + t.Error("Unexpected action") + } + + if params.Page == 0 { + t.Error("Response column page can not be zero") + } + + if params.Number == 0 { + t.Error("Response column num can not be zero") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok", + "apply_list": [{ + "appid": "xxxxxxxxxxxxx", + "status": 1, + "nickname": "名称", + "headimgurl": "**********", + "reason": "polo has gone", + "apply_url": "*******", + "create_time": "1536305096", + "categories": [{ + "first": "IT科技", + "second": "硬件与设备" + }] + }] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getPluginDevApplyList(ts.URL+apiDevPlugin, "mock-access-token", 1, 2) + if err != nil { + t.Fatal(err) + } +} + +func TestGetPluginList(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiPlugin { + t.Fatalf("Except to path '%s',get '%s'", apiPlugin, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Action string `json:"action"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Action != "list" { + t.Error("Unexpected action") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok", + "plugin_list": [{ + "appid": "aaaa", + "status": 1, + "nickname": "插件昵称", + "headimgurl": "http://plugin.qq.com" + }] + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := getPluginList(ts.URL+apiPlugin, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} + +func TestSetDevPluginApplyStatus(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiDevPlugin { + t.Fatalf("Except to path '%s',get '%s'", apiDevPlugin, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Action string `json:"action"` + AppID string `json:"appid"` + Reason string `json:"reason"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Action == "" { + t.Error("Response column action can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := setDevPluginApplyStatus(ts.URL+apiDevPlugin, "mock-access-token", "mock-plugin-app-id", "mock-reason", DevAgree) + if err != nil { + t.Fatal(err) + } +} + +func TestUnbindPlugin(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiPlugin { + t.Fatalf("Except to path '%s',get '%s'", apiPlugin, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Action string `json:"action"` + PluginAppID string `json:"plugin_appid"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Action != "unbind" { + t.Error("Unexpected action") + } + + if params.PluginAppID == "" { + t.Error("Response column plugin_appid can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := unbindPlugin(ts.URL+apiPlugin, "mock-access-token", "mock-plugin-app-id") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/qr_code.go b/app/lib/weapp/qr_code.go new file mode 100644 index 0000000..09e5d5f --- /dev/null +++ b/app/lib/weapp/qr_code.go @@ -0,0 +1,118 @@ +package weapp + +import ( + "encoding/json" + "errors" + "net/http" + "strings" +) + +const ( + apiGetQrCode = "/wxa/getwxacode" + apiGetUnlimitedQRCode = "/wxa/getwxacodeunlimit" + apiCreateQRCode = "/cgi-bin/wxaapp/createwxaqrcode" +) + +// Color QRCode color +type Color struct { + R string `json:"r"` + G string `json:"g"` + B string `json:"b"` +} + +// QRCode 小程序码参数 +type QRCode struct { + Path string `json:"path"` + Width int `json:"width,omitempty"` + AutoColor bool `json:"auto_color,omitempty"` + LineColor Color `json:"line_color,omitempty"` + IsHyaline bool `json:"is_hyaline,omitempty"` +} + +// Get 获取小程序码 +// 可接受path参数较长 生成个数受限 永久有效 适用于需要的码数量较少的业务场景 +// +// token 微信access_token +func (code *QRCode) Get(token string) (*http.Response, *CommonError, error) { + api := baseURL + apiGetQrCode + return code.get(api, token) +} + +func (code *QRCode) get(api, token string) (*http.Response, *CommonError, error) { + return qrCodeRequest(api, token, code) +} + +// UnlimitedQRCode 小程序码参数 +type UnlimitedQRCode struct { + Scene string `json:"scene"` + Page string `json:"page,omitempty"` + Width int `json:"width,omitempty"` + AutoColor bool `json:"auto_color,omitempty"` + LineColor Color `json:"line_color,omitempty"` + IsHyaline bool `json:"is_hyaline,omitempty"` +} + +// Get 获取小程序码 +// 可接受页面参数较短 生成个数不受限 适用于需要的码数量极多的业务场景 +// 根路径前不要填加'/' 不能携带参数(参数请放在scene字段里) +// +// token 微信access_token +func (code *UnlimitedQRCode) Get(token string) (*http.Response, *CommonError, error) { + api := baseURL + apiGetUnlimitedQRCode + return code.get(api, token) +} + +func (code *UnlimitedQRCode) get(api, token string) (*http.Response, *CommonError, error) { + return qrCodeRequest(api, token, code) +} + +// QRCodeCreator 二维码创建器 +type QRCodeCreator struct { + Path string `json:"path"` // 扫码进入的小程序页面路径,最大长度 128 字节,不能为空;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:"bar"}。 + Width int `json:"width,omitempty"` // 二维码的宽度,单位 px。最小 280px,最大 1280px +} + +// Create 获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制 +// 通过该接口生成的小程序码,永久有效,有数量限制 +// +// token 微信access_token +func (creator *QRCodeCreator) Create(token string) (*http.Response, *CommonError, error) { + api := baseURL + apiCreateQRCode + return creator.create(api, token) +} + +func (creator *QRCodeCreator) create(api, token string) (*http.Response, *CommonError, error) { + return qrCodeRequest(api, token, creator) +} + +// 向微信服务器获取二维码 +// 返回 HTTP 请求实例 +func qrCodeRequest(api, token string, params interface{}) (*http.Response, *CommonError, error) { + + url, err := tokenAPI(api, token) + if err != nil { + return nil, nil, err + } + + res, err := postJSONWithBody(url, params) + if err != nil { + return nil, nil, err + } + + response := new(CommonError) + switch header := res.Header.Get("Content-Type"); { + case strings.HasPrefix(header, "application/json"): // 返回错误信息 + if err := json.NewDecoder(res.Body).Decode(response); err != nil { + res.Body.Close() + return nil, nil, err + } + return res, response, nil + + case strings.HasPrefix(header, "image"): // 返回文件 + return res, response, nil + + default: + res.Body.Close() + return nil, nil, errors.New("invalid response header: " + header) + } +} diff --git a/app/lib/weapp/qr_code_test.go b/app/lib/weapp/qr_code_test.go new file mode 100644 index 0000000..df68e93 --- /dev/null +++ b/app/lib/weapp/qr_code_test.go @@ -0,0 +1,212 @@ +package weapp + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "os" + "path" + "testing" +) + +func TestCreateQRCode(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + ePath := r.URL.EscapedPath() + if ePath != apiCreateQRCode { + t.Fatalf("Except to path '%s',get '%s'", apiCreateQRCode, ePath) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Path string `json:"path"` + Width int `json:"width,omitempty"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Path == "" { + t.Error("Response column path can not be empty") + } + + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + creator := QRCodeCreator{ + Path: "mock/path", + Width: 430, + } + resp, _, err := creator.create(ts.URL+apiCreateQRCode, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + resp.Body.Close() +} + +func TestGetQRCode(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + ePath := r.URL.EscapedPath() + if ePath != apiGetQrCode { + t.Fatalf("Except to path '%s',get '%s'", apiGetQrCode, ePath) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Path string `json:"path"` + Width int `json:"width,omitempty"` + AutoColor bool `json:"auto_color,omitempty"` + LineColor Color `json:"line_color,omitempty"` + IsHyaline bool `json:"is_hyaline,omitempty"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Path == "" { + t.Error("Response column path can not be empty") + } + + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + qr := QRCode{ + Path: "mock/path", + Width: 430, + AutoColor: true, + LineColor: Color{"r", "g", "b"}, + IsHyaline: true, + } + resp, _, err := qr.get(ts.URL+apiGetQrCode, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + resp.Body.Close() +} + +func TestGetUnlimitedQRCode(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + ePath := r.URL.EscapedPath() + if ePath != apiGetUnlimitedQRCode { + t.Fatalf("Except to path '%s',get '%s'", apiGetUnlimitedQRCode, ePath) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Scene string `json:"scene"` + Page string `json:"page,omitempty"` + Width int `json:"width,omitempty"` + AutoColor bool `json:"auto_color,omitempty"` + LineColor Color `json:"line_color,omitempty"` + IsHyaline bool `json:"is_hyaline,omitempty"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Scene == "" { + t.Error("Response column scene can not be empty") + } + + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + qr := UnlimitedQRCode{ + Scene: "mock-scene-data", + Page: "mock/page", + Width: 430, + AutoColor: true, + LineColor: Color{"r", "g", "b"}, + IsHyaline: true, + } + resp, _, err := qr.get(ts.URL+apiGetUnlimitedQRCode, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + resp.Body.Close() +} diff --git a/app/lib/weapp/search_submit_pages.go b/app/lib/weapp/search_submit_pages.go new file mode 100644 index 0000000..08770de --- /dev/null +++ b/app/lib/weapp/search_submit_pages.go @@ -0,0 +1,35 @@ +package weapp + +const ( + apiSearchSubmitPages = "/wxa/search/wxaapi_submitpages" +) + +// SearchSubmitPages 小程序页面收录请求 +type SearchSubmitPages struct { + Pages []SearchSubmitPage `json:"pages"` +} + +// SearchSubmitPage 请求收录的页面 +type SearchSubmitPage struct { + Path string `json:"path"` + Query string `json:"query"` +} + +// Send 提交收录请求 +func (s *SearchSubmitPages) Send(token string) (*CommonError, error) { + return s.send(baseURL+apiSearchSubmitPages, token) +} + +func (s *SearchSubmitPages) send(api, token string) (*CommonError, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(api, s, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/search_submit_pages_test.go b/app/lib/weapp/search_submit_pages_test.go new file mode 100644 index 0000000..00e1a62 --- /dev/null +++ b/app/lib/weapp/search_submit_pages_test.go @@ -0,0 +1,69 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestSearchSubmitPages(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSearchSubmitPages { + t.Fatalf("Except to path '%s',get '%s'", apiSearchSubmitPages, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Pages []struct { + Path string `json:"path"` + Query string `json:"query"` + } `json:"pages"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if len(params.Pages) != 1 { + t.Fatal("param pages can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + sender := SearchSubmitPages{ + []SearchSubmitPage{ + { + Path: "/pages/index/index", + Query: "id=test", + }, + }, + } + + _, err := sender.send(ts.URL+apiSearchSubmitPages, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/sec_check.go b/app/lib/weapp/sec_check.go new file mode 100644 index 0000000..a46f892 --- /dev/null +++ b/app/lib/weapp/sec_check.go @@ -0,0 +1,105 @@ +package weapp + +// 检测地址 +const ( + apiIMGSecCheck = "/wxa/img_sec_check" + apiMSGSecCheck = "/wxa/msg_sec_check" + apiMediaCheckAsync = "/wxa/media_check_async" +) + +// IMGSecCheck 本地图片检测 +// 官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/imgSecCheck.html +// +// filename 要检测的图片本地路径 +// token 接口调用凭证(access_token) +func IMGSecCheck(token, filename string) (*CommonError, error) { + api := baseURL + apiIMGSecCheck + return imgSecCheck(api, token, filename) +} + +func imgSecCheck(api, token, filename string) (*CommonError, error) { + + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postFormByFile(url, "media", filename, res); err != nil { + return nil, err + } + + return res, nil +} + +// MSGSecCheck 文本检测 +// 官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/msgSecCheck.html +// +// content 要检测的文本内容,长度不超过 500KB,编码格式为utf-8 +// token 接口调用凭证(access_token) +func MSGSecCheck(token, content string) (*CommonError, error) { + api := baseURL + apiMSGSecCheck + return msgSecCheck(api, token, content) +} + +func msgSecCheck(api, token, content string) (*CommonError, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "content": content, + } + + res := new(CommonError) + if err = postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} + +// MediaType 检测内容类型 +type MediaType = uint8 + +// 所有检测内容类型 +const ( + _ MediaType = iota + MediaTypeAudio // 音频 + MediaTypeImage // 图片 +) + +// CheckMediaResponse 异步校验图片/音频返回数据 +type CheckMediaResponse struct { + CommonError + TraceID string `json:"trace_id"` +} + +// MediaCheckAsync 异步校验图片/音频是否含有违法违规内容。 +// +// mediaURL 要检测的多媒体url +// mediaType 接口调用凭证(access_token) +func MediaCheckAsync(token, mediaURL string, mediaType MediaType) (*CheckMediaResponse, error) { + api := baseURL + apiMediaCheckAsync + return mediaCheckAsync(api, token, mediaURL, mediaType) +} + +func mediaCheckAsync(api, token, mediaURL string, mediaType MediaType) (*CheckMediaResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "media_url": mediaURL, + "media_type": mediaType, + } + + res := new(CheckMediaResponse) + if err = postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/sec_check_test.go b/app/lib/weapp/sec_check_test.go new file mode 100644 index 0000000..72f5de1 --- /dev/null +++ b/app/lib/weapp/sec_check_test.go @@ -0,0 +1,240 @@ +package weapp + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "os" + "path" + "strings" + "testing" +) + +func TestIMGSecCheck(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiIMGSecCheck { + t.Fatalf("Except to path '%s',get '%s'", apiIMGSecCheck, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + if _, _, err := r.FormFile("media"); err != nil { + t.Fatal(err) + + } + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", "application/json") + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := imgSecCheck(ts.URL+apiIMGSecCheck, "mock-access-token", testIMGName) + if err != nil { + t.Fatal(err) + } +} + +func TestMediaCheckAsync(t *testing.T) { + + localServer := http.NewServeMux() + localServer.HandleFunc("/notify", func(w http.ResponseWriter, r *http.Request) { + aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key")) + srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false) + if err != nil { + t.Fatal(err) + } + + srv.OnMediaCheckAsync(func(mix *MediaCheckAsyncResult) { + if mix.ToUserName == "" { + t.Error("ToUserName can not be empty") + } + + if mix.FromUserName == "" { + t.Error("FromUserName can not be empty") + } + if mix.CreateTime == 0 { + t.Error("CreateTime can not be empty") + } + if mix.MsgType != "event" { + t.Error("Unexpected message type") + } + if mix.Event != "wxa_media_check" { + t.Error("Unexpected message event") + } + if mix.AppID == "" { + t.Error("AppID can not be empty") + } + if mix.TraceID == "" { + t.Error("TraceID can not be empty") + } + + }) + + if err := srv.Serve(w, r); err != nil { + t.Fatal(err) + } + }) + + tls := httptest.NewServer(localServer) + defer tls.Close() + + remoteServer := http.NewServeMux() + remoteServer.HandleFunc(apiMediaCheckAsync, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiMediaCheckAsync { + t.Fatalf("Except to path '%s',get '%s'", apiMediaCheckAsync, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + MediaURL string `json:"media_url"` + MediaType uint8 `json:"media_type"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.MediaURL == "" { + t.Error("Response column media_url can not be empty") + } + + if params.MediaType == 0 { + t.Error("Response column media_type can not be zero") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode" : 0, + "errmsg" : "ok", + "trace_id" : "967e945cd8a3e458f3c74dcb886068e9" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + + raw = `{ + "ToUserName" : "gh_38cc49f9733b", + "FromUserName" : "oH1fu0FdHqpToe2T6gBj0WyB8iS1", + "CreateTime" : 1552465698, + "MsgType" : "event", + "Event" : "wxa_media_check", + "isrisky" : 0, + "extra_info_json" : "", + "appid" : "wxd8c59133dfcbfc71", + "trace_id" : "967e945cd8a3e458f3c74dcb886068e9", + "status_code" : 0 + }` + reader := strings.NewReader(raw) + http.Post(tls.URL+"/notify", "application/json", reader) + }) + + remoteServer.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) { + filename := testIMGName + file, err := os.Open(filename) + if err != nil { + t.Fatal((err)) + } + defer file.Close() + + ext := path.Ext(filename) + ext = ext[1:len(ext)] + w.Header().Set("Content-Type", "image/"+ext) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename))) + w.WriteHeader(http.StatusOK) + + if _, err := io.Copy(w, file); err != nil { + t.Fatal(err) + } + }) + + trs := httptest.NewServer(remoteServer) + defer trs.Close() + + _, err := mediaCheckAsync(trs.URL+apiMediaCheckAsync, "mock-access-token", trs.URL+"/mediaurl", MediaTypeImage) + if err != nil { + t.Fatal(err) + } +} + +func TestMSGSecCheck(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != "/wxa/img_sec_check" { + t.Error("Invalid request path") + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + Content string `json:"content"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.Content == "" { + t.Error("Response column content can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := msgSecCheck(ts.URL+apiIMGSecCheck, "mock-access-token", "mock-content") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/server.go b/app/lib/weapp/server.go new file mode 100644 index 0000000..fd458bf --- /dev/null +++ b/app/lib/weapp/server.go @@ -0,0 +1,677 @@ +package weapp + +import ( + "encoding/base64" + "encoding/binary" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "reflect" + "strconv" + "strings" + "time" +) + +// MsgType 消息类型 +type MsgType = string + +// 所有消息类型 +const ( + MsgText MsgType = "text" // 文本消息类型 + MsgImg = "image" // 图片消息类型 + MsgCard = "miniprogrampage" // 小程序卡片消息类型 + MsgEvent = "event" // 事件类型 + MsgTrans = "transfer_customer_service" // 转发客服消息 +) + +// EventType 事件类型 +type EventType string + +// 所有事件类型 +const ( + EventQuotaGet EventType = "get_quota" // 查询商户余额 + EventCheckBusiness = "check_biz" // 取消订单事件 + EventMediaCheckAsync = "wxa_media_check" // 异步校验图片/音频 + EventAddExpressOrder = "add_waybill" // 请求下单事件 + EventExpressPathUpdate = "add_express_path" // 运单轨迹更新事件 + EventExpressOrderCancel = "cancel_waybill" // 审核商户事件 + EventUserTempsessionEnter = "user_enter_tempsession" // 用户进入临时会话状态 + EventNearbyPoiAuditInfoAdd = "add_nearby_poi_audit_info" // 附近小程序添加地点审核状态通知 + EventDeliveryOrderStatusUpdate = "update_waybill_status" // 配送单配送状态更新通知 + EventAgentPosQuery = "transport_get_agent_pos" // 查询骑手当前位置信息 + EventAuthInfoGet = "get_auth_info" // 使用授权码拉取授权信息 + EventAuthAccountCancel = "cancel_auth_account" // 取消授权帐号 + EventDeliveryOrderAdd = "transport_add_order" // 真实发起下单任务 + EventDeliveryOrderTipsAdd = "transport_add_tips" // 对待接单状态的订单增加小费 + EventDeliveryOrderCancel = "transport_cancel_order" // 取消订单操作 + EventDeliveryOrderReturnConfirm = "transport_confirm_return_to_biz" // 异常妥投商户收货确认 + EventDeliveryOrderPreAdd = "transport_precreate_order" // 预下单 + EventDeliveryOrderPreCancel = "transport_precancel_order" // 预取消订单 + EventDeliveryOrderQuery = "transport_query_order_status" // 查询订单状态 + EventDeliveryOrderReadd = "transport_readd_order" // 下单 + EventPreAuthCodeGet = "get_pre_auth_code" // 获取预授权码 + EventRiderScoreSet = "transport_set_rider_score" // 给骑手评分 +) + +// Server 微信通知服务处理器 +type Server struct { + appID string // 小程序 ID + mchID string // 商户号 + apiKey string // 商户签名密钥 + token string // 微信服务器验证令牌 + aesKey []byte // base64 解码后的消息加密密钥 + validate bool // 是否验证请求来自微信服务器 + + textMessageHandler func(*TextMessageResult) *TransferCustomerMessage + imageMessageHandler func(*ImageMessageResult) *TransferCustomerMessage + cardMessageHandler func(*CardMessageResult) *TransferCustomerMessage + userTempsessionEnterHandler func(*UserTempsessionEnterResult) + mediaCheckAsyncHandler func(*MediaCheckAsyncResult) + expressPathUpdateHandler func(*ExpressPathUpdateResult) + addNearbyPoiAuditHandler func(*AddNearbyPoiResult) + addExpressOrderHandler func(*AddExpressOrderResult) *AddExpressOrderReturn + expressOrderCancelHandler func(*CancelExpressOrderResult) *CancelExpressOrderReturn + checkExpressBusinessHandler func(*CheckExpressBusinessResult) *CheckExpressBusinessReturn + quotaGetHandler func(*GetExpressQuotaResult) *GetExpressQuotaReturn + deliveryOrderStatusUpdateHandler func(*DeliveryOrderStatusUpdateResult) *DeliveryOrderStatusUpdateReturn + agentPosQueryHandler func(*AgentPosQueryResult) *AgentPosQueryReturn + authInfoGetHandler func(*AuthInfoGetResult) *AuthInfoGetReturn + authAccountCancelHandler func(*CancelAuthResult) *CancelAuthReturn + deliveryOrderAddHandler func(*DeliveryOrderAddResult) *DeliveryOrderAddReturn + deliveryOrderTipsAddHandler func(*DeliveryOrderAddTipsResult) *DeliveryOrderAddTipsReturn + deliveryOrderCancelHandler func(*DeliveryOrderCancelResult) *DeliveryOrderCancelReturn + deliveryOrderReturnConfirmHandler func(*DeliveryOrderReturnConfirmResult) *DeliveryOrderReturnConfirmReturn + deliveryOrderPreAddHandler func(*DeliveryOrderPreAddResult) *DeliveryOrderPreAddReturn + deliveryOrderPreCancelHandler func(*DeliveryOrderPreCancelResult) *DeliveryOrderPreCancelReturn + deliveryOrderQueryHandler func(*DeliveryOrderQueryResult) *DeliveryOrderQueryReturn + deliveryOrderReaddHandler func(*DeliveryOrderReaddResult) *DeliveryOrderReaddReturn + preAuthCodeGetHandler func(*PreAuthCodeGetResult) *PreAuthCodeGetReturn + riderScoreSetHandler func(*RiderScoreSetResult) *RiderScoreSetReturn +} + +// OnCustomerServiceTextMessage add handler to handle customer text service message. +func (srv *Server) OnCustomerServiceTextMessage(fn func(*TextMessageResult) *TransferCustomerMessage) { + srv.textMessageHandler = fn +} + +// OnCustomerServiceImageMessage add handler to handle customer image service message. +func (srv *Server) OnCustomerServiceImageMessage(fn func(*ImageMessageResult) *TransferCustomerMessage) { + srv.imageMessageHandler = fn +} + +// OnCustomerServiceCardMessage add handler to handle customer card service message. +func (srv *Server) OnCustomerServiceCardMessage(fn func(*CardMessageResult) *TransferCustomerMessage) { + srv.cardMessageHandler = fn +} + +// OnUserTempsessionEnter add handler to handle customer service message. +func (srv *Server) OnUserTempsessionEnter(fn func(*UserTempsessionEnterResult)) { + srv.userTempsessionEnterHandler = fn +} + +// OnMediaCheckAsync add handler to handle MediaCheckAsync. +func (srv *Server) OnMediaCheckAsync(fn func(*MediaCheckAsyncResult)) { + srv.mediaCheckAsyncHandler = fn +} + +// OnExpressPathUpdate add handler to handle ExpressPathUpdate. +func (srv *Server) OnExpressPathUpdate(fn func(*ExpressPathUpdateResult)) { + srv.expressPathUpdateHandler = fn +} + +// OnAddNearbyPoi add handler to handle AddNearbyPoiAudit. +func (srv *Server) OnAddNearbyPoi(fn func(*AddNearbyPoiResult)) { + srv.addNearbyPoiAuditHandler = fn +} + +// OnAddExpressOrder add handler to handle AddExpressOrder. +func (srv *Server) OnAddExpressOrder(fn func(*AddExpressOrderResult) *AddExpressOrderReturn) { + srv.addExpressOrderHandler = fn +} + +// OnCheckExpressBusiness add handler to handle CheckBusiness. +func (srv *Server) OnCheckExpressBusiness(fn func(*CheckExpressBusinessResult) *CheckExpressBusinessReturn) { + srv.checkExpressBusinessHandler = fn +} + +// OnCancelExpressOrder add handler to handle ExpressOrderCancel. +func (srv *Server) OnCancelExpressOrder(fn func(*CancelExpressOrderResult) *CancelExpressOrderReturn) { + srv.expressOrderCancelHandler = fn +} + +// OnGetExpressQuota add handler to handle QuotaGet. +func (srv *Server) OnGetExpressQuota(fn func(*GetExpressQuotaResult) *GetExpressQuotaReturn) { + srv.quotaGetHandler = fn +} + +// OnDeliveryOrderStatusUpdate add handler to handle DeliveryOrderStatusUpdate. +// OnDeliveryOrderStatusUpdate add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderStatusUpdate(fn func(*DeliveryOrderStatusUpdateResult) *DeliveryOrderStatusUpdateReturn) { + srv.deliveryOrderStatusUpdateHandler = fn +} + +// OnAgentPosQuery add handler to handle AgentPosQuery. +func (srv *Server) OnAgentPosQuery(fn func(*AgentPosQueryResult) *AgentPosQueryReturn) { + srv.agentPosQueryHandler = fn +} + +// OnAuthInfoGet add handler to handle AuthInfoGet. +func (srv *Server) OnAuthInfoGet(fn func(*AuthInfoGetResult) *AuthInfoGetReturn) { + srv.authInfoGetHandler = fn +} + +// OnCancelAuth add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnCancelAuth(fn func(*CancelAuthResult) *CancelAuthReturn) { + srv.authAccountCancelHandler = fn +} + +// OnDeliveryOrderAdd add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderAdd(fn func(*DeliveryOrderAddResult) *DeliveryOrderAddReturn) { + srv.deliveryOrderAddHandler = fn +} + +// OnDeliveryOrderAddTips add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderAddTips(fn func(*DeliveryOrderAddTipsResult) *DeliveryOrderAddTipsReturn) { + srv.deliveryOrderTipsAddHandler = fn +} + +// OnDeliveryOrderCancel add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderCancel(fn func(*DeliveryOrderCancelResult) *DeliveryOrderCancelReturn) { + srv.deliveryOrderCancelHandler = fn +} + +// OnDeliveryOrderReturnConfirm add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderReturnConfirm(fn func(*DeliveryOrderReturnConfirmResult) *DeliveryOrderReturnConfirmReturn) { + srv.deliveryOrderReturnConfirmHandler = fn +} + +// OnDeliveryOrderPreAdd add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderPreAdd(fn func(*DeliveryOrderPreAddResult) *DeliveryOrderPreAddReturn) { + srv.deliveryOrderPreAddHandler = fn +} + +// OnDeliveryOrderPreCancel add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderPreCancel(fn func(*DeliveryOrderPreCancelResult) *DeliveryOrderPreCancelReturn) { + srv.deliveryOrderPreCancelHandler = fn +} + +// OnDeliveryOrderQuery add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderQuery(fn func(*DeliveryOrderQueryResult) *DeliveryOrderQueryReturn) { + srv.deliveryOrderQueryHandler = fn +} + +// OnDeliveryOrderReadd add handler to handle deliveryOrderStatusUpdate. +func (srv *Server) OnDeliveryOrderReadd(fn func(*DeliveryOrderReaddResult) *DeliveryOrderReaddReturn) { + srv.deliveryOrderReaddHandler = fn +} + +// OnPreAuthCodeGet add handler to handle preAuthCodeGet. +func (srv *Server) OnPreAuthCodeGet(fn func(*PreAuthCodeGetResult) *PreAuthCodeGetReturn) { + srv.preAuthCodeGetHandler = fn +} + +// OnRiderScoreSet add handler to handle riderScoreSet. +func (srv *Server) OnRiderScoreSet(fn func(*RiderScoreSetResult) *RiderScoreSetReturn) { + srv.riderScoreSetHandler = fn +} + +type dataType = string + +const ( + dataTypeJSON dataType = "application/json" + dataTypeXML = "text/xml" +) + +// NewServer 返回经过初始化的Server +func NewServer(appID, token, aesKey, mchID, apiKey string, validate bool) (*Server, error) { + + key, err := base64.RawStdEncoding.DecodeString(aesKey) + if err != nil { + return nil, err + } + + server := Server{ + appID: appID, + mchID: mchID, + apiKey: apiKey, + token: token, + aesKey: key, + validate: validate, + } + + return &server, nil +} + +func getDataType(req *http.Request) dataType { + content := req.Header.Get("Content-Type") + + switch { + case strings.Contains(content, dataTypeJSON): + return dataTypeJSON + case strings.Contains(content, dataTypeXML): + return dataTypeXML + default: + return content + } +} + +func unmarshal(data []byte, tp dataType, v interface{}) error { + switch tp { + case dataTypeJSON: + if err := json.Unmarshal(data, v); err != nil { + return err + } + case dataTypeXML: + if err := xml.Unmarshal(data, v); err != nil { + return err + } + default: + return errors.New("invalid content type: " + tp) + } + + return nil +} + +func marshal(data interface{}, tp dataType) ([]byte, error) { + switch tp { + case dataTypeJSON: + return json.Marshal(data) + case dataTypeXML: + return xml.Marshal(data) + default: + return nil, errors.New("invalid content type: " + tp) + } +} + +// 处理消息体 +func (srv *Server) handleRequest(w http.ResponseWriter, r *http.Request, isEncrpt bool, tp dataType) (interface{}, error) { + raw, err := ioutil.ReadAll(r.Body) + if err != nil { + return nil, err + } + if isEncrpt { // 处理加密消息 + + query := r.URL.Query() + nonce, signature, timestamp := query.Get("nonce"), query.Get("signature"), query.Get("timestamp") + + // 检验消息是否来自微信服务器 + if !validateSignature(signature, srv.token, timestamp, nonce) { + return nil, errors.New("failed to validate signature") + } + + res := new(EncryptedResult) + if err := unmarshal(raw, tp, res); err != nil { + return nil, err + } + + body, err := srv.decryptMsg(res.Encrypt) + if err != nil { + return nil, err + } + length := binary.BigEndian.Uint32(body[16:20]) + raw = body[20 : 20+length] + } + + res := new(CommonServerResult) + if err := unmarshal(raw, tp, res); err != nil { + return nil, err + } + + switch res.MsgType { + case MsgText: + msg := new(TextMessageResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.textMessageHandler != nil { + return srv.textMessageHandler(msg), nil + } + + case MsgImg: + msg := new(ImageMessageResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.imageMessageHandler != nil { + return srv.imageMessageHandler(msg), nil + } + + case MsgCard: + msg := new(CardMessageResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.cardMessageHandler != nil { + return srv.cardMessageHandler(msg), nil + } + case MsgEvent: + switch res.Event { + case EventUserTempsessionEnter: + msg := new(UserTempsessionEnterResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.userTempsessionEnterHandler != nil { + srv.userTempsessionEnterHandler(msg) + } + case EventQuotaGet: + msg := new(GetExpressQuotaResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.quotaGetHandler != nil { + return srv.quotaGetHandler(msg), nil + } + case EventMediaCheckAsync: + msg := new(MediaCheckAsyncResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.mediaCheckAsyncHandler != nil { + srv.mediaCheckAsyncHandler(msg) + } + case EventAddExpressOrder: + msg := new(AddExpressOrderResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.addExpressOrderHandler != nil { + return srv.addExpressOrderHandler(msg), nil + } + case EventExpressOrderCancel: + msg := new(CancelExpressOrderResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.expressOrderCancelHandler != nil { + return srv.expressOrderCancelHandler(msg), nil + } + case EventCheckBusiness: + msg := new(CheckExpressBusinessResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.checkExpressBusinessHandler != nil { + return srv.checkExpressBusinessHandler(msg), nil + } + case EventDeliveryOrderStatusUpdate: + msg := new(DeliveryOrderStatusUpdateResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderStatusUpdateHandler != nil { + return srv.deliveryOrderStatusUpdateHandler(msg), nil + } + case EventAgentPosQuery: + msg := new(AgentPosQueryResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.agentPosQueryHandler != nil { + return srv.agentPosQueryHandler(msg), nil + } + case EventAuthInfoGet: + msg := new(AuthInfoGetResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.authInfoGetHandler != nil { + return srv.authInfoGetHandler(msg), nil + } + case EventAuthAccountCancel: + msg := new(CancelAuthResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.authAccountCancelHandler != nil { + return srv.authAccountCancelHandler(msg), nil + } + case EventDeliveryOrderAdd: + msg := new(DeliveryOrderAddResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderAddHandler != nil { + return srv.deliveryOrderAddHandler(msg), nil + } + case EventDeliveryOrderTipsAdd: + msg := new(DeliveryOrderAddTipsResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderTipsAddHandler != nil { + return srv.deliveryOrderTipsAddHandler(msg), nil + } + case EventDeliveryOrderCancel: + msg := new(DeliveryOrderCancelResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderCancelHandler != nil { + return srv.deliveryOrderCancelHandler(msg), nil + } + case EventDeliveryOrderReturnConfirm: + msg := new(DeliveryOrderReturnConfirmResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderReturnConfirmHandler != nil { + return srv.deliveryOrderReturnConfirmHandler(msg), nil + } + case EventDeliveryOrderPreAdd: + msg := new(DeliveryOrderPreAddResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderPreAddHandler != nil { + return srv.deliveryOrderPreAddHandler(msg), nil + } + case EventDeliveryOrderPreCancel: + msg := new(DeliveryOrderPreCancelResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderPreCancelHandler != nil { + return srv.deliveryOrderPreCancelHandler(msg), nil + } + case EventDeliveryOrderQuery: + msg := new(DeliveryOrderQueryResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderQueryHandler != nil { + return srv.deliveryOrderQueryHandler(msg), nil + } + case EventDeliveryOrderReadd: + msg := new(DeliveryOrderReaddResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.deliveryOrderReaddHandler != nil { + return srv.deliveryOrderReaddHandler(msg), nil + } + case EventPreAuthCodeGet: + msg := new(PreAuthCodeGetResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.preAuthCodeGetHandler != nil { + return srv.preAuthCodeGetHandler(msg), nil + } + case EventRiderScoreSet: + msg := new(RiderScoreSetResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.riderScoreSetHandler != nil { + return srv.riderScoreSetHandler(msg), nil + } + case EventExpressPathUpdate: + msg := new(ExpressPathUpdateResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.expressPathUpdateHandler != nil { + srv.expressPathUpdateHandler(msg) + } + case EventNearbyPoiAuditInfoAdd: + msg := new(AddNearbyPoiResult) + if err := unmarshal(raw, tp, msg); err != nil { + return nil, err + } + if srv.addNearbyPoiAuditHandler != nil { + srv.addNearbyPoiAuditHandler(msg) + } + default: + return nil, fmt.Errorf("unexpected message type '%s'", res.MsgType) + } + default: + return nil, fmt.Errorf("unexpected message type '%s'", res.MsgType) + } + return nil, nil +} + +// 判断 interface{} 是否为空 +func isNil(i interface{}) bool { + defer func() { + recover() + }() + + vi := reflect.ValueOf(i) + return vi.IsNil() +} + +// Serve 接收并处理微信通知服务 +func (srv *Server) Serve(w http.ResponseWriter, r *http.Request) error { + switch r.Method { + case "POST": + tp := getDataType(r) + isEncrpt := isEncrypted(r) + res, err := srv.handleRequest(w, r, isEncrpt, tp) + if err != nil { + return fmt.Errorf("handle request content error: %s", err) + } + + if !isNil(res) { + raw, err := marshal(res, tp) + if err != nil { + return err + } + if isEncrpt { + res, err := srv.encryptMsg(string(raw), time.Now().Unix()) + if err != nil { + return err + } + raw, err = marshal(res, tp) + if err != nil { + return err + } + } + + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-Type", tp) + if _, err := w.Write(raw); err != nil { + return err + } + } else { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") // normal header + w.WriteHeader(http.StatusOK) + _, err = io.WriteString(w, "success") + if err != nil { + return err + } + } + + return nil + case "GET": + if srv.validate { // 请求来自微信验证成功后原样返回 echostr 参数内容 + if !srv.validateServer(r) { + return errors.New("验证消息来自微信服务器失败") + } + + w.Header().Set("Content-Type", "text/plain; charset=utf-8") // normal header + w.WriteHeader(http.StatusOK) + + echostr := r.URL.Query().Get("echostr") + _, err := io.WriteString(w, echostr) + if err != nil { + return err + } + } + + return nil + default: + return errors.New("invalid request method: " + r.Method) + } +} + +// 判断消息是否加密 +func isEncrypted(req *http.Request) bool { + return req.URL.Query().Get("encrypt_type") == "aes" +} + +// 验证消息的确来自微信服务器 +// 1.将token、timestamp、nonce三个参数进行字典序排序 +// 2.将三个参数字符串拼接成一个字符串进行sha1加密 +// 3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 +func (srv *Server) validateServer(req *http.Request) bool { + query := req.URL.Query() + nonce := query.Get("nonce") + signature := query.Get("signature") + timestamp := query.Get("timestamp") + + return validateSignature(signature, nonce, timestamp, srv.token) +} + +// 加密消息 +func (srv *Server) encryptMsg(message string, timestamp int64) (*EncryptedMsgRequest, error) { + + key := srv.aesKey + + //获得16位随机字符串,填充到明文之前 + nonce := randomString(16) + text := nonce + strconv.Itoa(len(message)) + message + srv.appID + plaintext := pkcs7encode([]byte(text)) + + cipher, err := cbcEncrypt(key, plaintext, key) + if err != nil { + return nil, err + } + + encrypt := base64.StdEncoding.EncodeToString(cipher) + timestr := strconv.FormatInt(timestamp, 10) + + //生成安全签名 + signature := createSignature(srv.token, timestr, nonce, encrypt) + + request := EncryptedMsgRequest{ + Nonce: nonce, + Encrypt: encrypt, + TimeStamp: timestr, + MsgSignature: signature, + } + + return &request, nil +} + +// 检验消息的真实性,并且获取解密后的明文. +func (srv *Server) decryptMsg(encrypted string) ([]byte, error) { + + key := srv.aesKey + + ciphertext, err := base64.StdEncoding.DecodeString(encrypted) + if err != nil { + return nil, err + } + + data, err := cbcDecrypt(key, ciphertext, key) + if err != nil { + return nil, err + } + + return data, nil +} diff --git a/app/lib/weapp/server_types.go b/app/lib/weapp/server_types.go new file mode 100644 index 0000000..5614c21 --- /dev/null +++ b/app/lib/weapp/server_types.go @@ -0,0 +1,660 @@ +package weapp + +import "encoding/xml" + +// EncryptedResult 接收的加密数据 +type EncryptedResult struct { + XMLName xml.Name `xml:"xml" json:"-"` + ToUserName string `json:"ToUserName" xml:"ToUserName"` // 接收者 为小程序 AppID + Encrypt string `json:"Encrypt" xml:"Encrypt"` // 加密消息 +} + +// EncryptedMsgRequest 发送的加密消息格式 +type EncryptedMsgRequest struct { + XMLName xml.Name `xml:"xml"` + Encrypt string `json:"Encrypt" xml:"Encrypt"` // 加密消息 + TimeStamp string `json:"TimeStamp,omitempty" xml:"TimeStamp,omitempty"` // 时间戳 + Nonce string `json:"Nonce,omitempty" xml:"Nonce,omitempty"` // 随机数 + MsgSignature string `json:"MsgSignature,omitempty" xml:"MsgSignature,omitempty"` // 签名 +} + +// CommonServerResult 基础通知数据 +type CommonServerResult struct { + XMLName xml.Name `xml:"xml" json:"-"` + ToUserName string `json:"ToUserName" xml:"ToUserName"` // 小程序的原始ID + FromUserName string `json:"FromUserName" xml:"FromUserName"` // 发送者的 openID | 平台推送服务UserName + CreateTime uint `json:"CreateTime" xml:"CreateTime"` // 消息创建时间(整型) + MsgType MsgType `json:"MsgType" xml:"MsgType"` // 消息类型 + Event EventType `json:"Event" xml:"Event"` // 事件类型 +} + +// CommonServerReturn 没收到通知后返回的基础数据 +type CommonServerReturn struct { + ToUserName string `json:"ToUserName" xml:"ToUserName"` // 是 原样返回请求中的 FromUserName + FromUserName string `json:"FromUserName" xml:"FromUserName"` // 是 快递公司小程序 UserName + CreateTime uint `json:"CreateTime" xml:"CreateTime"` // 是 事件时间,Unix时间戳 + MsgType string `json:"MsgType" xml:"MsgType"` // 是 消息类型,固定为 event + Event string `json:"Event" xml:"Event"` // 是 事件类型,固定为 transport_add_order,不区分大小写 + ResultCode int `json:"resultcode" xml:"resultcode"` // 是 错误码 + ResultMsg string `json:"resultmsg" xml:"resultmsg"` // 是 错误描述 +} + +// UserTempsessionEnterResult 接收的文本消息 +type UserTempsessionEnterResult struct { + CommonServerResult + SessionFrom string `json:"SessionFrom" xml:"SessionFrom"` // 开发者在客服会话按钮设置的 session-from 属性 +} + +// TextMessageResult 接收的文本消息 +type TextMessageResult struct { + CommonServerResult + MsgID int `json:"MsgId" xml:"MsgId"` // 消息 ID + Content string `json:"Content" xml:"Content"` +} + +// ImageMessageResult 接收的图片消息 +type ImageMessageResult struct { + CommonServerResult + MsgID int `json:"MsgId" xml:"MsgId"` // 消息 ID + PicURL string `json:"PicUrl" xml:"PicUrl"` + MediaID string `json:"MediaId" xml:"MediaId"` +} + +// CardMessageResult 接收的卡片消息 +type CardMessageResult struct { + CommonServerResult + MsgID int `json:"MsgId" xml:"MsgId"` // 消息 ID + Title string `json:"Title" xml:"Title"` // 标题 + AppID string `json:"AppId" xml:"AppId"` // 小程序 appid + PagePath string `json:"PagePath" xml:"PagePath"` // 小程序页面路径 + ThumbURL string `json:"ThumbUrl" xml:"ThumbUrl"` // 封面图片的临时cdn链接 + ThumbMediaID string `json:"ThumbMediaId" xml:"ThumbMediaId"` // 封面图片的临时素材id +} + +// MediaCheckAsyncResult 异步校验的图片/音频结果 +type MediaCheckAsyncResult struct { + CommonServerResult + IsRisky uint8 `json:"isrisky" xml:"isrisky"` // 检测结果,0:暂未检测到风险,1:风险 + ExtraInfoJSON string `json:"extra_info_json" xml:"extra_info_json"` // 附加信息,默认为空 + AppID string `json:"appid" xml:"appid"` // 小程序的appid + TraceID string `json:"trace_id" xml:"trace_id"` // 任务id + StatusCode int `json:"status_code" xml:"status_code"` // 默认为:0,4294966288(-1008)为链接无法下载 +} + +// AddNearbyPoiResult 附近小程序添加地点审核状态通知数据 +type AddNearbyPoiResult struct { + CommonServerResult + AuditID uint `xml:"audit_id"` // 审核单id + Status uint8 `xml:"status"` // 审核状态(3:审核通过,2:审核失败) + Reason string `xml:"reason"` // 如果status为2,会返回审核失败的原因 + PoiID uint `xml:"poi_id"` +} + +// ExpressPathUpdateResult 运单轨迹更新事件需要返回的数据 +type ExpressPathUpdateResult struct { + CommonServerResult + DeliveryID string `json:"DeliveryID" xml:"DeliveryID"` // 快递公司ID + WayBillID string `json:"WayBillId" xml:"WayBillId"` // 运单ID + Version uint `json:"Version" xml:"Version"` // 轨迹版本号(整型) + Count uint `json:"Count" xml:"Count"` // 轨迹节点数(整型) + Actions []struct { + ActionTime uint `json:"ActionTime" xml:"ActionTime"` // 轨迹节点 Unix 时间戳 + ActionType uint `json:"ActionType" xml:"ActionType"` // 轨迹节点类型 + ActionMsg string `json:"ActionMsg" xml:"ActionMsg"` // 轨迹节点详情 + } `json:"Actions" xml:"Actions"` // 轨迹列表 +} + +// AddExpressOrderReturn 请求下单事件需要返回的数据 +type AddExpressOrderReturn struct { + CommonServerReturn + Token string `json:"Token" xml:"Token"` // 传入的 Token,原样返回 + OrderID string `json:"OrderID" xml:"OrderID"` // 传入的唯一标识订单的 ID,由商户生成,原样返回 + BizID string `json:"BizID" xml:"BizID"` // 商户 ID,原样返回 + WayBillID string `json:"WayBillID" xml:"WayBillID"` // 运单 ID + WaybillData string `json:"WaybillData" xml:"WaybillData"` // 集包地、三段码、大头笔等信息,用于生成面单信息。详见后文返回值说明 +} + +// TransferCustomerMessage 需要转发的客服消息 +type TransferCustomerMessage struct { + XMLName xml.Name `xml:"xml"` + // 接收方帐号(收到的OpenID) + ToUserName string `json:"ToUserName" xml:"ToUserName"` + // 开发者微信号 + FromUserName string `json:"FromUserName" xml:"FromUserName"` + // 消息创建时间 (整型) + CreateTime uint `json:"CreateTime" xml:"CreateTime"` + // 转发消息类型 + MsgType MsgType `json:"MsgType" xml:"MsgType"` +} + +// AddExpressOrderResult 请求下单事件参数 +type AddExpressOrderResult struct { + CommonServerResult + Token string `json:"Token" xml:"Token"` // 订单 Token。请保存该 Token,调用logistics.updatePath时需要传入 + OrderID string `json:"OrderID" xml:"OrderID"` // 唯一标识订单的 ID,由商户生成。快递需要保证相同的 OrderID 生成相同的运单ID。 + BizID string `json:"BizID" xml:"BizID"` // 商户 ID,即商户在快递注册的客户编码或月结账户名 + BizPwd string `json:"BizPwd" xml:"BizPwd"` // BizID 对应的密码 + ShopAppID string `json:"ShopAppID" xml:"ShopAppID"` // 商户的小程序 AppID + WayBillID string `json:"WayBillID" xml:"WayBillID"` // 运单 ID,从微信号段中生成。若为 0,则表示需要快递来生成运单 ID。 + Remark string `json:"Remark" xml:"Remark"` // 快递备注,会打印到面单上,比如"易碎物品" + Sender struct { + Name string `json:"Name" xml:"Name"` // 收件人/发件人姓名,不超过64字节 + Tel string `json:"Tel" xml:"Tel"` // 收件人/发件人座机号码,若不填写则必须填写 mobile,不超过32字节 + Mobile string `json:"Mobile" xml:"Mobile"` // 收件人/发件人手机号码,若不填写则必须填写 tel,不超过32字节 + Company string `json:"Company" xml:"Company"` // 收件人/发件人公司名称,不超过64字节 + PostCode string `json:"PostCode" xml:"PostCode"` // 收件人/发件人邮编,不超过10字节 + Country string `json:"Country" xml:"Country"` // 收件人/发件人国家,不超过64字节 + Province string `json:"Province" xml:"Province"` // 收件人/发件人省份,比如:"广东省",不超过64字节 + City string `json:"City" xml:"City"` // 收件人/发件人市/地区,比如:"广州市",不超过64字节 + Area string `json:"Area" xml:"Area"` // 收件人/发件人区/县,比如:"海珠区",不超过64字节 + Address string `json:"Address" xml:"Address"` // 收件人/发件人详细地址,比如:"XX路XX号XX大厦XX",不超过512字节 + } `json:"Sender" xml:"Sender"` // 发件人信息 + Receiver struct { + Name string `json:"Name" xml:"Name"` // 收件人/发件人姓名,不超过64字节 + Tel string `json:"Tel" xml:"Tel"` // 收件人/发件人座机号码,若不填写则必须填写 mobile,不超过32字节 + Mobile string `json:"Mobile" xml:"Mobile"` // 收件人/发件人手机号码,若不填写则必须填写 tel,不超过32字节 + Company string `json:"Company" xml:"Company"` // 收件人/发件人公司名称,不超过64字节 + PostCode string `json:"PostCode" xml:"PostCode"` // 收件人/发件人邮编,不超过10字节 + Country string `json:"Country" xml:"Country"` // 收件人/发件人国家,不超过64字节 + Province string `json:"Province" xml:"Province"` // 收件人/发件人省份,比如:"广东省",不超过64字节 + City string `json:"City" xml:"City"` // 收件人/发件人市/地区,比如:"广州市",不超过64字节 + Area string `json:"Area" xml:"Area"` // 收件人/发件人区/县,比如:"海珠区",不超过64字节 + Address string `json:"Address" xml:"Address"` // 收件人/发件人详细地址,比如:"XX路XX号XX大厦XX",不超过512字节 + } `json:"Receiver" xml:"Receiver"` // 收件人信息 + Cargo struct { + Weight float64 `json:"Weight" xml:"Weight"` // 包裹总重量,单位是千克(kg) + SpaceX float64 `json:"Space_X" xml:"Space_X"` // 包裹长度,单位厘米(cm) + SpaceY float64 `json:"Space_Y" xml:"Space_Y"` // 包裹宽度,单位厘米(cm) + SpaceZ float64 `json:"Space_Z" xml:"Space_Z"` // 包裹高度,单位厘米(cm) + Count uint `json:"Count" xml:"Count"` // 包裹数量 + } `json:"Cargo" xml:"Cargo"` // 包裹信息 + Insured struct { + Used InsureStatus `json:"UseInsured" xml:"UseInsured"` // 是否保价,0 表示不保价,1 表示保价 + Value uint `json:"InsuredValue" xml:"InsuredValue"` // 保价金额,单位是分,比如: 10000 表示 100 元 + } `json:"Insured" xml:"Insured"` // 保价信息 + Service struct { + Type uint8 `json:"ServiceType" xml:"ServiceType"` // 服务类型 ID + Name string `json:"ServiceName" xml:"ServiceName"` // 服务名称 + } `json:"Service" xml:"Service"` // 服务类型 +} + +// GetExpressQuotaReturn 查询商户余额事件需要返回的数据 +type GetExpressQuotaReturn struct { + CommonServerReturn + BizID string `json:"BizID" xml:"BizID"` // 商户ID + Quota float64 `json:"Quota" xml:"Quota"` // 商户可用余额,0 表示无可用余额 +} + +// GetExpressQuotaResult 查询商户余额事件参数 +type GetExpressQuotaResult struct { + CommonServerResult + BizID string `json:"BizID" xml:"BizID"` // 商户ID,即商户在快递注册的客户编码或月结账户名 + BizPwd string `json:"BizPwd" xml:"BizPwd"` // BizID 对应的密码 + ShopAppID string `json:"ShopAppID" xml:"ShopAppID"` // 商户小程序的 AppID +} + +// CancelExpressOrderResult 取消订单事件参数 +type CancelExpressOrderResult struct { + CommonServerResult + OrderID string `json:"OrderID" xml:"OrderID"` // 唯一标识订单的 ID,由商户生成 + BizID string `json:"BizID" xml:"BizID"` // 商户 ID + BizPwd string `json:"BizPwd" xml:"BizPwd"` // 商户密码 + ShopAppID string `json:"ShopAppID" xml:"ShopAppID"` // 商户的小程序 AppID + WayBillID string `json:"WayBillID" xml:"WayBillID"` // 运单 ID,从微信号段中生成 +} + +// CancelExpressOrderReturn 取消订单事件需要返回的数据 +type CancelExpressOrderReturn struct { + CommonServerReturn + BizID string `json:"BizID" xml:"BizID"` // 商户ID,请原样返回 + OrderID string `json:"OrderID" xml:"OrderID"` // 唯一标识订单的ID,由商户生成。请原样返回 + WayBillID string `json:"WayBillID" xml:"WayBillID"` // 运单ID,请原样返回 +} + +// CheckExpressBusinessResult 审核商户事件参数 +type CheckExpressBusinessResult struct { + CommonServerResult + BizID string `json:"BizID" xml:"BizID"` // 商户ID,即商户在快递注册的客户编码或月结账户名 + BizPwd string `json:"BizPwd" xml:"BizPwd"` // BizID 对应的密码 + ShopAppID string `json:"ShopAppID" xml:"ShopAppID"` // 商户的小程序 AppID + ShopName string `json:"ShopName" xml:"ShopName"` // 商户名称,即小程序昵称(仅EMS可用) + ShopTelphone string `json:"ShopTelphone" xml:"ShopTelphone"` // 商户联系电话(仅EMS可用) + ShopContact string `json:"ShopContact" xml:"ShopContact"` // 商户联系人姓名(仅EMS可用) + ServiceName string `json:"ServiceName" xml:"ServiceName"` // 预开通的服务类型名称(仅EMS可用) + SenderAddress string `json:"SenderAddress" xml:"SenderAddress"` // 商户发货地址(仅EMS可用) +} + +// CheckExpressBusinessReturn 审核商户事件需要需要返回的数据 +type CheckExpressBusinessReturn struct { + CommonServerReturn + BizID string `json:"BizID" xml:"BizID"` // 商户ID + Quota float64 `json:"Quota" xml:"Quota"` // 商户可用余额,0 表示无可用余额 +} + +// DeliveryOrderStatusUpdateResult 服务器携带的参数 +type DeliveryOrderStatusUpdateResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配的appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + ActionTime uint `json:"action_time" xml:"action_time"` // Unix时间戳 + OrderStatus int `json:"order_status" xml:"order_status"` // 配送状态,枚举值 + ActionMsg string `json:"action_msg" xml:"action_msg"` // 附加信息 + Agent struct { + Name string `json:"name" xml:"name"` // 骑手姓名 + Phone string `json:"phone" xml:"phone"` // 骑手电话 + } `json:"agent" xml:"agent"` // 骑手信息 +} + +// DeliveryOrderStatusUpdateReturn 需要返回的数据 +type DeliveryOrderStatusUpdateReturn CommonServerReturn + +// AgentPosQueryReturn 需要返回的数据 +type AgentPosQueryReturn struct { + CommonServerReturn + Lng float64 `json:"lng" xml:"lng"` // 必填 经度,火星坐标,精确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 必填 纬度,火星坐标,精确到小数点后6位 + Distance float64 `json:"distance" xml:"distance"` // 必填 和目的地距离,已取货配送中需返回,单位米 + ReachTime uint `json:"reach_time" xml:"reach_time"` // 必填 预计还剩多久送达时间, 单位秒, 已取货配送中需返回,比如5分钟后送达,填300 +} + +// AgentPosQueryResult 服务器携带的参数 +type AgentPosQueryResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id +} + +// AuthInfoGetReturn 需要返回的数据 +type AuthInfoGetReturn struct { + CommonServerReturn + AppKey string `json:"appkey" xml:"appkey"` // 必填 配送公司分配的appkey,对应shopid + Account string `json:"account" xml:"account"` // 必填 帐号名称 + AccountType uint `json:"account_type" xml:"account_type"` // 必填 帐号类型:0.不确定,1.预充值,2,月结,3,其它 +} + +// AuthInfoGetResult 服务器携带的参数 +type AuthInfoGetResult struct { + CommonServerResult + WxAppID string `json:"wx_appid" xml:"wx_appid"` // 发起授权的商户小程序appid + Code string `json:"code" xml:"code"` // 授权码 +} + +// CancelAuthReturn 需要返回的数据 +type CancelAuthReturn CommonServerReturn + +// CancelAuthResult 服务器携带的参数 +type CancelAuthResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 配送公司唯一标识 + WxAppID string `json:"wx_appid" xml:"wx_appid"` // 发起授权的商户小程序appid +} + +// DeliveryOrderAddReturn 需要返回的数据 +type DeliveryOrderAddReturn struct { + CommonServerReturn + Event string `json:"Event" xml:"Event"` // 是 事件类型,固定为 transport_add_order,不区分大小写 + Fee uint `json:"fee" xml:"fee"` // 是 实际运费(单位:元),运费减去优惠券费用 + Deliverfee uint `json:"deliverfee" xml:"deliverfee"` // 是 运费(单位:元) + Couponfee uint `json:"couponfee" xml:"couponfee"` // 是 优惠券费用(单位:元) + Tips uint `json:"tips" xml:"tips"` // 是 小费(单位:元) + Insurancefee uint `json:"insurancefee" xml:"insurancefee"` // 是 保价费(单位:元) + Distance float64 `json:"distance,omitempty" xml:"distance,omitempty"` // 否 配送距离(单位:米) + WaybillID string `json:"waybill_id,omitempty" xml:"waybill_id,omitempty"` // 否 配送单号, 可以在API1更新配送单状态异步返回 + OrderStatus int `json:"order_status" xml:"order_status"` // 是 配送单状态 + FinishCode uint `json:"finish_code,omitempty" xml:"finish_code,omitempty"` // 否 收货码 + PickupCode uint `json:"pickup_code,omitempty" xml:"pickup_code,omitempty"` // 否 取货码 + DispatchDuration uint `json:"dispatch_duration,omitempty" xml:"dispatch_duration,omitempty"` // 否 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0 + SenderLng float64 `json:"sender_lng,omitempty" xml:"sender_lng,omitempty"` // 否 发货方经度,火星坐标,精确到小数点后6位, 用于消息通知,如果下单请求里有发货人信息则不需要 + SenderLat float64 `json:"sender_lat,omitempty" xml:"sender_lat,omitempty"` // 否 发货方纬度,火星坐标,精确到小数点后6位, 用于消息通知,如果下单请求里有发货人信息则不需要 +} + +// DeliveryOrderAddResult 服务器携带的参数 +type DeliveryOrderAddResult struct { + CommonServerResult + WxToken string `json:"wx_token" xml:"wx_token"` // 微信订单 Token。请保存该Token,调用更新配送单状态接口(updateOrder)时需要传入 + DeliveryToken string `json:"delivery_token" xml:"delivery_token"` // 配送公司侧在预下单时候返回的token,用于保证运费不变 + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配的appkey + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 + Sender struct { + Name string `json:"name" xml:"name"` // 姓名,最长不超过256个字符 + City string `json:"city" xml:"city"` // 城市名称,如广州市 + Address string `json:"address" xml:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail" xml:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone" xml:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng" xml:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type" xml:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"sender" xml:"sender"` // 发件人信息,如果配送公司能从shopid+shop_no对应到门店地址,则不需要填写,否则需填写 + Receiver struct { + Name string `json:"name" xml:"name"` // 姓名,最长不超过256个字符 + City string `json:"city" xml:"city"` // 城市名称,如广州市 + Address string `json:"address" xml:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail" xml:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone" xml:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng" xml:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type" xml:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"receiver" xml:"receiver"` // 收件人信息 + Cargo struct { + GoodsValue float64 `json:"goods_value" xml:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height" xml:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length" xml:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width" xml:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight" xml:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail struct { + Goods []struct { + Count uint `json:"good_count" xml:"good_count"` // 货物数量 + Name string `json:"good_name" xml:"good_name"` // 货品名称 + Price float64 `json:"good_price" xml:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit" xml:"good_unit"` // 货品单位,最长不超过20个字符 + } `json:"goods" xml:"goods"` // 货物列表 + } `json:"goods_detail" xml:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info" xml:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info" xml:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class" xml:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class" xml:"cargo_second_class"` // 品类二级类目 + } `json:"cargo" xml:"cargo"` // 货物信息 + OrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code" xml:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type" xml:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time" xml:"expected_delivery_time"` // 期望派单时间(达达支持,表示达达系统调度时间),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time" xml:"expected_finish_time"` // 期望送达时间(美团、顺丰同城急送支持),unix-timestamp) + ExpectedPickTime uint `json:"expected_pick_time" xml:"expected_pick_time"` // 期望取件时间(闪送、顺丰同城急送支持,顺丰同城急送只需传expected_finish_time或expected_pick_time其中之一即可,同时都传则以expected_finish_time为准),unix-timestamp + PoiSeq string `json:"poi_seq" xml:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note" xml:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time" xml:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured" xml:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value" xml:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips" xml:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery float64 `json:"is_direct_delivery" xml:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery float64 `json:"cash_on_delivery" xml:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup float64 `json:"cash_on_pickup" xml:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method" xml:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed" xml:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed" xml:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) + } `json:"order_info" xml:"order_info"` // 订单信息 +} + +// DeliveryOrderAddTipsReturn 需要返回的数据 +type DeliveryOrderAddTipsReturn CommonServerReturn + +// DeliveryOrderAddTipsResult 服务器携带的参数 +type DeliveryOrderAddTipsResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 + Tips float64 `json:"tips" xml:"tips"` // 小费金额(单位:元) + Remark string `json:"remark" xml:"remark"` // 备注 +} + +// DeliveryOrderCancelReturn 需要返回的数据 +type DeliveryOrderCancelReturn struct { + CommonServerReturn + DeductFee uint `json:"deduct_fee" xml:"deduct_fee"` // 是 预计扣除的违约金(单位:元),可能没有 + Desc string `json:"desc" xml:"desc"` // 是 扣费说明 +} + +// DeliveryOrderCancelResult 服务器携带的参数 +type DeliveryOrderCancelResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 + CancelReasonID uint `json:"cancel_reason_id" xml:"cancel_reason_id"` // 取消原因id + CancelReason string `json:"cancel_reason" xml:"cancel_reason"` // 取消原因 +} + +// DeliveryOrderReturnConfirmReturn 需要返回的数据 +type DeliveryOrderReturnConfirmReturn CommonServerReturn + +// DeliveryOrderReturnConfirmResult 服务器携带的参数 +type DeliveryOrderReturnConfirmResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 +} + +// DeliveryOrderPreAddReturn 需要返回的数据 +type DeliveryOrderPreAddReturn struct { + CommonServerReturn + Fee uint `json:"fee" xml:"fee"` // 是 实际运费(单位:元),运费减去优惠券费用 + Deliverfee uint `json:"deliverfee" xml:"deliverfee"` // 是 运费(单位:元) + Couponfee uint `json:"couponfee" xml:"couponfee"` // 是 优惠券费用(单位:元) + Tips float64 `json:"tips" xml:"tips"` // 是 小费(单位:元) + Insurancefee uint `json:"insurancefee" xml:"insurancefee"` // 是 保价费(单位:元) + Distance uint `json:"distance" xml:"distance"` // 否 配送距离(单位:米) + DispatchDuration uint `json:"dispatch_duration" xml:"dispatch_duration"` // 否 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0 + DeliveryToken string `json:"delivery_token" xml:"delivery_token"` // 否 配送公司可以返回此字段,当用户下单时候带上这个字段,配送公司可保证在一段时间内运费不变 +} + +// DeliveryOrderPreAddResult 服务器携带的参数 +type DeliveryOrderPreAddResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配的appkey + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 + Sender struct { + Name string `json:"name" xml:"name"` // 姓名,最长不超过256个字符 + City string `json:"city" xml:"city"` // 城市名称,如广州市 + Address string `json:"address" xml:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail" xml:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone" xml:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng" xml:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type" xml:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"sender" xml:"sender"` // 发件人信息,如果配送公司能从shopid+shop_no对应到门店地址,则不需要填写,否则需填写 + Receiver struct { + Name string `json:"name" xml:"name"` // 姓名,最长不超过256个字符 + City string `json:"city" xml:"city"` // 城市名称,如广州市 + Address string `json:"address" xml:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail" xml:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone" xml:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng" xml:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type" xml:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"receiver" xml:"receiver"` // 收件人信息 + Cargo struct { + GoodsValue float64 `json:"goods_value" xml:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height" xml:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length" xml:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width" xml:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight" xml:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail struct { + Goods []struct { + Count uint `json:"good_count" xml:"good_count"` // 货物数量 + Name string `json:"good_name" xml:"good_name"` // 货品名称 + Price float64 `json:"good_price" xml:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit" xml:"good_unit"` // 货品单位,最长不超过20个字符 + } `json:"goods" xml:"goods"` // 货物列表 + } `json:"goods_detail" xml:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info" xml:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info" xml:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class" xml:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class" xml:"cargo_second_class"` // 品类二级类目 + } `json:"cargo" xml:"cargo"` // 货物信息 + OrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code" xml:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type" xml:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time" xml:"expected_delivery_time"` // 期望派单时间(达达支持,表示达达系统调度时间),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time" xml:"expected_finish_time"` // 期望送达时间(美团、顺丰同城急送支持),unix-timestamp) + ExpectedPickTime uint `json:"expected_pick_time" xml:"expected_pick_time"` // 期望取件时间(闪送、顺丰同城急送支持,顺丰同城急送只需传expected_finish_time或expected_pick_time其中之一即可,同时都传则以expected_finish_time为准),unix-timestamp + PoiSeq string `json:"poi_seq" xml:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note" xml:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time" xml:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured" xml:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value" xml:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips" xml:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery float64 `json:"is_direct_delivery" xml:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery float64 `json:"cash_on_delivery" xml:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup float64 `json:"cash_on_pickup" xml:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method" xml:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed" xml:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed" xml:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) + } `json:"order_info" xml:"order_info"` // 订单信息 +} + +// DeliveryOrderPreCancelReturn 需要返回的数据 +type DeliveryOrderPreCancelReturn struct { + CommonServerReturn + DeductFee uint `json:"deduct_fee" xml:"deduct_fee"` // 是 预计扣除的违约金(单位:元),可能没有 + Desc string `json:"desc" xml:"desc"` // 是 扣费说明 +} + +// DeliveryOrderPreCancelResult 服务器携带的参数 +type DeliveryOrderPreCancelResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 + CancelReasonID uint `json:"cancel_reason_id" xml:"cancel_reason_id"` // 取消原因id + CancelReason string `json:"cancel_reason" xml:"cancel_reason"` // 取消原因 +} + +// DeliveryOrderQueryReturn 需要返回的数据 +type DeliveryOrderQueryReturn struct { + CommonServerReturn + OrderStatus float64 `json:"order_status" xml:"order_status"` // 是 当前订单状态,枚举值 + ActionMsg string `json:"action_msg" xml:"action_msg"` // 否 附加信息 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 是 配送单id +} + +// DeliveryOrderQueryResult 服务器携带的参数 +type DeliveryOrderQueryResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 +} + +// DeliveryOrderReaddReturn 需要返回的数据 +type DeliveryOrderReaddReturn struct { + CommonServerReturn + Fee uint `json:"fee" xml:"fee"` // 是 实际运费(单位:元),运费减去优惠券费用 + Deliverfee uint `json:"deliverfee" xml:"deliverfee"` // 是 运费(单位:元) + Couponfee uint `json:"couponfee" xml:"couponfee"` // 是 优惠券费用(单位:元) + Tips float64 `json:"tips" xml:"tips"` // 是 小费(单位:元) + Insurancefee uint `json:"insurancefee" xml:"insurancefee"` // 是 保价费(单位:元) + Distance uint `json:"distance" xml:"distance"` // 否 配送距离(单位:米) + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 否 配送单号, 可以在API1更新配送单状态异步返回 + OrderStatus float64 `json:"order_status" xml:"order_status"` // 是 配送单状态 + FinishCode uint `json:"finish_code" xml:"finish_code"` // 否 收货码 + PickupCode uint `json:"pickup_code" xml:"pickup_code"` // 否 取货码 + DispatchDuration uint `json:"dispatch_duration" xml:"dispatch_duration"` // 否 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0 + SenderLng float64 `json:"sender_lng" xml:"sender_lng"` // 否 发货方经度,火星坐标,精确到小数点后6位, 用于消息通知,如果下单请求里有发货人信息则不需要 + SenderLat float64 `json:"sender_lat" xml:"sender_lat"` // 否 发货方纬度,火星坐标,精确到小数点后6位, 用于消息通知,如果下单请求里有发货人信息则不需要 +} + +// DeliveryOrderReaddResult 服务器携带的参数 +type DeliveryOrderReaddResult struct { + CommonServerResult + WxToken string `json:"wx_token" xml:"wx_token"` // 微信订单 Token。请保存该Token,调用更新配送单状态接口(updateOrder)时需要传入 + DeliveryToken string `json:"delivery_token" xml:"delivery_token"` // 配送公司侧在预下单时候返回的token,用于保证运费不变 + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配的appkey + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + DeliverySign string `json:"delivery_sign" xml:"delivery_sign"` // 用配送公司侧提供的appSecret加密的校验串 + Sender struct { + Name string `json:"name" xml:"name"` // 姓名,最长不超过256个字符 + City string `json:"city" xml:"city"` // 城市名称,如广州市 + Address string `json:"address" xml:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail" xml:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone" xml:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng" xml:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type" xml:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"sender" xml:"sender"` // 发件人信息,如果配送公司能从shopid+shop_no对应到门店地址,则不需要填写,否则需填写 + Receiver struct { + Name string `json:"name" xml:"name"` // 姓名,最长不超过256个字符 + City string `json:"city" xml:"city"` // 城市名称,如广州市 + Address string `json:"address" xml:"address"` // 地址(街道、小区、大厦等,用于定位) + AddressDetail string `json:"address_detail" xml:"address_detail"` // 地址详情(楼号、单元号、层号) + Phone string `json:"phone" xml:"phone"` // 电话/手机号,最长不超过64个字符 + Lng float64 `json:"lng" xml:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位 + Lat float64 `json:"lat" xml:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位) + CoordinateType uint8 `json:"coordinate_type" xml:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标 + } `json:"receiver" xml:"receiver"` // 收件人信息 + Cargo struct { + GoodsValue float64 `json:"goods_value" xml:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000] + GoodsHeight float64 `json:"goods_height" xml:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45] + GoodsLength float64 `json:"goods_length" xml:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65] + GoodsWidth float64 `json:"goods_width" xml:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsWeight float64 `json:"goods_weight" xml:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50] + GoodsDetail struct { + Goods []struct { + Count uint `json:"good_count" xml:"good_count"` // 货物数量 + Name string `json:"good_name" xml:"good_name"` // 货品名称 + Price float64 `json:"good_price" xml:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数) + Unit string `json:"good_unit" xml:"good_unit"` // 货品单位,最长不超过20个字符 + } `json:"goods" xml:"goods"` // 货物列表 + } `json:"goods_detail" xml:"goods_detail"` // 货物详情,最长不超过10240个字符 + GoodsPickupInfo string `json:"goods_pickup_info" xml:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符 + GoodsDeliveryInfo string `json:"goods_delivery_info" xml:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符 + CargoFirstClass string `json:"cargo_first_class" xml:"cargo_first_class"` // 品类一级类目 + CargoSecondClass string `json:"cargo_second_class" xml:"cargo_second_class"` // 品类二级类目 + } `json:"cargo" xml:"cargo"` // 货物信息 + OrderInfo struct { + DeliveryServiceCode string `json:"delivery_service_code" xml:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解 + OrderType uint8 `json:"order_type" xml:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time + ExpectedDeliveryTime uint `json:"expected_delivery_time" xml:"expected_delivery_time"` // 期望派单时间(达达支持,表示达达系统调度时间),unix-timestamp + ExpectedFinishTime uint `json:"expected_finish_time" xml:"expected_finish_time"` // 期望送达时间(美团、顺丰同城急送支持),unix-timestamp) + ExpectedPickTime uint `json:"expected_pick_time" xml:"expected_pick_time"` // 期望取件时间(闪送、顺丰同城急送支持,顺丰同城急送只需传expected_finish_time或expected_pick_time其中之一即可,同时都传则以expected_finish_time为准),unix-timestamp + PoiSeq string `json:"poi_seq" xml:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符 + Note string `json:"note" xml:"note"` // 备注,最长不超过200个字符 + OrderTime uint `json:"order_time" xml:"order_time"` // 用户下单付款时间 + IsInsured uint8 `json:"is_insured" xml:"is_insured"` // 是否保价,0,非保价,1.保价 + DeclaredValue float64 `json:"declared_value" xml:"declared_value"` // 保价金额,单位为元,精确到分 + Tips float64 `json:"tips" xml:"tips"` // 小费,单位为元, 下单一般不加小费 + IsDirectDelivery float64 `json:"is_direct_delivery" xml:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送) + CashOnDelivery float64 `json:"cash_on_delivery" xml:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分 + CashOnPickup float64 `json:"cash_on_pickup" xml:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分 + RiderPickMethod uint8 `json:"rider_pick_method" xml:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店 + IsFinishCodeNeeded uint8 `json:"is_finish_code_needed" xml:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投) + IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed" xml:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货) + } `json:"order_info" xml:"order_info"` // 订单信息 +} + +// PreAuthCodeGetReturn 需要返回的数据 +type PreAuthCodeGetReturn struct { + CommonServerReturn + PreAuthCode string `json:"pre_auth_code" xml:"pre_auth_code"` // 是 预授权码 +} + +// PreAuthCodeGetResult 服务器携带的参数 +type PreAuthCodeGetResult struct { + CommonServerResult + WxAppID string `json:"wx_appid" xml:"wx_appid"` // 发起授权的商户小程序appid +} + +// RiderScoreSetReturn 需要返回的数据 +type RiderScoreSetReturn CommonServerReturn + +// RiderScoreSetResult 服务器携带的参数 +type RiderScoreSetResult struct { + CommonServerResult + ShopID string `json:"shopid" xml:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey + ShopOrderID string `json:"shop_order_id" xml:"shop_order_id"` // 唯一标识订单的 ID,由商户生成 + ShopNo string `json:"shop_no" xml:"shop_no"` // 商家门店编号, 在配送公司侧登记 + WaybillID string `json:"waybill_id" xml:"waybill_id"` // 配送单id + DeliveryOntimeScore uint `json:"delivery_ontime_score" xml:"delivery_ontime_score"` // 配送准时分数,范围 1 - 5 + CargoIntactScore uint `json:"cargo_intact_score" xml:"cargo_intact_score"` // 货物完整分数,范围1-5 + AttitudeScore uint `json:"attitude_score" xml:"attitude_score"` // 服务态度分数 范围1-5 +} diff --git a/app/lib/weapp/soter.go b/app/lib/weapp/soter.go new file mode 100644 index 0000000..490ed55 --- /dev/null +++ b/app/lib/weapp/soter.go @@ -0,0 +1,41 @@ +package weapp + +const ( + apiVerifySignature = "/cgi-bin/soter/verify_signature" +) + +// VerifySignatureResponse 生物认证秘钥签名验证请求返回数据 +type VerifySignatureResponse struct { + CommonError + IsOk bool `json:"is_ok"` +} + +// VerifySignature 生物认证秘钥签名验证 +// accessToken 接口调用凭证 +// openID 用户 openid +// data 通过 wx.startSoterAuthentication 成功回调获得的 resultJSON 字段 +// signature 通过 wx.startSoterAuthentication 成功回调获得的 resultJSONSignature 字段 +func VerifySignature(token, openID, data, signature string) (*VerifySignatureResponse, error) { + api := baseURL + apiVerifySignature + return verifySignature(api, token, openID, data, signature) +} + +func verifySignature(api, token, openID, data, signature string) (*VerifySignatureResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "openid": openID, + "json_string": data, + "json_signature": signature, + } + + res := new(VerifySignatureResponse) + if err := postJSON(url, params, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/soter_test.go b/app/lib/weapp/soter_test.go new file mode 100644 index 0000000..737124b --- /dev/null +++ b/app/lib/weapp/soter_test.go @@ -0,0 +1,67 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestVerifySignature(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiVerifySignature { + t.Fatalf("Except to path '%s',get '%s'", apiVerifySignature, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + OpenID string `json:"openid"` + JSONString string `json:"json_string"` + JSONSignature string `json:"json_signature"` + }{} + + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.OpenID == "" { + t.Error("Response column openid can not be empty") + } + + if params.JSONString == "" { + t.Error("Response column json_string can not be empty") + } + if params.JSONSignature == "" { + t.Error("Response column json_signature can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok", + "is_ok": true + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + _, err := verifySignature(ts.URL+apiVerifySignature, "mock-access-token", "mock-open-id", "mock-data", "mock-signature") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/subscribe_message.go b/app/lib/weapp/subscribe_message.go new file mode 100644 index 0000000..dd8ab45 --- /dev/null +++ b/app/lib/weapp/subscribe_message.go @@ -0,0 +1,277 @@ +package weapp + +import ( + "strconv" +) + +const ( + apiAddTemplate = "/wxaapi/newtmpl/addtemplate" + apiDeleteTemplate = "/wxaapi/newtmpl/deltemplate" + apiGetTemplateCategory = "/wxaapi/newtmpl/getcategory" + apiGetPubTemplateKeyWordsById = "/wxaapi/newtmpl/getpubtemplatekeywords" + apiGetPubTemplateTitleList = "/wxaapi/newtmpl/getpubtemplatetitles" + apiGetTemplateList = "/wxaapi/newtmpl/gettemplate" + apiSendSubscribeMessage = "/cgi-bin/message/subscribe/send" +) + +// AddTemplateResponse 添加模版消息返回数据 +type AddTemplateResponse struct { + CommonError + Pid string `json:"priTmplId"` // 添加至帐号下的模板id,发送小程序订阅消息时所需 +} + +// AddTemplate 组合模板并添加至帐号下的个人模板库 +// +// token 微信 access_token +// tid 模板ID +// desc 服务场景描述,15个字以内 +// keywordIDList 关键词 ID 列表 +func AddTemplate(token, tid, desc string, keywordIDList []int32) (*AddTemplateResponse, error) { + api := baseURL + apiAddTemplate + return addTemplate(api, token, tid, desc, keywordIDList) +} + +func addTemplate(api, token, tid, desc string, keywordIDList []int32) (*AddTemplateResponse, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "tid": tid, + "kidList": keywordIDList, + "sceneDesc": desc, + } + + res := new(AddTemplateResponse) + err = postJSON(api, params, res) + if err != nil { + return nil, err + } + + return res, nil +} + +// DeleteTemplate 删除帐号下的某个模板 +// +// token 微信 access_token +// pid 模板ID +func DeleteTemplate(token, pid string) (*CommonError, error) { + api := baseURL + apiDeleteTemplate + return deleteTemplate(api, token, pid) +} + +func deleteTemplate(api, token, pid string) (*CommonError, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + params := requestParams{ + "priTmplId": pid, + } + + res := new(CommonError) + err = postJSON(api, params, res) + if err != nil { + return nil, err + } + + return res, nil +} + +// GetTemplateCategoryResponse 删除帐号下的某个模板返回数据 +type GetTemplateCategoryResponse struct { + CommonError + Data []struct { + ID int `json:"id"` // 类目id,查询公共库模版时需要 + Name string `json:"name"` // 类目的中文名 + } `json:"data"` // 类目列表 +} + +// GetTemplateCategory 删除帐号下的某个模板 +// +// token 微信 access_token +func GetTemplateCategory(token string) (*GetTemplateCategoryResponse, error) { + api := baseURL + apiGetTemplateCategory + return getTemplateCategory(token, api) +} + +func getTemplateCategory(token, api string) (*GetTemplateCategoryResponse, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetTemplateCategoryResponse) + err = getJSON(api, res) + if err != nil { + return nil, err + } + + return res, nil +} + +// GetPubTemplateKeyWordsByIdResponse 模板标题下的关键词列表 +type GetPubTemplateKeyWordsByIdResponse struct { + CommonError + Count int32 `json:"count"` // 模版标题列表总数 + Data []struct { + Kid int `json:"kid"` // 关键词 id,选用模板时需要 + Name string `json:"name"` // 关键词内容 + Example string `json:"example"` // 关键词内容对应的示例 + Rule string `json:"rule"` // 参数类型 + } `json:"data"` // 关键词列表 +} + +// GetPubTemplateKeyWordsById 获取模板标题下的关键词列表 +// +// token 微信 access_token +// tid 模板ID +func GetPubTemplateKeyWordsById(token, tid string) (*GetPubTemplateKeyWordsByIdResponse, error) { + api := baseURL + apiGetPubTemplateKeyWordsById + return getPubTemplateKeyWordsById(api, token, tid) +} + +func getPubTemplateKeyWordsById(api, token, tid string) (*GetPubTemplateKeyWordsByIdResponse, error) { + queries := requestQueries{ + "access_token": token, + "tid": tid, + } + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(GetPubTemplateKeyWordsByIdResponse) + if err = getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetPubTemplateTitleListResponse 帐号所属类目下的公共模板标题 +type GetPubTemplateTitleListResponse struct { + CommonError + Count uint `json:"count"` // 模版标题列表总数 + Data []struct { + Tid int `json:"tid"` // 模版标题 id + Title string `json:"title"` // 模版标题 + Type int32 `json:"type"` // 模版类型,2 为一次性订阅,3 为长期订阅 + CategoryId string `json:"categoryId"` // 模版所属类目 id + } `json:"data"` // 模板标题列表 +} + +// GetPubTemplateTitleList 获取帐号所属类目下的公共模板标题 +// +// token 微信 access_token +// ids 类目 id,多个用逗号隔开 +// start 用于分页,表示从 start 开始。从 0 开始计数。 +// limit 用于分页,表示拉取 limit 条记录。最大为 30 +func GetPubTemplateTitleList(token, ids string, start, limit int) (*GetPubTemplateTitleListResponse, error) { + api := baseURL + apiGetPubTemplateTitleList + return getPubTemplateTitleList(api, token, ids, start, limit) +} + +func getPubTemplateTitleList(api, token, ids string, start, limit int) (*GetPubTemplateTitleListResponse, error) { + + queries := requestQueries{ + "access_token": token, + "ids": ids, + "start": strconv.Itoa(start), + "limit": strconv.Itoa(limit), + } + + url, err := encodeURL(api, queries) + if err != nil { + return nil, err + } + + res := new(GetPubTemplateTitleListResponse) + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// GetTemplateListResponse 获取模板列表返回的数据 +type GetTemplateListResponse struct { + CommonError + Data []struct { + Pid string `json:"priTmplId"` // 添加至帐号下的模板 id,发送小程序订阅消息时所需 + Title string `json:"title"` // 模版标题 + Content string `json:"content"` // 模版内容 + Example string `json:"example"` // 模板内容示例 + Type int32 `json:"type"` // 模版类型,2 为一次性订阅,3 为长期订阅 + } `json:"data"` // 个人模板列表 +} + +// GetTemplateList 获取帐号下已存在的模板列表 +// +// token 微信 access_token +func GetTemplateList(token string) (*GetTemplateListResponse, error) { + api := baseURL + apiGetTemplateList + return getTemplateList(api, token) +} + +func getTemplateList(api, token string) (*GetTemplateListResponse, error) { + url, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(GetTemplateListResponse) + if err := getJSON(url, res); err != nil { + return nil, err + } + + return res, nil +} + +// SubscribeMessage 订阅消息 +type SubscribeMessage struct { + ToUser string `json:"touser"` + TemplateID string `json:"template_id"` + Page string `json:"page,omitempty"` + MiniprogramState MiniprogramState `json:"miniprogram_state,omitempty"` + Data SubscribeMessageData `json:"data"` +} + +// MiniprogramState 跳转小程序类型 +type MiniprogramState = string + +// developer为开发版;trial为体验版;formal为正式版;默认为正式版 +const ( + MiniprogramStateDeveloper = "developer" + MiniprogramStateTrial = "trial" + MiniprogramStateFormal = "formal" +) + +// SubscribeMessageData 订阅消息模板数据 +type SubscribeMessageData map[string]struct { + Value string `json:"value"` +} + +// Send 发送订阅消息 +// +// token access_token +func (sm *SubscribeMessage) Send(token string) (*CommonError, error) { + api := baseURL + apiSendSubscribeMessage + return sm.send(api, token) +} + +func (sm *SubscribeMessage) send(api, token string) (*CommonError, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := &CommonError{} + if err := postJSON(api, sm, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/subscribe_message_test.go b/app/lib/weapp/subscribe_message_test.go new file mode 100644 index 0000000..0662999 --- /dev/null +++ b/app/lib/weapp/subscribe_message_test.go @@ -0,0 +1,75 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestSendSubscribeMessage(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != "/cgi-bin/message/subscribe/send" { + t.Fatalf("Except path '/cgi-bin/message/subscribe/send' got '%s'", path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + ToUser string `json:"touser"` // 用户 openid + + TemplateID string `json:"template_id"` + Page string `json:"page,omitempty"` + Data map[string]struct { + Value string `json:"value"` + } `json:"data"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ToUser == "" { + t.Fatal("param touser can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + sender := SubscribeMessage{ + ToUser: "mock-open-id", + TemplateID: "mock-template-id", + Page: "mock-page", + MiniprogramState: MiniprogramStateDeveloper, + Data: SubscribeMessageData{ + "mock01.DATA": { + Value: "mock-value", + }, + }, + } + + _, err := sender.send(ts.URL+apiSendSubscribeMessage, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/title.png b/app/lib/weapp/title.png new file mode 100644 index 0000000..631f403 Binary files /dev/null and b/app/lib/weapp/title.png differ diff --git a/app/lib/weapp/uniform_message.go b/app/lib/weapp/uniform_message.go new file mode 100644 index 0000000..31cdb42 --- /dev/null +++ b/app/lib/weapp/uniform_message.go @@ -0,0 +1,73 @@ +package weapp + +const ( + apiSendUniformMessage = "/cgi-bin/message/wxopen/template/uniform_send" +) + +// UniformMsgData 模板消息内容 +type UniformMsgData map[string]UniformMsgKeyword + +// UniformMsgKeyword 关键字 +type UniformMsgKeyword struct { + Value string `json:"value"` + Color string `json:"color,omitempty"` +} + +// UniformWeappTmpMsg 小程序模板消息 +type UniformWeappTmpMsg struct { + TemplateID string `json:"template_id"` + Page string `json:"page"` + FormID string `json:"form_id"` + Data UniformMsgData `json:"data"` + EmphasisKeyword string `json:"emphasis_keyword,omitempty"` +} + +// UniformMsgMiniprogram 小程序 +type UniformMsgMiniprogram struct { + AppID string `json:"appid"` + PagePath string `json:"pagepath"` +} + +// UniformMpTmpMsg 公众号模板消息 +type UniformMpTmpMsg struct { + AppID string `json:"appid"` + TemplateID string `json:"template_id"` + URL string `json:"url"` + Miniprogram UniformMsgMiniprogram `json:"miniprogram"` + Data UniformMsgData `json:"data"` +} + +// Miniprogram 小程序 +type Miniprogram struct { + AppID string `json:"appid"` + PagePath string `json:"pagepath"` +} + +// UniformMsgSender 统一服务消息 +type UniformMsgSender struct { + ToUser string `json:"touser"` // 用户 openid + UniformWeappTmpMsg UniformWeappTmpMsg `json:"weapp_template_msg,omitempty"` + UniformMpTmpMsg UniformMpTmpMsg `json:"mp_template_msg,omitempty"` +} + +// Send 统一服务消息 +// +// token access_token +func (msg *UniformMsgSender) Send(token string) (*CommonError, error) { + api := baseURL + apiSendUniformMessage + return msg.send(api, token) +} + +func (msg *UniformMsgSender) send(api, token string) (*CommonError, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(api, msg, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/uniform_message_test.go b/app/lib/weapp/uniform_message_test.go new file mode 100644 index 0000000..2ad80f1 --- /dev/null +++ b/app/lib/weapp/uniform_message_test.go @@ -0,0 +1,102 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestSendUniformMessage(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + path := r.URL.EscapedPath() + if path != apiSendUniformMessage { + t.Fatalf("Except to path '%s',get '%s'", apiSendUniformMessage, path) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + ToUser string `json:"touser"` // 用户 openid + + UniformWeappTmpMsg struct { + TemplateID string `json:"template_id"` + Page string `json:"page"` + FormID string `json:"form_id"` + Data map[string]struct { + Value string `json:"value"` + } `json:"data"` + EmphasisKeyword string `json:"emphasis_keyword"` + } `json:"weapp_template_msg"` + UniformMpTmpMsg struct { + AppID string `json:"appid"` + TemplateID string `json:"template_id"` + URL string `json:"url"` + Miniprogram struct { + AppID string `json:"appid"` + PagePath string `json:"pagepath"` + } `json:"miniprogram"` + Data map[string]struct { + Value string `json:"value"` + Color string `json:"color,omitempty"` + } `json:"data"` + } `json:"mp_template_msg"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ToUser == "" { + t.Fatal("param touser can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + sender := UniformMsgSender{ + ToUser: "mock-open-id", + UniformWeappTmpMsg: UniformWeappTmpMsg{ + TemplateID: "mock-template-id", + Page: "mock-page", + FormID: "mock-form-id", + Data: UniformMsgData{ + "mock-keyword": UniformMsgKeyword{Value: "mock-value"}, + }, + EmphasisKeyword: "mock-keyword.DATA", + }, + UniformMpTmpMsg: UniformMpTmpMsg{ + AppID: "mock-app-id", + TemplateID: "mock-template-id", + URL: "mock-url", + Miniprogram: UniformMsgMiniprogram{"mock-miniprogram-app-id", "mock-page-path"}, + Data: UniformMsgData{ + "mock-keyword": UniformMsgKeyword{"mock-value", "mock-color"}, + }, + }, + } + + _, err := sender.send(ts.URL+apiSendUniformMessage, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/updatable_message.go b/app/lib/weapp/updatable_message.go new file mode 100644 index 0000000..d6016fa --- /dev/null +++ b/app/lib/weapp/updatable_message.go @@ -0,0 +1,99 @@ +package weapp + +const ( + apiCreateActivityID = "/cgi-bin/message/wxopen/activityid/create" + apiSetUpdatableMsg = "/cgi-bin/message/wxopen/updatablemsg/send" +) + +// CreateActivityIDResponse 动态消息 +type CreateActivityIDResponse struct { + CommonError + ActivityID string `json:"activity_id"` // 动态消息的 ID + ExpirationTime uint `json:"expiration_time"` // activity_id 的过期时间戳。默认24小时后过期。 +} + +// CreateActivityID 创建被分享动态消息的 activity_id。 +// token 接口调用凭证 +func CreateActivityID(token string) (*CreateActivityIDResponse, error) { + api := baseURL + apiCreateActivityID + return createActivityID(api, token) +} + +func createActivityID(api, token string) (*CreateActivityIDResponse, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CreateActivityIDResponse) + if err := getJSON(api, res); err != nil { + return nil, err + } + + return res, nil +} + +// UpdatableMsgTempInfo 动态消息对应的模板信息 +type UpdatableMsgTempInfo struct { + ParameterList []UpdatableMsgParameter `json:"parameter_list"` // 模板中需要修改的参数列表 +} + +// UpdatableMsgParameter 参数 +// member_count target_state = 0 时必填,文字内容模板中 member_count 的值 +// room_limit target_state = 0 时必填,文字内容模板中 room_limit 的值 +// path target_state = 1 时必填,点击「进入」启动小程序时使用的路径。 +// 对于小游戏,没有页面的概念,可以用于传递查询字符串(query),如 "?foo=bar" +// version_type target_state = 1 时必填,点击「进入」启动小程序时使用的版本。 +// 有效参数值为:develop(开发版),trial(体验版),release(正式版) +type UpdatableMsgParameter struct { + Name UpdatableMsgParamName `json:"name"` // 要修改的参数名 + Value string `json:"value"` // 修改后的参数值 +} + +// UpdatableMsgTargetState 动态消息修改后的状态 +type UpdatableMsgTargetState = uint8 + +// 动态消息状态 +const ( + UpdatableMsgJoining UpdatableMsgTargetState = iota // 未开始 + UpdatableMsgStarted // 已开始 +) + +// UpdatableMsgParamName 参数 name 的合法值 +type UpdatableMsgParamName = string + +// 动态消息状态 +const ( + UpdatableMsgParamMemberCount UpdatableMsgParamName = "member_count" // target_state = 0 时必填,文字内容模板中 member_count 的值 + UpdatableMsgParamRoomLimit = "room_limit" // target_state = 0 时必填,文字内容模板中 room_limit 的值 + UpdatableMsgParamPath = "path" // target_state = 1 时必填,点击「进入」启动小程序时使用的路径。 对于小游戏,没有页面的概念,可以用于传递查询字符串(query),如 "?foo=bar" + UpdatableMsgParamVersionType = "version_type" // target_state = 1 时必填,点击「进入」启动小程序时使用的版本。有效参数值为:develop(开发版),trial(体验版),release(正式版) +) + +// UpdatableMsgSetter 动态消息 +type UpdatableMsgSetter struct { + ActivityID string `json:"activity_id"` // 动态消息的 ID,通过 updatableMessage.createActivityId 接口获取 + TargetState UpdatableMsgTargetState `json:"target_state"` // 动态消息修改后的状态(具体含义见后文) + TemplateInfo UpdatableMsgTempInfo `json:"template_info"` // 动态消息对应的模板信息 +} + +// Set 修改被分享的动态消息。 +// accessToken 接口调用凭证 +func (setter *UpdatableMsgSetter) Set(token string) (*CommonError, error) { + api := baseURL + apiSetUpdatableMsg + return setter.set(api, token) +} + +func (setter *UpdatableMsgSetter) set(api, token string) (*CommonError, error) { + api, err := tokenAPI(api, token) + if err != nil { + return nil, err + } + + res := new(CommonError) + if err := postJSON(api, setter, res); err != nil { + return nil, err + } + + return res, nil +} diff --git a/app/lib/weapp/updatable_message_test.go b/app/lib/weapp/updatable_message_test.go new file mode 100644 index 0000000..3e200d3 --- /dev/null +++ b/app/lib/weapp/updatable_message_test.go @@ -0,0 +1,129 @@ +package weapp + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestCreateActivityID(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "GET" { + t.Fatalf("Expect 'GET' get '%s'", r.Method) + } + + realPath := r.URL.EscapedPath() + expectPath := "/cgi-bin/message/wxopen/activityid/create" + if realPath != expectPath { + t.Fatalf("Expect to path '%s',get '%s'", expectPath, realPath) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "expiration_time": 1000, + "activity_id": "ok", + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + res, err := createActivityID(ts.URL+apiCreateActivityID, "mock-access-token") + if err != nil { + t.Fatal(err) + } + + if res.ActivityID == "" { + t.Error("Response column activity_id can not be empty") + } + + if res.ExpirationTime == 0 { + t.Error("Response column expiration_time can not be zero") + } +} + +func TestSetUpdatableMsg(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + if r.Method != "POST" { + t.Fatalf("Expect 'POST' get '%s'", r.Method) + } + + realPath := r.URL.EscapedPath() + expectPath := "/cgi-bin/message/wxopen/updatablemsg/send" + if realPath != expectPath { + t.Fatalf("Expect to path '%s',get '%s'", expectPath, realPath) + } + + if err := r.ParseForm(); err != nil { + t.Fatal(err) + } + + if r.Form.Get("access_token") == "" { + t.Fatalf("access_token can not be empty") + } + + params := struct { + ActivityID string `json:"activity_id"` + TargetState uint8 `json:"target_state"` + TemplateInfo struct { + ParameterList []struct { + Name string `json:"name"` + Value string `json:"value"` + } `json:"parameter_list"` + } `json:"template_info"` + }{} + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + t.Fatal(err) + } + + if params.ActivityID == "" { + t.Fatal("param activity_id can not be empty") + } + + if len(params.TemplateInfo.ParameterList) == 0 { + t.Fatal("param template_info.parameter_list can not be empty") + } + + w.WriteHeader(http.StatusOK) + + raw := `{ + "errcode": 0, + "errmsg": "ok" + }` + if _, err := w.Write([]byte(raw)); err != nil { + t.Fatal(err) + } + })) + defer ts.Close() + + setter := UpdatableMsgSetter{ + "mock-activity-id", + UpdatableMsgJoining, + UpdatableMsgTempInfo{ + []UpdatableMsgParameter{ + {UpdatableMsgParamMemberCount, "mock-parameter-value-number"}, + {UpdatableMsgParamRoomLimit, "mock-parameter-value-number"}, + }, + }, + } + + _, err := setter.set(ts.URL+apiSetUpdatableMsg, "mock-access-token") + if err != nil { + t.Fatal(err) + } +} diff --git a/app/lib/weapp/util.go b/app/lib/weapp/util.go new file mode 100644 index 0000000..edf9b46 --- /dev/null +++ b/app/lib/weapp/util.go @@ -0,0 +1,149 @@ +package weapp + +import ( + "bytes" + "crypto/tls" + "encoding/json" + "io" + "log" + "math/rand" + "mime/multipart" + "net/http" + "net/url" + "os" + "time" +) + +// tokenAPI 获取带 token 的 API 地址 +func tokenAPI(api, token string) (string, error) { + queries := requestQueries{ + "access_token": token, + } + + return encodeURL(api, queries) +} + +// encodeURL add and encode parameters. +func encodeURL(api string, params requestQueries) (string, error) { + url, err := url.Parse(api) + if err != nil { + return "", err + } + + query := url.Query() + + for k, v := range params { + query.Set(k, v) + } + + url.RawQuery = query.Encode() + + return url.String(), nil +} + +// randomString random string generator +// +// ln length of return string +func randomString(ln int) string { + letters := []rune("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") + b := make([]rune, ln) + r := rand.New(rand.NewSource(time.Now().UnixNano())) + for i := range b { + b[i] = letters[r.Intn(len(letters))] + } + + return string(b) +} + +// postJSON perform a HTTP/POST request with json body +func postJSON(url string, params interface{}, response interface{}) error { + resp, err := postJSONWithBody(url, params) + if err != nil { + return err + } + defer resp.Body.Close() + + return json.NewDecoder(resp.Body).Decode(response) +} + +func getJSON(url string, response interface{}) error { + resp, err := httpClient().Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + return json.NewDecoder(resp.Body).Decode(response) +} + +// postJSONWithBody return with http body. +func postJSONWithBody(url string, params interface{}) (*http.Response, error) { + b := &bytes.Buffer{} + if params != nil { + enc := json.NewEncoder(b) + enc.SetEscapeHTML(false) + err := enc.Encode(params) + if err != nil { + return nil, err + } + } + + return httpClient().Post(url, "application/json; charset=utf-8", b) +} + +func postFormByFile(url, field, filename string, response interface{}) error { + // Add your media file + file, err := os.Open(filename) + if err != nil { + return err + } + defer file.Close() + + return postForm(url, field, filename, file, response) +} + +func postForm(url, field, filename string, reader io.Reader, response interface{}) error { + // Prepare a form that you will submit to that URL. + buf := new(bytes.Buffer) + w := multipart.NewWriter(buf) + fw, err := w.CreateFormFile(field, filename) + if err != nil { + return err + } + + if _, err = io.Copy(fw, reader); err != nil { + return err + } + + // Don't forget to close the multipart writer. + // If you don't close it, your request will be missing the terminating boundary. + w.Close() + + // Now that you have a form, you can submit it to your handler. + req, err := http.NewRequest("POST", url, buf) + if err != nil { + return err + } + // Don't forget to set the content type, this will contain the boundary. + req.Header.Set("Content-Type", w.FormDataContentType()) + + // Submit the request + client := httpClient() + + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + return json.NewDecoder(resp.Body).Decode(response) +} + +func httpClient() *http.Client { + log.Print("myweapp use http") + return &http.Client{ + Timeout: 10 * time.Second, + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + } +} diff --git a/app/lib/weapp/weapp.go b/app/lib/weapp/weapp.go new file mode 100644 index 0000000..5577192 --- /dev/null +++ b/app/lib/weapp/weapp.go @@ -0,0 +1,12 @@ +package weapp + +const ( + // baseURL 微信请求基础URL + baseURL = "https://api.weixin.qq.com" +) + +// POST 参数 +type requestParams map[string]interface{} + +// URL 参数 +type requestQueries map[string]string diff --git a/app/lib/wechat/.gitignore b/app/lib/wechat/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/app/lib/wechat/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/app/lib/wxpay/.gitignore b/app/lib/wxpay/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/app/lib/wxpay/api.go b/app/lib/wxpay/api.go new file mode 100644 index 0000000..275623d --- /dev/null +++ b/app/lib/wxpay/api.go @@ -0,0 +1,303 @@ +package wxpay + +import ( + "applet/app/utils" + "applet/app/utils/logx" + "fmt" + "github.com/iGoogle-ink/gopay" + "github.com/iGoogle-ink/gopay/pkg/util" + "github.com/iGoogle-ink/gopay/wechat" + v3 "github.com/iGoogle-ink/gopay/wechat/v3" + "strconv" + "time" +) + +func NewClient(appId, mchId, apiKey string, isProd bool) *wechat.Client { + // 初始化微信客户端 + // appId:应用ID + // mchId:商户ID + // apiKey:API秘钥值 + // isProd:是否是正式环境 + client := wechat.NewClient(appId, mchId, apiKey, isProd) + // 打开Debug开关,输出请求日志,默认关闭 + client.DebugSwitch = gopay.DebugOn + // 设置国家:不设置默认 中国国内 + // wechat.China:中国国内 + // wechat.China2:中国国内备用 + // wechat.SoutheastAsia:东南亚 + // wechat.Other:其他国家 + client.SetCountry(wechat.China) + // 添加微信证书 Path 路径 + // certFilePath:apiclient_cert.pem 路径 + // keyFilePath:apiclient_key.pem 路径 + // pkcs12FilePath:apiclient_cert.p12 路径 + // 返回err + //client.AddCertFilePath() + + // 添加微信证书内容 Content + // certFileContent:apiclient_cert.pem 内容 + // keyFileContent:apiclient_key.pem 内容 + // pkcs12FileContent:apiclient_cert.p12 内容 + // 返回err + //client.AddCertFileContent() + return client +} + +// TradeAppPay is 微信APP支付 +func TradeAppPay(client *wechat.Client, subject, orderID, amount, notifyUrl string) (map[string]string, error) { + // 初始化 BodyMap + bm := make(gopay.BodyMap) + bm.Set("nonce_str", util.GetRandomString(32)). + Set("body", subject). + Set("out_trade_no", orderID). + Set("total_fee", amount). + Set("spbill_create_ip", "127.0.0.1"). + Set("notify_url", notifyUrl). + Set("trade_type", wechat.TradeType_App). + Set("sign_type", wechat.SignType_MD5) + /*.Set("openid", "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")*/ + // 预下单 + wxRsp, err := client.UnifiedOrder(bm) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + _, err = wechat.VerifySign(client.ApiKey, wechat.SignType_MD5, wxRsp) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + //if !ok { + // return nil, errors.New("验签失败") + //} + timeStamp := strconv.FormatInt(time.Now().Unix(), 10) + paySign := wechat.GetAppPaySign(client.AppId, client.MchId, wxRsp.NonceStr, wxRsp.PrepayId, wechat.SignType_MD5, timeStamp, client.ApiKey) + res := map[string]string{ + "appid": client.AppId, + "partnerid": client.MchId, + "prepayid": wxRsp.PrepayId, + "sign": paySign, + "package": "Sign=WXPay", + "noncestr": wxRsp.NonceStr, + "timestamp": timeStamp, + } + return res, nil +} + +// TradeAppPay is 微信H5支付 +func TradeH5Pay(client *wechat.Client, subject, orderID, amount, notifyUrl string) (map[string]string, error) { + // 初始化 BodyMap + bm := make(gopay.BodyMap) + bm.Set("nonce_str", util.GetRandomString(32)). + Set("body", subject). + Set("out_trade_no", orderID). + Set("total_fee", amount). + Set("spbill_create_ip", "121.196.29.49"). + Set("notify_url", notifyUrl). + Set("trade_type", wechat.TradeType_H5). + Set("sign_type", wechat.SignType_MD5). + SetBodyMap("scene_info", func(bm gopay.BodyMap) { + bm.SetBodyMap("h5_info", func(bm gopay.BodyMap) { + bm.Set("type", "Wap") + bm.Set("wap_url", "https://www.fumm.cc") + bm.Set("wap_name", "zyos") + }) + }) + /*.Set("openid", "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")*/ + // 预下单 + wxRsp, err := client.UnifiedOrder(bm) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + _, err = wechat.VerifySign(client.ApiKey, wechat.SignType_MD5, wxRsp) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + timeStamp := strconv.FormatInt(time.Now().Unix(), 10) + packages := "prepay_id=" + wxRsp.PrepayId + paySign := wechat.GetH5PaySign(client.AppId, wxRsp.NonceStr, packages, wechat.SignType_MD5, timeStamp, client.ApiKey) + fmt.Println("paySign===", paySign) + r := map[string]string{ + "redirect_url": wxRsp.MwebUrl, + } + return r, nil +} + +// TradeMiniProgPay is 微信小程序支付 ☑️ +func TradeMiniProgPay(client *wechat.Client, subject, orderID, amount, notifyUrl, openid string) (map[string]string, error) { + // 初始化 BodyMap + bm := make(gopay.BodyMap) + bm.Set("nonce_str", util.GetRandomString(32)). + Set("body", subject). + Set("openid", openid). + Set("out_trade_no", orderID). + Set("total_fee", amount). + Set("spbill_create_ip", "127.0.0.1"). + Set("notify_url", notifyUrl). + Set("trade_type", wechat.TradeType_Mini). + Set("sign_type", wechat.SignType_MD5) + // 预下单 + wxRsp, err := client.UnifiedOrder(bm) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + fmt.Println(wxRsp) + timeStamp := strconv.FormatInt(time.Now().Unix(), 10) + packages := "prepay_id=" + wxRsp.PrepayId + paySign := wechat.GetMiniPaySign(client.AppId, wxRsp.NonceStr, packages, wechat.SignType_MD5, timeStamp, client.ApiKey) + res := map[string]string{ + "appId": client.AppId, + "paySign": paySign, + "signType": wechat.SignType_MD5, + "package": packages, + "nonceStr": wxRsp.NonceStr, + "timeStamp": timeStamp, + } + return res, nil +} + +// TradeAppPayV3 is 微信APP支付v3 +func TradeAppPayV3(client *v3.ClientV3, subject, orderID, amount, notifyUrl string) (map[string]string, error) { + // 初始化 BodyMap + amountNew := utils.AnyToFloat64(amount) * 100 + bm := make(gopay.BodyMap) + bm.Set("nonce_str", util.GetRandomString(32)). + Set("body", subject). + Set("out_trade_no", orderID). + Set("total_fee", amountNew). + Set("spbill_create_ip", "127.0.0.1"). + Set("notify_url", notifyUrl). + Set("trade_type", wechat.TradeType_App). + Set("sign_type", wechat.SignType_MD5) + /*.Set("openid", "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")*/ + //// 预下单 + //wxRsp, err := v3.UnifiedOrder(bm) + //if err != nil { + // _ = logx.Warn(err) + // return nil, err + //} + //_, err = wechat.VerifySign(client.ApiKey, wechat.SignType_MD5, wxRsp) + //if err != nil { + // _ = logx.Warn(err) + // return nil, err + //} + ////if !ok { + //// return nil, errors.New("验签失败") + ////} + //timeStamp := strconv.FormatInt(time.Now().Unix(), 10) + //paySign := wechat.GetAppPaySign(client.AppId, client.MchId, wxRsp.NonceStr, wxRsp.PrepayId, wechat.SignType_MD5, timeStamp, client.ApiKey) + //res := map[string]string{ + // "appid": client.AppId, + // "partnerid": client.MchId, + // "prepayid": wxRsp.PrepayId, + // "sign": paySign, + // "package": "Sign=WXPay", + // "noncestr": wxRsp.NonceStr, + // "timestamp": timeStamp, + //} + //return res, nil + return nil, nil +} + +//// TradeJSAPIPay is 微信JSAPI支付 +func TradeJSAPIPay(client *wechat.Client, subject, orderID, amount, notifyUrl, openid string) (map[string]string, error) { + // 初始化 BodyMap + bm := make(gopay.BodyMap) + bm.Set("nonce_str", util.GetRandomString(32)). + Set("body", subject). + Set("out_trade_no", orderID). + Set("total_fee", amount). + Set("spbill_create_ip", "121.196.29.49"). + Set("notify_url", notifyUrl). + Set("trade_type", wechat.TradeType_JsApi). + Set("sign_type", wechat.SignType_MD5). + Set("openid", openid). + SetBodyMap("scene_info", func(bm gopay.BodyMap) { + bm.SetBodyMap("h5_info", func(bm gopay.BodyMap) { + bm.Set("type", "Wap") + bm.Set("wap_url", "https://www.fumm.cc") + bm.Set("wap_name", "zyos") + }) + }) + // 预下单 + wxRsp, err := client.UnifiedOrder(bm) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + _, err = wechat.VerifySign(client.ApiKey, wechat.SignType_MD5, wxRsp) + if err != nil { + _ = logx.Warn(err) + return nil, err + } + //if !ok { + // return nil, errors.New("验签失败") + //} + timeStamp := strconv.FormatInt(time.Now().Unix(), 10) + //paySign := wechat.GetAppPaySign(client.AppId, client.MchId, wxRsp.NonceStr, wxRsp.PrepayId, wechat.SignType_MD5, timeStamp, client.ApiKey) + packages := "prepay_id=" + wxRsp.PrepayId + paySign := wechat.GetJsapiPaySign(client.AppId, wxRsp.NonceStr, packages, wechat.SignType_MD5, timeStamp, client.ApiKey) + + logx.Info("wxRsp.PrepayId:" + wxRsp.PrepayId) + logx.Info("wxRsp.PrepayId:" + wxRsp.PrepayId) + logx.Info("wxRsp.PrepayId:" + openid) + res := map[string]string{ + "appid": client.AppId, + "partnerid": client.MchId, + "prepayid": wxRsp.PrepayId, + "sign": paySign, + "package": "prepay_id=" + wxRsp.PrepayId, + "noncestr": wxRsp.NonceStr, + "timestamp": timeStamp, + } + return res, nil +} + +// TradeH5PayV3 is 微信H5支付v3 +func TradeH5PayV3(client *wechat.Client, subject, orderID, amount, notifyUrl string) (string, error) { + // 初始化 BodyMap + bm := make(gopay.BodyMap) + bm.Set("nonce_str", util.GetRandomString(32)). + Set("body", subject). + Set("out_trade_no", orderID). + Set("total_fee", amount). + Set("spbill_create_ip", "127.0.0.1"). + Set("notify_url", notifyUrl). + Set("trade_type", wechat.TradeType_App). + Set("device_info", "WEB"). + Set("sign_type", wechat.SignType_MD5). + SetBodyMap("scene_info", func(bm gopay.BodyMap) { + bm.SetBodyMap("h5_info", func(bm gopay.BodyMap) { + bm.Set("type", "Wap") + bm.Set("wap_url", "https://www.fumm.cc") + bm.Set("wap_name", "H5测试支付") + }) + }) /*.Set("openid", "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")*/ + // 预下单 + wxRsp, err := client.UnifiedOrder(bm) + if err != nil { + _ = logx.Warn(err) + return "", err + } + // ====APP支付 paySign==== + timeStamp := strconv.FormatInt(time.Now().Unix(), 10) + // 获取APP支付的 paySign + // 注意:package 参数因为是固定值,无需开发者再传入 + // appId:AppID + // partnerid:partnerid + // nonceStr:随机字符串 + // prepayId:统一下单成功后得到的值 + // signType:签名方式,务必与统一下单时用的签名方式一致 + // timeStamp:时间 + // apiKey:API秘钥值 + paySign := wechat.GetAppPaySign(client.AppId, client.MchId, wxRsp.NonceStr, wxRsp.PrepayId, wechat.SignType_MD5, timeStamp, client.ApiKey) + return paySign, nil +} + +// TradeMiniProgPayV3 is 微信小程序支付v3 +func TradeMiniProgPayV3(client *v3.ClientV3, subject, orderID, amount, notifyUrl string) (string, error) { + return "", nil +} diff --git a/app/md/alipay.go b/app/md/alipay.go new file mode 100644 index 0000000..0eafa67 --- /dev/null +++ b/app/md/alipay.go @@ -0,0 +1,69 @@ +package md + +// AliPayCallback 支付宝的回调结构体 +type AliPayCallback struct { + AppID string `json:"app_id"` + AuthAppID string `json:"auth_app_id"` + BuyerID string `json:"buyer_id"` + BuyerLogonID string `json:"buyer_logon_id"` + BuyerPayAmount string `json:"buyer_pay_amount"` + Charset string `json:"charset"` + FundBillList string `json:"fund_bill_list"` + GmtCreate string `json:"gmt_create"` + GmtPayment string `json:"gmt_payment"` + InvoiceAmount string `json:"invoice_amount"` + OrderType string `json:"order_type"` + MasterID string `json:"master_id"` + NotifyID string `json:"notify_id"` + NotifyTime string `json:"notify_time"` + NotifyType string `json:"notify_type"` + OutTradeNo string `json:"out_trade_no"` + PassbackParams string `json:"passback_params"` + PointAmount string `json:"point_amount"` + ReceiptAmount string `json:"receipt_amount"` + SellerEmail string `json:"seller_email"` + SellerID string `json:"seller_id"` + Sign string `json:"sign"` + SignType string `json:"sign_type"` + Subject string `json:"subject"` + TotalAmount string `json:"total_amount"` + TradeNo string `json:"trade_no"` + TradeStatus string `json:"trade_status"` + Version string `json:"version"` + PayMethod string `json:"pay_method"` +} + +type AliPayPayParams struct { + Subject string `json:"subject" binding:"required"` + Amount string `json:"amount" binding:"required"` + OrderType string `json:"order_type" binding:"required"` + OrdId string `json:"ord_id"` + Uid string `json:"uid"` + Phone string `json:"phone"` +} +type PayData struct { + PayAppCertSn string `json:"pay_app_cert_sn"` + PayAlipayRootCertSn string `json:"pay_alipay_root_cert_sn"` + PayAlipayrsaPublicKey string `json:"pay_alipayrsa_public_key"` + PayAliUseType string `json:"pay_ali_use_type"` + PriKey string `json:"pay_ali_new_private_key"` +} + +type AlipayUserCertdocCertverifyPreconsult struct { + AlipayUserCertdocCertverifyPreconsultResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + VerifyID string `json:"verify_id"` + } `json:"alipay_user_certdoc_certverify_preconsult_response"` + Sign string `json:"sign"` +} +type AlipayUserCertdocCertverifyConsult struct { + AlipayUserCertdocCertverifyConsultResponse struct { + Code string `json:"code"` + FailParams string `json:"fail_params"` + FailReason string `json:"fail_reason"` + Msg string `json:"msg"` + Passed string `json:"passed"` + } `json:"alipay_user_certdoc_certverify_consult_response"` + Sign string `json:"sign"` +} diff --git a/app/md/app_redis_key.go b/app/md/app_redis_key.go new file mode 100644 index 0000000..3ffa25f --- /dev/null +++ b/app/md/app_redis_key.go @@ -0,0 +1,23 @@ +package md + +// 缓存key统一管理, %s格式化为masterId +const ( + AppCfgCacheKey = "%s:app_cfg_cache:" // 占位符: masterId, key的第一个字母 + VirtualCoinCfgCacheKey = "%s:virtual_coin_cfg" + PlanRewardCfgCacheKey = "%s:plan_reward_cfg" + UnionSetCacheCfg = "%s:union_set_cfg:%s" // 联盟设置缓存key + + UserFinValidUpdateLock = "%s:user_fin_valid_update_lock:%s" // 用户余额更新锁(能拿到锁才能更新余额) + + WithdrawApplyQueueListKey = "withdraw_apply_queue" // 提现队列 + + TplBottomNavRedisKey = "%s:tpl_nav_bottom_key:%s" // master_id platform + + SysModByIdRedisKey = "%s:sys_mod_tpl_by_id:%s" + + AppLimiterLock = "%s:ZhiOs_app_limiter_lock:%s" // 限流器锁 + DealAppLimiterRequestIdPrefix = "%s:ZhiOs_app_comm_limiter_request_id:%s" + DealAppNewcomersLimiterRequestIdPrefix = "%s:ZhiOs_app_newcomers_limiter_request_id:%s" + + CfgCacheTime = 60 * 60 * 4 +) diff --git a/app/md/cfg_key.go b/app/md/cfg_key.go new file mode 100644 index 0000000..f93828d --- /dev/null +++ b/app/md/cfg_key.go @@ -0,0 +1,282 @@ +package md + +// 获取用户的缓存key +const ( + KEY_SYS_CFG_CACHE = "sys_cfg_cache" + FunctionPermissionCfgCacheKey = "%s:function_permission_cfg" + // 文件缓存的key + KEY_CFG_FILE_PVD = "file_provider" // 文件供应商 + KEY_CFG_FILE_BUCKET = "file_bucket" + KEY_CFG_FILE_REGION = "file_bucket_region" + KEY_CFG_FILE_HOST = "file_bucket_host" + KEY_CFG_FILE_SCHEME = "file_bucket_scheme" + KEY_CFG_FILE_AK = "file_access_key" + KEY_CFG_FILE_SK = "file_secret_key" + KEY_CFG_FILE_MAX_SIZE = "file_user_upload_max_size" + KEY_CFG_FILE_EXT = "file_ext" + KEY_CFG_FILE_AVATAR_THUMBNAIL = "file_avatar_thumbnail" // 默认头像缩略图参数,宽高120px,格式webp. + // 智盟 + KEY_CFG_ZM_JD_SITE_ID = "third_zm_jd_site_id" // 智盟京东联盟id + KEY_CFG_ZM_WEB_ID = "third_zm_web_id" // 智盟网站ID + KEY_CFG_ZM_AK = "third_zm_app_key" + KEY_CFG_ZM_SK = "third_zm_app_secret" + KEY_CFG_ZM_SMS_AK = "third_zm_sms_ak" + KEY_CFG_ZM_SMS_SK = "third_zm_sms_sk" + KEY_CFG_APP_NAME = "app_name" + + KEY_CFG_WHITELIST = "api_cfg_whitelist" // API允许的访问的设置白名单 + + // 淘宝 + KEY_CFG_TB_AUTH_AK = "third_taobao_auth_ak" + KEY_CFG_TB_AUTH_SK = "third_taobao_auth_sk" + KEY_CFG_TB_INVITER_CODE = "third_taobao_auth_inviter_code" + KEY_CFG_TB_AK = "third_taobao_ak" + KEY_CFG_TB_SK = "third_taobao_sk" + KEY_CFG_TB_PID = "third_taobao_pid" // 淘宝推广ID,如:mm_123_456_789,123是联盟ID,456是site_id,789是adzone_id + KEY_CFG_TB_SID = "third_taobao_sid" // 淘宝session id ,又称access_token + + // 苏宁 + KEY_CFG_SN_AK = "third_suning_ak" + KEY_CFG_SN_SK = "third_suning_sk" + + KEY_CFG_JD_AK = "" + KEY_CFG_JD_SK = "" + + KEY_CFG_KL_AK = "third_kaola_ak" + KEY_CFG_KL_SK = "third_kaola_sk" + + KEY_CFG_VIP_AK = "" + KEY_CFG_VIP_SK = "" + + // 自动任务配置 + KEY_CFG_CRON_TB = "cron_order_taobao" + KEY_CFG_CRON_TBSETTLEORDER = "cron_order_taobao_settle_order" + KEY_CFG_CRON_JD = "cron_order_jd" + KEY_CFG_CRON_PDD = "cron_order_pdd" + KEY_CFG_CRON_PDD_SUCC = "cron_order_pdd_succ" + KEY_CFG_CRON_PDDBYCREATETIME = "cron_order_pdd_by_create_time" + KEY_CFG_CRON_PDDBYLOOPTIME = "cron_order_pdd_by_loop_time" + KEY_CFG_CRON_PDDBYLOOPMONTHTIME = "cron_order_pdd_by_loop_month_ago_time" + KEY_CFG_CRON_JDBYCREATETIME = "cron_order_jd_by_create_time" + KEY_CFG_CRON_JDBYSUCCESS = "cron_order_jd_by_success" + KEY_CFG_CRON_JDFAILBYCREATETIME = "cron_order_jd_fail_by_create_time" + KEY_CFG_CRON_PDDBYAGOTIME = "cron_order_pdd_by_ago_time" + KEY_CFG_CRON_PDDBYSTATUS = "cron_order_pdd_by_status" + KEY_CFG_CRON_PDDBYSTATUSSUCCESS = "cron_order_pdd_by_status_success" + KEY_CFG_CRON_PDDBYSTATUSFAIL = "cron_order_pdd_by_status_fail" + KEY_CFG_CRON_JDBYSTATUS = "cron_order_jd_by_status" + KEY_CFG_CRON_TBBYAGOTIME = "cron_order_tb_by_ago_time" + KEY_CFG_CRON_TBBYPAY = "cron_order_tb_by_pay" + KEY_CFG_CRON_TB12 = "cron_order_tb12" + KEY_CFG_CRON_TB13 = "cron_order_tb13" + KEY_CFG_CRON_TB3 = "cron_order_tb3" + KEY_CFG_CRON_TB14 = "cron_order_tb14" + + KEY_CFG_CRON_PDDREFUND = "cron_order_pdd_refund" + KEY_CFG_CRON_TBREFUND = "cron_order_tb_refund" + KEY_CFG_CRON_WPHREFUND = "cron_order_wph_refund" + KEY_CFG_CRON_JDREFUND = "cron_order_jd_refund" + KEY_CFG_CRON_SN = "cron_order_suning" + KEY_CFG_CRON_VIP = "cron_order_vip" + KEY_CFG_CRON_KL = "cron_order_kaola" + KEY_CFG_CRON_DUOMAI = "cron_order_duomai" + KEY_CFG_CRON_HIS = "cron_order_his" // 迁移到历史订单 + KEY_CFG_CRON_SETTLE = "cron_order_settle" //结算 + KEY_CFG_CRON_FREE_SETTLE = "cron_order_free_settle" //结算 + KEY_CFG_CRON_SECOND_FREE_SETTLE = "cron_order_second_free_settle" + KEY_CFG_CRON_THIRD_FREE_SETTLE = "cron_order_third_free_settle" + KEY_CFG_CRON_ACQUISTION_SETTLE = "cron_acquistion_settle" // 拉新结算 + KEY_CFG_CRON_NEW_ACQUISTION_SETTLE = "cron_new_acquistion_settle" // 拉新结算 + KEY_CFG_CRON_PUBLISHER = "cron_taobao_publisher" // 跟踪淘宝备案信息绑定会员运营id 针对小程序 + KEY_CFG_CRON_AUTO_UN_FREEZE = "cron_auto_un_freeze" + KEY_CFG_CRON_MEITUAN = "cron_order_meituan_fxlm" //美团 + KEY_CFG_CRON_MEITUANLM = "cron_order_meituan_lm" //美团联盟 + KEY_CFG_CRON_MEITUANLM_START = "cron_order_meituan_lm_start" //美团联盟 + KEY_CFG_CRON_ORDER_SUCCESS_CHECK = "cron_order_success_check" + KEY_CFG_CRON_MEITUAN_START = "cron_order_meituan_start" //美团联盟 + KEY_CFG_CRON_STARBUCKS = "cron_order_starbucks" //海威星巴克 + KEY_CFG_CRON_HWMOVIE = "cron_order_hw_movie" //海威电影票 + KEY_CFG_CRON_MCDONALD = "cron_order_mcdonald" //海威麦当劳 + KEY_CFG_CRON_NAYUKI = "cron_order_nayuki" //海威奈雪 + KEY_CFG_CRON_BURGERKING = "cron_order_burger_king" //海威汉堡王 + KEY_CFG_CRON_HEYTEA = "cron_order_heytea" //海威喜茶 + KEY_CFG_CRON_TIKTOKLIFE = "cron_order_tik_tok_life" // + KEY_CFG_CRON_FAST_REFUND = "cron_order_fast_refund" + KEY_CFG_CRON_CHECK_GUIDE_STORE_ORDER = "cron_check_guide_store_order" + KEY_CFG_CRON_CHECK_BUCKLE_ORDER = "cron_check_buckle_order" + KEY_CFG_CRON_BUCKLE = "cron_order_buckle" + KEY_CFG_CRON_FAST_SUCCESS = "cron_order_fast_success" + KEY_CFG_CRON_PIZZA = "cron_order_pizza" //海威 + KEY_CFG_CRON_WALLACE = "cron_order_wallace" //海威 + KEY_CFG_CRON_TOURISM = "cron_order_tourism" //海威 + KEY_CFG_CRON_NEAR = "cron_order_near" //海威 + KEY_CFG_CRON_FLOWERCAKE = "cron_order_flowerCake" //海威 + KEY_CFG_CRON_DELIVERY = "cron_order_delivery" //海威 + KEY_CFG_CRON_TO_KFC = "cron_order_to_kfc" // + KEY_CFG_CRON_PAGODA = "cron_order_pagoda" // + KEY_CFG_CRON_LUCKIN = "cron_order_luckin" // + KEY_CFG_CRON_STATIONMEITUANLM = "cron_order_station_meituan_lm" //站长美团联盟 + KEY_CFG_CRON_MEITUANOFFICIAL = "cron_order_meituan_official" //美团联盟智莺 + KEY_CFG_CRON_OILSTATION = "cron_order_oilstation" //加油 + KEY_CFG_CRON_BRIGHTOILSTATION = "cron_order_bright_oilstation" //加油 + KEY_CFG_CRON_KFC = "cron_order_kfc" //肯德基 + KEY_CFG_CRON_CINEMA = "cron_order_cinema" //电影票 + KEY_CFG_CRON_OilRequest = "cron_order_oilrequest" //加入主动请求抓单 + KEY_CFG_CRON_AGOTB = "cron_order_agotaobao" //n天前的淘宝订单 + KEY_CFG_CRON_CREDIT_CARD = "cron_order_credit_card" + KEY_CFG_CRON_ORDER_STAT = "cron_order_stat" // 订单统计任务 + KEY_CFG_CRON_CARD_UPDATE = "cron_card_update" // 权益卡更新 + KEY_CFG_CRON_USER_LV_UP_SETTLE = "cron_user_lv_up_settle" //会员费订单结算 + KEY_CFG_CRON_DUOYOUORD_SETTLE = "cron_duoyou_settle" //会员费订单结算 + KEY_CFG_CRON_LIANLIAN_SETTLE = "cron_lianlian_settle" //会员费订单结算 + KEY_CFG_CRON_SWIPE_SETTLE = "cron_swipe_settle" + KEY_CFG_CRON_AGGREGATION_RECHARGE_SETTLE = "cron_aggregation_recharge_settle" + KEY_CFG_CRON_ACQUISITION_CONDITION = "cron_acquisition_condition" + KEY_CFG_CRON_ACQUISITION_CONDITION_BY_LV = "cron_acquisition_condition_by_lv" + KEY_CFG_CRON_ACQUISITION_REWARD = "cron_acquisition_reward" + KEY_CFG_CRON_PLAYLET_SETTLE = "cron_playlet_settle" + KEY_CFG_CRON_TIKTOK_AUTH = "cron_tik_tok_auth" + KEY_CFG_CRON_TASKBOX_SETTLE = "cron_task_box_settle" //会员费订单结算 + KEY_CFG_CRON_PRIVILEGE_CARD_SETTLE = "cron_privilege_card_settle" //权益卡订单结算 + KEY_CFG_CRON_CARD_RETURN = "cron_card_return" //权益卡退款 + KEY_CFG_CRON_PUBLISHER_RELATION = "cron_taobao_publisher_relation" //获取淘宝渠道 + KEY_CFG_CRON_PUBLISHER_RELATION_NEW = "cron_taobao_publisher_relation_new" //获取淘宝渠道 + + KEY_CFG_CRON_DTKBRAND = "cron_dtk_brand" //大淘客品牌信息 + KEY_CFG_CRON_PUBLISHER_RELATION_BIND = "cron_taobao_publisher_relation_bind" //获取淘宝渠道绑定 + KEY_CFG_CRON_GOODS_SHELF = "cron_goods_shelf" //商品上下架定时任务 + KEY_CFG_CRON_DIDI_ENERGY = "cron_order_didi_energy" // + KEY_CFG_CRON_T3_CAR = "cron_order_t3_car" // + KEY_CFG_CRON_DIDI_ONLINE_CAR = "cron_order_didi_online_car" // + KEY_CFG_CRON_KING_FLOWER = "cron_order_king_flower" // + KEY_CFG_CRON_DIDI_CHAUFFEUR = "cron_order_didi_chauffeur" // + KEY_CFG_CRON_PLAYLET_ORDER = "cron_order_playlet_order" // + KEY_CFG_CRON_PLAYLET_GOODS = "cron_order_playlet_goods" // + KEY_CFG_CRON_CARD_CHECK_RETURN = "cron_card_check_return" // + KEY_CFG_CRON_CARD_CHECK_UPDATE = "cron_card_check_update" // + KEY_CFG_CRON_DIDI_FREIGHT = "cron_order_didi_freight" // + KEY_CFG_CRON_TB_PUNISH_REFUND = "cron_order_tb_punish_refund" + KEY_CFG_CRON_TIKTOK = "cron_order_tikTok" + KEY_CFG_CRON_ELM = "cron_order_elm" + KEY_CFG_CRON_AUTO_ADD_TIKTOK_GOODS = "cron_order_auto_add_tiktok_goods" + KEY_CFG_CRON_TIKTOKOwn = "cron_order_tikTokOwn" + KEY_CFG_CRON_TIKTOKCsjp = "cron_order_tikTokCsjp" + KEY_CFG_CRON_TIKTOKCsjpLive = "cron_order_tikTokCsjpLive" + KEY_CFG_CRON_TIKTOKOwnCsjp = "cron_order_tikTokOwnCsjp" + KEY_CFG_CRON_TIKTOKOwnCsjpLive = "cron_order_tikTokOwnCsjpLive" + KEY_CFG_CRON_TIKTOKOwnCsjpActivity = "cron_order_tikTokOwnCsjpActivity" + KEY_CFG_CRON_PlayLet_Total = "cron_playlet_total" + KEY_CFG_CRON_TIKTOKOwnCreate = "cron_order_tikTokOwnCreate" + KEY_CFG_CRON_KuaishouOwn = "cron_order_kuaishouOwn" + KEY_CFG_CRON_KuaishouOwnCreate = "cron_order_kuaishouOwnCreate" + KEY_CFG_CRON_TIKTOKOwnACtivity = "cron_order_tikTokOwnActivity" + KEY_CFG_CRON_DUOYOUORD = "cron_order_DouYouOrd" + KEY_CFG_CRON_TASKBOX = "cron_order_TaskBox" + KEY_CFG_CRON_TASKBOXSECOND = "cron_order_TaskBoxSecond" + KEY_CFG_CRON_TIKTOKOwnMixH5 = "cron_order_tikTokOwnMixH5" + + KEY_CFG_CRON_TIKTOKLIVE_UPDATE = "cron_order_tikTokLive_update" + KEY_CFG_CRON_KUAISHOU = "cron_order_kuaishou" + KEY_CFG_CRON_KUAISHOUOFFICIAL = "cron_order_kuaishou_official" + KEY_CFG_CRON_KUAISHOUOFFICIALLive = "cron_order_kuaishou_official_live" + KEY_CFG_CRON_MEITUANFFICIAL = "cron_order_meituan_official" + KEY_CFG_CRON_TIKTOKLIVE = "cron_order_tikTok_live" + KEY_CFG_CRON_TIKTOKLIVEOWN = "cron_order_tikTok_live_own" + KEY_CFG_CRON_TIKTOKACTIVITY = "cron_order_tikTok_activity" + KEY_CFG_CRON_KUAISHOULIVE = "cron_order_kuaishou_live" + + ZhimengCronPlayletVideoOrder = "cron_playlet_video_order" //短剧订单 + ZhimengCronPlayletAdvOrder = "cron_playlet_adv_order" //短剧广告订单 + ZhimengCronPlayletVideoOrderYesterDay = "cron_playlet_video_order_yesterday" + ZhimengCronPlayletVideoOrderMonth = "cron_playlet_video_order_month" + ZhimengCronPlayletAdvOrderYesterDay = "cron_playlet_adv_order_yesterday" + ZhimengCronPlayletAdvOrderMonth = "cron_playlet_adv_order_month" + ZhimengCronPlayletAdvOrderYesterDayToMoney = "cron_playlet_adv_order_yesterday_to_money" + KEY_CFG_TIK_TOK_TEAM_ORDER_PAY = "cron_tik_tok_team_order_pay" + KEY_CFG_KUAISHOU_TEAM_ORDER_PAY = "cron_kuaishou_team_order_pay" + KEY_CFG_KUAISHOU_TEAM_ORDER_UPDATE = "cron_kuaishou_team_order_update" + KEY_CFG_KUAISHOU_AUTH = "cron_kuaishou_auth" + KEY_CFG_VERIFY = "cron_verify" + KEY_CFG_TIK_TOK_TEAM_ORDER_UPDATE = "cron_tik_tok_team_order_update" + KEY_CFG_TIK_TOK_TEAM_USER_BIND_BUYINID = "cron_tik_tok_team_user_bind_buyinid" + // 自动任务运行时设置 + KEY_CFG_CRON_TIME_PIZZA = "crontab_order_time_pizza" + KEY_CFG_CRON_TIME_WALLACE = "crontab_order_time_wallace" + KEY_CFG_CRON_TIME_TOURISM = "crontab_order_time_tourism" + KEY_CFG_CRON_TIME_NEAR = "crontab_order_time_pizza" + KEY_CFG_CRON_TIME_FLOWERCAKE = "crontab_order_time_flowerCake" + KEY_CFG_CRON_TIME_DELIVERY = "crontab_order_time_delivery" + KEY_CFG_CRON_TIME_TIKTOK = "crontab_order_time_tikTok" + KEY_CFG_CRON_TIME_ELM = "crontab_order_time_elm" + KEY_CFG_CRON_TIME_TIKTOKOwn = "crontab_order_time_tikTokOwn" + KEY_CFG_CRON_TIME_TIKTOKOwnCreate = "crontab_order_time_tikTokOwnCreate" + KEY_CFG_CRON_TIME_KuaishouOwn = "crontab_order_time_kuaishouOwn" + KEY_CFG_CRON_TIME_KuaishouOwnCreate = "crontab_order_time_kuaishouOwnCreate" + KEY_CFG_CRON_TIME_TIKTOKOwnActivity = "KEY_CFG_CRON_TIME_TIKTOKOwnActivity" + KEY_CFG_CRON_TIME_TIKTOKOwnMix = "KEY_CFG_CRON_TIME_TIKTOKOwnMix" + KEY_CFG_CRON_TIME_TIKTOKOwnLive = "crontab_order_time_tikTokOwnLive" + KEY_CFG_CRON_TIME_KUAISHOU = "crontab_order_time_kuaishou" + KEY_CFG_CRON_TIME_TIKTOKLIVE = "crontab_order_time_tikTok_live" + KEY_CFG_CRON_TIME_KUAISHOULIVE = "crontab_order_time_kuaishou_live" + KEY_CFG_CRON_TIME_TB = "crontab_order_time_taobao" + KEY_CFG_CRON_TIME_CSJP = "crontab_order_time_csjp" + KEY_CFG_CRON_TIME_KUAISHOU_OFFICIAL = "crontab_order_time_kuaishou_official" + KEY_CFG_CRON_TIME_KUAISHOU_OFFICIAL_LIVE = "crontab_order_time_kuaishou_official_live" + KEY_CFG_CRON_TIME_MEITUAN_OFFICIAL = "crontab_order_time_meituan_official" + KEY_CFG_CRON_TIME_CSJP_Live = "crontab_order_time_csjp_live" + KEY_CFG_CRON_TIME_OWN_CSJP = "crontab_order_time_own_csjp" + KEY_CFG_CRON_TIME_TIKTOK_TEAM_ORDER = "crontab_order_time_tiktok_team_order" + KEY_CFG_CRON_TIME_OWN_CSJP_Live = "crontab_order_time_own_csjp_live" + KEY_CFG_CRON_TIME_OWN_CSJP_ACTIVITY = "crontab_order_time_own_csjp_activity" + KEY_CFG_CRON_TIME_TBREFUND = "crontab_order_time_taobao_refund" + KEY_CFG_CRON_TIME_TBPUNISHREFUND = "crontab_order_time_taobao_punish_refund_new" + KEY_CFG_CRON_TIME_JD = "crontab_order_time_jd" + KEY_CFG_CRON_TIME_PDD = "crontab_order_time_pdd" + KEY_CFG_CRON_TIME_TBBYCREATETIME = "crontab_order_time_tb_by_create_time" + KEY_CFG_CRON_TIME_TBBYPAY = "crontab_order_time_tb_by_pay" + KEY_CFG_CRON_TIME_TB12 = "crontab_order_time_tb12" + KEY_CFG_CRON_TIME_TB13 = "crontab_order_time_tb13" + KEY_CFG_CRON_TIME_TB14 = "crontab_order_time_tb14" + KEY_CFG_CRON_TIME_TB3 = "crontab_order_time_tb3" + KEY_CFG_CRON_TIME_TBBYSETTLE = "crontab_order_time_tb_by_settle" + KEY_CFG_CRON_TIME_PDDBYCREATETIME = "crontab_order_time_pdd_by_create_time" + KEY_CFG_CRON_TIME_JDBYCREATETIME = "crontab_order_time_jd_by_create_time" + KEY_CFG_CRON_TIME_JDBYSUCCESS = "crontab_order_time_jd_by_success" + KEY_CFG_CRON_TIME_JDFAILBYCREATETIME = "crontab_order_time_jd_fail_by_create_time" + KEY_CFG_CRON_TIME_PDDBYAGOTIME = "crontab_order_time_pdd_by_ago_time" + KEY_CFG_CRON_TIME_PDDBYSTATUSSUCCESS = "crontab_order_time_pdd_by_status_success" + KEY_CFG_CRON_TIME_PDDBYSTATUSFAIL = "crontab_order_time_pdd_by_status_fail" + KEY_CFG_CRON_TIME_PDDBYSTATUS = "crontab_order_time_pdd_by_status" + KEY_CFG_CRON_TIME_JDBYSTATUS = "crontab_order_time_jd_by_status" + KEY_CFG_CRON_TIME_SN = "crontab_order_time_suning" + KEY_CFG_CRON_TIME_VIP = "crontab_order_time_vip" + KEY_CFG_CRON_TIME_KL = "crontab_order_time_kaola" + KEY_CFG_CRON_TIME_DUOMAI = "crontab_order_time_duomai" + KEY_CFG_CRON_TIME_PUBLISHER = "crontab_taobao_time_publisher" // 跟踪淘宝备案信息绑定会员运营id 针对小程序 + KEY_CFG_CRON_TIME_MEITUAN = "crontab_order_time_meituan" //美团 + KEY_CFG_CRON_TIME_MEITUANLM = "crontab_order_time_meituan_lm" //美团联盟 + KEY_CFG_CRON_TIME_MEITUANLMSTART = "crontab_order_time_meituan_lm_start" //美团联盟 + KEY_CFG_CRON_TIME_MEITUANSTART = "crontab_order_time_meituan_start" //美团联盟 + KEY_CFG_CRON_TIME_STATIONMEITUANLM = "crontab_order_time_station_meituan_lm" //美团联盟 + KEY_CFG_CRON_TIME_OILSTATION = "crontab_order_time_oilstation" //加油 + KEY_CFG_CRON_TIME_BRIGHT_OILSTATION = "crontab_order_time_bright_oilstation" //加油 + KEY_CFG_CRON_TIME_KFC = "crontab_order_time_kfc" //肯德基 + KEY_CFG_CRON_TIME_CINEMA = "crontab_order_time_cinema" //电影票 + KEY_CFG_CRON_TIME_STARBUCKS = "crontab_order_time_starbucks" //海威星巴克 + KEY_CFG_CRON_TIME_MCDONALD = "crontab_order_time_mcdonald" //海威麦当劳 + KEY_CFG_CRON_TIME_NAYUKI = "crontab_order_time_nayuki" //海威奈雪 + KEY_CFG_CRON_TIME_BURGERKING = "crontab_order_time_burger_king" //海威汉堡王 + KEY_CFG_CRON_TIME_HEYTEA = "crontab_order_time_heytea" //海威喜茶 + KEY_CFG_CRON_TIME_HWMOVIE = "crontab_order_time_hw_movie" //海威电影票 + KEY_CFG_CRON_TIME_TIKTOKLIFE = "crontab_order_time_tik_tok_life" //海威电影票 + KEY_CFG_CRON_TIME_PAGODA = "crontab_order_time_pagoda" // + KEY_CFG_CRON_TIME_TO_KFC = "crontab_order_time_to_kfc" // + KEY_CFG_CRON_TIME_LUCKIN = "crontab_order_time_luckin" // + KEY_CFG_CRON_TIME_DIDI_ENERGY = "crontab_order_time_didi_energy" // + KEY_CFG_CRON_TIME_T3_CAR = "crontab_order_time_t3_car" // + KEY_CFG_CRON_TIME_DIDI_ONLINE_CAR = "crontab_order_time_didi_online_car" // + KEY_CFG_CRON_TIME_KING_FLOWER = "crontab_order_time_king_flower" // + KEY_CFG_CRON_TIME_DIDI_FREIGHT = "crontab_order_time_didi_freight" // + KEY_CFG_CRON_TIME_DIDI_CHAUFFEUR = "crontab_order_time_didi_chauffeur" // + KEY_CFG_CRON_USER_RELATE = "cron_user_relate" +) diff --git a/app/md/md_order.go b/app/md/md_order.go new file mode 100644 index 0000000..5ee6618 --- /dev/null +++ b/app/md/md_order.go @@ -0,0 +1,47 @@ +package md + +type OrderTotal struct { + StoreId string `json:"store_id"` + BuyPhone string `json:"buy_phone"` + MealNum string `json:"meal_num"` + Memo string `json:"memo"` + CouponId string `json:"coupon_id"` + IsNow string `json:"is_now"` + Timer string `json:"timer"` + GoodsInfo []GoodsInfo `json:"goods_info"` +} +type GoodsInfo struct { + GoodsId string `json:"goods_id"` + SkuId string `json:"sku_id"` + Num string `json:"num"` +} + +type OneSkuPriceInfo struct { + Num string `json:"num"` + Amount string `json:"amount"` + GoodsId int `json:"goods_id"` +} +type SkuPriceStruct struct { + SkuId int64 `json:"skuId"` + Ratio string `json:"ratio"` + OneSkuPriceInfo OneSkuPriceInfo `json:"oneSkuPriceInfo"` +} + +// 每一种sku价格结构 +type SkuId2priceInfo map[int64]OneSkuPriceInfo + +type SkuId2originPrice map[int64]string +type CouponList struct { + Id string `json:"id"` + Title string `json:"title"` + Timer string `json:"timer"` + Label string `json:"label"` + Img string `json:"img"` + Content string `json:"content"` + IsCanUse string `json:"is_can_use"` + NotUseStr string `json:"not_use_str"` +} +type Sku struct { + Name string `json:"name"` + Value string `json:"value"` +} diff --git a/app/md/pay.go b/app/md/pay.go new file mode 100644 index 0000000..4994c8f --- /dev/null +++ b/app/md/pay.go @@ -0,0 +1,60 @@ +package md + +const ( + CALLBACK_URL = "%s/api/v1/communityTeam/pay/callback?master_id=%s&order_type=%s&pay_method=%s" + RECHARGGE_CALLBACK_URL = "http://%s/api/v1/new_recharge/callback/%s" + + BALANCE_PAY = "balance_pay" + ALIPAY = "alipay" + WX_PAY = "wxpay" + FB_PAY_ALI = "fb_pay_ali" + FB_PAY_WX = "fb_pay_wx" + FB_PAY_WX_SUB = "fb_pay_wx_sub" + FBCALLBACK_URL = "%s/api/v1/pay/fb/callback" +) + +var PayMethod = map[string]string{ + BALANCE_PAY: "余额支付", + ALIPAY: "支付宝支付", + WX_PAY: "微信支付", + FB_PAY_ALI: "乐刷支付宝", + FB_PAY_WX: "乐刷微信", + FB_PAY_WX_SUB: "乐刷微信", +} +var PayMethodIdToName = map[int]string{ + 1: "余额支付", + 2: "支付宝支付", + 3: "微信支付", + 18: "乐刷支付宝", + 19: "乐刷微信", +} +var PayMethodIDs = map[string]int{ + BALANCE_PAY: 1, + ALIPAY: 2, + WX_PAY: 3, + FB_PAY_ALI: 18, + FB_PAY_WX: 19, + FB_PAY_WX_SUB: 19, +} + +const ( + CommunityTeam = "community_team" + PrivilegeCard = "privilege_card" + LianlianPay = "lianlian_pay" + BusinessCollege = "business_college" + UserLevel = "user_level" + PrivilegeOpenCard = "privilege_open_card" + BusinessCollegeSub = "business_college_sub" + UserLevelSub = "user_level_sub" + PrivilegeOpenCardSub = "privilege_open_card_sub" + AggregationRecharge = "aggregation_recharge" + Swipe = "swipe" +) + +var NeedPayPart = map[string]string{ + PrivilegeCard: "权益卡", + BusinessCollege: "商学院", + UserLevel: "会员VIP升级", + PrivilegeOpenCard: "权益卡开卡", + AggregationRecharge: "聚合充值", +} diff --git a/app/md/platform.go b/app/md/platform.go new file mode 100644 index 0000000..b479ab5 --- /dev/null +++ b/app/md/platform.go @@ -0,0 +1,40 @@ +package md + +const ( + /*********** DEVICE ***********/ + PLATFORM_WX_APPLET = "wx_applet" // 小程序 + PLATFORM_TOUTIAO_APPLET = "toutiao_applet" + PLATFORM_TIKTOK_APPLET = "tiktok_applet" + PLATFORM_BAIDU_APPLET = "baidu_applet" + PLATFORM_ALIPAY_APPLET = "alipay_applet" + PLATFORM_WAP = "wap" //h5 + PLATFORM_ANDROID = "android" + PLATFORM_IOS = "ios" + PLATFORM_PC = "pc" + PLATFORM_JSAPI = "jsapi" // 公众号 +) + +const WX_PAY_BROWSER = "wx_pay_browser" // 用于判断显示支付方式 + +var PlatformList = map[string]struct{}{ + PLATFORM_WX_APPLET: {}, + PLATFORM_TOUTIAO_APPLET: {}, + PLATFORM_TIKTOK_APPLET: {}, + PLATFORM_BAIDU_APPLET: {}, + PLATFORM_ALIPAY_APPLET: {}, + PLATFORM_WAP: {}, + PLATFORM_ANDROID: {}, + PLATFORM_IOS: {}, + PLATFORM_PC: {}, +} + +var PlatformMap = map[string]string{ + "android": "2", + "ios": "2", + "wap": "4", // 和小程序公用模板 + "wx_applet": "4", //微信小程序 + "tiktok_applet": "4", + "baidu_applet": "4", + "alipay_applet": "4", + "toutiao_applet": "4", +} diff --git a/app/md/user_info.go b/app/md/user_info.go new file mode 100644 index 0000000..f6c5648 --- /dev/null +++ b/app/md/user_info.go @@ -0,0 +1,43 @@ +package md + +import ( + "applet/app/db/model" + "applet/app/lib/arkid" +) + +type UserInfoResponse struct { + Avatar string `json:"avatar"` + NickName string `json:"nickname"` + Gender string `json:"gender"` + Birthday string `json:"birthday"` + RegisterTime string `json:"register_time"` + FileBucketURL string `json:"file_bucket_url"` + FileFormat string `json:"file_format"` + IsNoChange string `json:"is_no_change"` + IsUpLoadWx string `json:"is_upload_wx"` + IsShowDelUserBtn string `json:"is_show_del_user_btn"` + IsShowQq string `json:"is_show_qq"` + IsShowSalePhone string `json:"is_show_sale_phone"` + IsShowWallet string `json:"is_show_wallet"` + IsShowBankCard string `json:"is_show_bank_card"` + Qq string `json:"qq"` + SalePhone string `json:"sale_phone"` + LevelName string `json:"level_name"` + Phone string `json:"phone"` +} + +type User struct { + Ark *arkid.ArkIDUser + Info *model.User + Profile *model.UserProfile + Level *model.UserLevel + Tags []string +} + +type UserRelation struct { + Uid int + CurUid int + Diff int // 与当前用户级别差 + Level int // 用户当前等级 + OldDiff int // 旧的级别 +} diff --git a/app/md/wxpay.go b/app/md/wxpay.go new file mode 100644 index 0000000..88a9f8d --- /dev/null +++ b/app/md/wxpay.go @@ -0,0 +1,30 @@ +package md + +type WxPayParams struct { + Subject string `json:"subject" binding:"required"` + Amount string `json:"amount" binding:"required"` + OrderType string `json:"order_type" binding:"required"` + OrdId string `json:"ord_id"` +} + +type WxPayCallback struct { + AppId string `json:"appid"` + BankType string `json:"bank_type"` + CashFee string `json:"cash_fee"` + FeeType string `json:"fee_type"` + IsSubscribe string `json:"is_subscribe"` + MasterID string `json:"master_id"` + MchID string `json:"mch_id"` + NonceStr string `json:"nonce_str"` + Openid string `json:"openid"` + OrderType string `json:"order_type"` + OutTradeNo string `json:"out_trade_no"` + PayMethod string `json:"pay_method"` + ResultCode string `json:"result_code"` + ReturnCode string `json:"return_code"` + Sign string `json:"sign"` + TimeEnd string `json:"time_end"` + TotalFee string `json:"total_fee"` + TradeType string `json:"trade_type"` + TransactionID string `json:"transaction_id"` +} diff --git a/app/mw/mw_access_log.go b/app/mw/mw_access_log.go new file mode 100644 index 0000000..84f6b52 --- /dev/null +++ b/app/mw/mw_access_log.go @@ -0,0 +1,31 @@ +package mw + +import ( + "time" + + "github.com/gin-gonic/gin" + "go.uber.org/zap" + + "applet/app/utils/logx" +) + +// access log +func AccessLog(c *gin.Context) { + start := time.Now() + c.Next() + cost := time.Since(start) + + logx.Info(c.Request.URL.Path) + + logger := &zap.Logger{} + logger.Info(c.Request.URL.Path, + zap.Int("status", c.Writer.Status()), + zap.String("method", c.Request.Method), + zap.String("path", c.Request.URL.Path), + zap.String("query", c.Request.URL.RawQuery), + zap.String("ip", c.ClientIP()), + zap.String("user-agent", c.Request.UserAgent()), + zap.String("errors", c.Errors.ByType(gin.ErrorTypePrivate).String()), + zap.Duration("cost", cost), + ) +} diff --git a/app/mw/mw_auth.go b/app/mw/mw_auth.go new file mode 100644 index 0000000..645dbe3 --- /dev/null +++ b/app/mw/mw_auth.go @@ -0,0 +1,72 @@ +package mw + +import ( + "errors" + + "applet/app/db" + "applet/app/e" + "applet/app/lib/arkid" + "applet/app/md" + "applet/app/utils" + + "github.com/gin-gonic/gin" +) + +// 检查权限, 签名等等 +func Auth(c *gin.Context) { + + for k, v := range c.Request.Header { + c.Set(k, v[0]) + } + token, ok := c.Get("Token") + if !ok { + e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("没有找到token")) + return + } + if token == "" { + e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 不能为空")) + return + } + tokenStr := utils.AnyToString(token) + arkIdSdk := arkid.NewArkID() + var err error + signUser := &md.User{} + arkIdUser := new(arkid.ArkIDUser) + if err = arkIdSdk.SelectFunction("arkid_user_info"). + WithArgs(arkid.RequestBody{Token: tokenStr}). + Result(arkIdUser); err != nil { + e.OutErr(c, e.ERR_TOKEN_AUTH, err) //token 不存在 + return + } + if arkIdUser.Username == "" { + e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("Token error")) + return + } + if err = arkIdSdk.SelectFunction("arkid_login"). + WithArgs(arkid.RequestBody{Username: arkIdUser.Username, Password: utils.Md5(arkIdUser.Username)}). + Result(arkIdUser); err != nil { + e.OutErr(c, e.ERR_TOKEN_AUTH, err) + return + } + signUser.Ark = arkIdUser + if signUser.Ark == nil { + e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("无效token")) + return + } + signUser.Info, err = db.UserFindByArkidUserName(db.DBs[c.GetString("mid")], arkIdUser.Username) + if err != nil { + e.OutErr(c, e.ERR_TOKEN_AUTH, err) + return + } + if signUser.Info == nil { + e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("无效token")) + return + } + signUser.Profile, err = db.UserProfileFindByArkID(db.DBs[c.GetString("mid")], utils.IntToStr(arkIdUser.UserID)) + if err != nil { + e.OutErr(c, e.ERR_TOKEN_AUTH, err) + return + } + c.Set("user", signUser) + c.Next() +} diff --git a/app/mw/mw_auth_jwt.go b/app/mw/mw_auth_jwt.go new file mode 100644 index 0000000..cd4875b --- /dev/null +++ b/app/mw/mw_auth_jwt.go @@ -0,0 +1,122 @@ +package mw + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/e" + "applet/app/lib/auth" + "applet/app/md" + "applet/app/svc" + "applet/app/utils" + "applet/app/utils/cache" + "applet/app/utils/logx" + "errors" + "fmt" + "strings" + + "github.com/gin-gonic/gin" +) + +// AuthJWT is jwt middleware +func AuthJWT(c *gin.Context) { + authHeader := c.Request.Header.Get("Authorization") + if authHeader == "" { + e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 不能为空")) + return + } + + // 按空格分割 + parts := strings.SplitN(authHeader, " ", 2) + if !(len(parts) == 2 && parts[0] == "Bearer") { + e.OutErr(c, e.ERR_TOKEN_FORMAT, errors.New("token 格式不对")) + return + } + + // parts[1]是token + mc, err := utils.ParseToken(parts[1]) + if err != nil { + e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效")) + return + } + + // 获取user + u, err := db.UserFindByID(db.DBs[c.GetString("mid")], mc.UID) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err) + return + } + if u == nil { + e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效")) + return + } + + // 检验账号是否未激活或被冻结 + switch u.State { + case 0: + e.OutErr(c, e.ERR_USER_NO_ACTIVE) + return + case 2: + if c.GetString("mid") == "31585332" { + utils.FilePutContents("ERR_USER_IS_BAN", utils.SerializeStr(map[string]interface{}{ + "token": parts[1], + "mc": mc, + "user": u, + })) + } + e.OutErr(c, e.ERR_USER_IS_BAN) + return + } + + // 校验是否和缓存的token一致,只能有一个token 是真实有效 + key := fmt.Sprintf("%s:token:%s", c.GetString("mid"), u.Username) + cjwt, err := cache.GetString(key) + fmt.Println("====================token", u.Username, key, cjwt, parts[1]) + if err != nil { + fmt.Println("====================token", err) + logx.Warn(err) + NOCACHE(c, parts, mc, u, false) + return + } + if parts[1] != cjwt { + e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired")) + return + } + NOCACHE(c, parts, mc, u, true) +} + +func NOCACHE(c *gin.Context, parts []string, mc *auth.JWTUser, u *model.User, isTrue bool) { + // 获取user profile + up, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], mc.UID) + if err != nil || up == nil { + e.OutErr(c, e.ERR_DB_ORM, err) + return + } + if parts[1] != up.ArkidToken && isTrue == false || up.ArkidToken == "" { + e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired")) + return + } + if parts[1] != up.ArkidToken && isTrue { + up.ArkidToken = parts[1] + db.UserProfileUpdate(svc.MasterDb(c), up.Uid, up, "arkid_token") + } + if up.AvatarUrl == "" { + up.AvatarUrl = c.GetString("appUserDefaultAvatar") + } + // 获取user 等级 + ul, err := db.UserLevelByID(db.DBs[c.GetString("mid")], u.Level) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err) + return + } + + user := &md.User{ + Info: u, + Profile: up, + Level: ul, + } + + // 将当前请求的username信息保存到请求的上下文c上 + c.Set("user", user) + c.Next() // 后续的处理函数可以用过c.Get("user")来获取当前请求的用户信息 + +} diff --git a/app/mw/mw_breaker.go b/app/mw/mw_breaker.go new file mode 100644 index 0000000..fefc078 --- /dev/null +++ b/app/mw/mw_breaker.go @@ -0,0 +1,30 @@ +package mw + +import ( + "errors" + "net/http" + "strconv" + + "github.com/afex/hystrix-go/hystrix" + "github.com/gin-gonic/gin" +) + +// 熔断器, 此组件需要在gin.Recovery中间之前进行调用, 否则可能会导致panic时候, 无法recovery, 正确顺序如下 +//r.Use(BreakerWrapper) +//r.Use(gin.Recovery()) +func Breaker(c *gin.Context) { + name := c.Request.Method + "-" + c.Request.RequestURI + hystrix.Do(name, func() error { + c.Next() + statusCode := c.Writer.Status() + if statusCode >= http.StatusInternalServerError { + return errors.New("status code " + strconv.Itoa(statusCode)) + } + return nil + }, func(e error) error { + if e == hystrix.ErrCircuitOpen { + c.String(http.StatusAccepted, "请稍后重试") //todo 修改报错方法 + } + return e + }) +} diff --git a/app/mw/mw_change_header.go b/app/mw/mw_change_header.go new file mode 100644 index 0000000..c10bdb9 --- /dev/null +++ b/app/mw/mw_change_header.go @@ -0,0 +1,18 @@ +package mw + +import ( + "github.com/gin-gonic/gin" +) + +// 修改传过来的头部字段 +func ChangeHeader(c *gin.Context) { + appvserison := c.GetHeader("AppVersionName") + if appvserison == "" { + appvserison = c.GetHeader("app_version_name") + } + if appvserison != "" { + c.Request.Header.Add("app_version_name", appvserison) + } + + c.Next() +} diff --git a/app/mw/mw_check_sign.go b/app/mw/mw_check_sign.go new file mode 100644 index 0000000..599c512 --- /dev/null +++ b/app/mw/mw_check_sign.go @@ -0,0 +1,37 @@ +package mw + +import ( + "applet/app/e" + "applet/app/utils" + "bytes" + "errors" + "fmt" + "github.com/gin-gonic/gin" + "io/ioutil" +) + +// CheckSign is 中间件 用来检查签名 +func CheckSign(c *gin.Context) { + if utils.SignCheck(c) == false { + e.OutErr(c, 400, errors.New("请求失败~~")) + return + } + c.Next() +} + +func CheckBody(c *gin.Context) { + c.Set("api_version", "1") + if utils.GetApiVersion(c) > 0 { + body, _ := ioutil.ReadAll(c.Request.Body) + fmt.Println("check_", c.GetString("mid"), string(body)) + if string(body) != "" { + str := utils.ResultAesDecrypt(c, string(body)) + fmt.Println("check_de", c.GetString("mid"), str) + if str != "" { + c.Set("body_str", str) + c.Request.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(str))) + } + } + } + c.Next() +} diff --git a/app/mw/mw_checker.go b/app/mw/mw_checker.go new file mode 100644 index 0000000..44ee434 --- /dev/null +++ b/app/mw/mw_checker.go @@ -0,0 +1,22 @@ +package mw + +import ( + "strings" + + "github.com/gin-gonic/gin" + + "applet/app/e" + "applet/app/md" +) + +// 检查设备等, 把头部信息下放到hdl可以获取 +func Checker(c *gin.Context) { + // 校验平台支持 + platform := strings.ToLower(c.GetHeader("Platform")) + //fmt.Println(platform) + if _, ok := md.PlatformList[platform]; !ok { + e.OutErr(c, e.ERR_PLATFORM) + return + } + c.Next() +} diff --git a/app/mw/mw_cors.go b/app/mw/mw_cors.go new file mode 100644 index 0000000..3433553 --- /dev/null +++ b/app/mw/mw_cors.go @@ -0,0 +1,29 @@ +package mw + +import ( + "github.com/gin-gonic/gin" +) + +// cors跨域 +func Cors(c *gin.Context) { + // 放行所有OPTIONS方法 + if c.Request.Method == "OPTIONS" { + c.AbortWithStatus(204) + return + } + + origin := c.Request.Header.Get("Origin") // 请求头部 + if origin != "" { + c.Header("Access-Control-Allow-Origin", origin) // 这是允许访问来源域 + c.Header("Access-Control-Allow-Methods", "POST,GET,OPTIONS,PUT,DELETE,UPDATE") // 服务器支持的所有跨域请求的方法,为了避免浏览次请求的多次'预检'请求 + // header的类型 + c.Header("Access-Control-Allow-Headers", "Authorization,Content-Length,X-CSRF-Token,Token,session,X_Requested_With,Accept,Origin,Host,Connection,Accept-Encoding,Accept-Language,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Pragma,X-Mx-ReqToken") + // 允许跨域设置,可以返回其他子段 + // 跨域关键设置 让浏览器可以解析 + c.Header("Access-Control-Expose-Headers", "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") + c.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒 + c.Header("Access-Control-Allow-Credentials", "false") // 跨域请求是否需要带cookie信息 默认设置为true + c.Set("Content-Type", "Application/json") // 设置返回格式是json + } + c.Next() +} diff --git a/app/mw/mw_csrf.go b/app/mw/mw_csrf.go new file mode 100644 index 0000000..b15619b --- /dev/null +++ b/app/mw/mw_csrf.go @@ -0,0 +1,136 @@ +package mw + +import ( + "crypto/sha1" + "encoding/base64" + "errors" + "io" + + "github.com/dchest/uniuri" + "github.com/gin-contrib/sessions" + "github.com/gin-gonic/gin" +) + +// csrf,xsrf检查 +const ( + csrfSecret = "csrfSecret" + csrfSalt = "csrfSalt" + csrfToken = "csrfToken" +) + +var defaultIgnoreMethods = []string{"GET", "HEAD", "OPTIONS"} + +var defaultErrorFunc = func(c *gin.Context) { + panic(errors.New("CSRF token mismatch")) +} + +var defaultTokenGetter = func(c *gin.Context) string { + r := c.Request + + if t := r.FormValue("_csrf"); len(t) > 0 { + return t + } else if t := r.URL.Query().Get("_csrf"); len(t) > 0 { + return t + } else if t := r.Header.Get("X-CSRF-TOKEN"); len(t) > 0 { + return t + } else if t := r.Header.Get("X-XSRF-TOKEN"); len(t) > 0 { + return t + } + + return "" +} + +// Options stores configurations for a CSRF middleware. +type Options struct { + Secret string + IgnoreMethods []string + ErrorFunc gin.HandlerFunc + TokenGetter func(c *gin.Context) string +} + +func tokenize(secret, salt string) string { + h := sha1.New() + io.WriteString(h, salt+"-"+secret) + hash := base64.URLEncoding.EncodeToString(h.Sum(nil)) + + return hash +} + +func inArray(arr []string, value string) bool { + inarr := false + + for _, v := range arr { + if v == value { + inarr = true + break + } + } + + return inarr +} + +// Middleware validates CSRF token. +func Middleware(options Options) gin.HandlerFunc { + ignoreMethods := options.IgnoreMethods + errorFunc := options.ErrorFunc + tokenGetter := options.TokenGetter + + if ignoreMethods == nil { + ignoreMethods = defaultIgnoreMethods + } + + if errorFunc == nil { + errorFunc = defaultErrorFunc + } + + if tokenGetter == nil { + tokenGetter = defaultTokenGetter + } + + return func(c *gin.Context) { + session := sessions.Default(c) + c.Set(csrfSecret, options.Secret) + + if inArray(ignoreMethods, c.Request.Method) { + c.Next() + return + } + + salt, ok := session.Get(csrfSalt).(string) + + if !ok || len(salt) == 0 { + errorFunc(c) + return + } + + token := tokenGetter(c) + + if tokenize(options.Secret, salt) != token { + errorFunc(c) + return + } + + c.Next() + } +} + +// GetToken returns a CSRF token. +func GetToken(c *gin.Context) string { + session := sessions.Default(c) + secret := c.MustGet(csrfSecret).(string) + + if t, ok := c.Get(csrfToken); ok { + return t.(string) + } + + salt, ok := session.Get(csrfSalt).(string) + if !ok { + salt = uniuri.New() + session.Set(csrfSalt, salt) + session.Save() + } + token := tokenize(secret, salt) + c.Set(csrfToken, token) + + return token +} diff --git a/app/mw/mw_db.go b/app/mw/mw_db.go new file mode 100644 index 0000000..6e2d41f --- /dev/null +++ b/app/mw/mw_db.go @@ -0,0 +1,149 @@ +package mw + +import ( + "applet/app/svc" + "applet/app/utils" + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/mw" + "errors" + "fmt" + "github.com/gin-gonic/gin" + "strings" + + "applet/app/db" + "applet/app/e" + "applet/app/md" +) + +// DB is 中间件 用来检查master_id是否有对应的数据库engine +func DB(c *gin.Context) { + fmt.Println(c.Request.Header) + masterID := mw.GetMasterId(db.Db, c) + _, ok := db.DBs[masterID] + if !ok { + e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id in DBs")) + return + } + + fmt.Println("master_id", masterID) + c.Set("mid", masterID) + //判断应用是不是过期了 + isOverTime := svc.SysCfgGet(c, "is_over_time") + if isOverTime == "1" { + str := "应用已过期" + overTimeStr := svc.SysCfgGet(c, "over_time_str") + if overTimeStr != "" { + str = overTimeStr + } + e.OutErr(c, 400, e.NewErr(400, str)) + return + } + closeStation := svc.SysCfgGet(c, "close_station") + closeAppVersion := svc.SysCfgGet(c, "close_app_version") + platform := c.GetHeader("Platform") + if strings.Contains(closeStation, platform) && closeStation != "" && utils.StrToInt64(c.GetHeader("app_version")) <= utils.StrToInt64(closeAppVersion) { + str := "应用关闭" + overTimeStr := svc.SysCfgGet(c, "over_time_str") + if overTimeStr != "" { + str = overTimeStr + } + e.OutErr(c, 400, e.NewErr(400, str)) + return + } + //判断是否有独立域名 + domainWapBase := svc.GetWebSiteDomainInfo(c, "wap") + + httpStr := "http://" + if c.GetHeader("Platform") == md.PLATFORM_WX_APPLET || c.GetHeader("Platform") == md.PLATFORM_ALIPAY_APPLET || c.GetHeader("Platform") == md.PLATFORM_BAIDU_APPLET || c.GetHeader("Platform") == md.PLATFORM_TOUTIAO_APPLET || c.GetHeader("Platform") == md.PLATFORM_TIKTOK_APPLET { + httpStr = "https://" + domainWapBase = strings.Replace(domainWapBase, "http://", httpStr, 1) + } + c.Set("domain_wap_base", domainWapBase) + c.Set("domain_wap_base_new", svc.GetWebSiteLiveBroadcastDomainInfo(c, "wap", masterID)) + c.Set("domain_wap_base_second", svc.GetWebSiteDomainInfoSecond(c, "wap")) + + c.Set("http_host", httpStr) + + c.Set("h5_api_secret_key", svc.SysCfgGet(c, "h5_api_secret_key")) + c.Set("app_api_secret_key", svc.SysCfgGet(c, "app_api_secret_key")) + c.Set("applet_api_secret_key", svc.SysCfgGet(c, "applet_api_secret_key")) + c.Set("integral_prec", svc.SysCfgGet(c, "integral_prec")) + fanOrderCommissionPrec := svc.SysCfgGet(c, "fan_order_commission_prec") + if fanOrderCommissionPrec == "" { + fanOrderCommissionPrec = "2" + } + c.Set("fan_order_commission_prec", fanOrderCommissionPrec) + areaOrderCommissionPrec := svc.SysCfgGet(c, "area_order_commission_prec") + if areaOrderCommissionPrec == "" { + areaOrderCommissionPrec = "2" + } + c.Set("area_order_commission_prec", areaOrderCommissionPrec) + + commissionPrec := svc.SysCfgGet(c, "commission_prec") + c.Set("commission_prec", commissionPrec) + pricePrec := svc.SysCfgGet(c, "price_prec") + if pricePrec == "" { + pricePrec = commissionPrec + } + dsChcek := svc.SysCfgGet(c, "ds_check") + if dsChcek == "1" { + pricePrec = commissionPrec + } + c.Set("price_prec", pricePrec) + c.Set("is_show_point", svc.SysCfgGet(c, "is_show_point")) + c.Set("appUserDefaultAvatar", svc.SysCfgGet(c, "app_user_default_avatar")) + + translateOpen := "" + if strings.Contains(c.GetHeader("locale"), "zh_Hant_") { + translateOpen = "zh_Hant_" + } + if strings.Contains(c.GetHeader("locale"), "ug_CN") { + translateOpen = "ug_CN" + } + c.Set("translate_open", translateOpen) + orderVirtualCoinType := db.SysCfgGet(c, "order_virtual_coin_type") + c.Set("order_virtual_coin_type", orderVirtualCoinType) + orderVirtualCoinName := db.SysCfgGet(c, "order_virtual_coin_name") + if orderVirtualCoinName == "" { + orderVirtualCoinName = "收益:¥" + } + c.Set("orderVirtualCoinName", orderVirtualCoinName) + h5AppletMustSign := svc.SysCfgGet(c, "h5_applet_must_sign") + c.Set("h5_applet_must_sign", h5AppletMustSign) + androidMustSign := svc.SysCfgGet(c, "android_must_sign") + c.Set("android_must_sign", androidMustSign) + iosMustSign := svc.SysCfgGet(c, "ios_must_sign") + c.Set("ios_must_sign", iosMustSign) + c.Set("is_not_change_url", "0") + smsType := svc.SysCfgGet(c, "sms_type") + c.Set("sms_type", smsType) + if utils.StrToInt64(c.GetHeader("app_version")) > 1678445020 { + // || utils.StrToInt64(c.GetHeader("BuildVersion")) > 1678676004 + c.Set("is_not_change_url", "1") + } + if utils.InArr(c.GetHeader("platform"), []string{md.PLATFORM_ANDROID, md.PLATFORM_IOS}) == false { + c.Set("is_not_change_url", "1") + } + GetHeaderParam(c) + c.Next() +} + +func GetHeaderParam(c *gin.Context) { + var appTypeList = []string{"app_type", "App_type", "AppType"} + appType := "" + for _, v := range appTypeList { + val := c.GetHeader(v) + if val != "" { + appType = val + } + } + c.Set("app_type", appType) + var storeIdList = []string{"store_id", "Store_id", "StoreId"} + storeId := "" + for _, v := range storeIdList { + val := c.GetHeader(v) + if val != "" { + storeId = val + } + } + c.Set("store_id", storeId) +} diff --git a/app/mw/mw_limiter.go b/app/mw/mw_limiter.go new file mode 100644 index 0000000..3c9fb79 --- /dev/null +++ b/app/mw/mw_limiter.go @@ -0,0 +1,77 @@ +package mw + +import ( + "applet/app/e" + "applet/app/md" + "applet/app/svc" + "applet/app/utils" + "applet/app/utils/cache" + "bytes" + "fmt" + "github.com/gin-gonic/gin" + "io/ioutil" +) + +func Limiter(c *gin.Context) { + limit := 200 // 限流次数 + ttl := 2 // 限流过期时间 + ip := c.ClientIP() + // 读取token或者ip + token := c.GetHeader("Authorization") + mid := c.GetString("mid") + // 判断是否已经超出限额次数 + method := c.Request.Method + host := c.Request.Host + uri := c.Request.URL.String() + + buf := make([]byte, 5120*10) + num, _ := c.Request.Body.Read(buf) + body := buf[:num] + // Write body back + c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + //queryValue := utils.SerializeStr(c.Request.URL.Query()) //不建议开启,失去限流的意义 + + //TODO::分布式锁阻拦(保证原子性) + requestIdPrefix := fmt.Sprintf(md.DealAppLimiterRequestIdPrefix, mid, ip) + cb, err := svc.HandleLimiterDistributedLock(mid, ip, requestIdPrefix) + if err != nil { + e.OutErr(c, e.ERR, err.Error()) + return + } + if cb != nil { + defer cb() // 释放锁 + } + + Md5 := utils.Md5(ip + token + method + host + uri + string(body)) + //Md5 := utils.Md5(ip + token + method + host + uri + string(body) + queryValue) + if cache.Exists(Md5) { + c.AbortWithStatusJSON(428, gin.H{ + "code": 428, + "msg": "don't repeat the request", + "data": struct{}{}, + }) + return + } + + // 2s后没返回自动释放 + go cache.SetEx(Md5, "0", ttl) + + key := "NEW_LIMITER_APP_COMM_" + ip + reqs, _ := cache.GetInt(key) + if reqs >= limit { + c.AbortWithStatusJSON(429, gin.H{ + "code": 429, + "msg": "too many requests", + "data": struct{}{}, + }) + return + } + if reqs > 0 { + //go cache.Incr(key) + go cache.SetEx(key, reqs+1, ttl) + } else { + go cache.SetEx(key, 1, ttl) + } + c.Next() + go cache.Del(Md5) +} diff --git a/app/mw/mw_limiter_newcomers.go b/app/mw/mw_limiter_newcomers.go new file mode 100644 index 0000000..7cf7d2b --- /dev/null +++ b/app/mw/mw_limiter_newcomers.go @@ -0,0 +1,77 @@ +package mw + +import ( + "applet/app/e" + "applet/app/md" + "applet/app/svc" + "applet/app/utils" + "applet/app/utils/cache" + "bytes" + "fmt" + "github.com/gin-gonic/gin" + "io/ioutil" +) + +func LimiterNewComers(c *gin.Context) { + limit := 200 // 限流次数 + ttl := 2 // 限流过期时间 + ip := c.ClientIP() + // 读取token或者ip + token := c.GetHeader("Authorization") + mid := c.GetString("mid") + // 判断是否已经超出限额次数 + method := c.Request.Method + host := c.Request.Host + uri := c.Request.URL.String() + + buf := make([]byte, 5120*10) + num, _ := c.Request.Body.Read(buf) + body := buf[:num] + // Write body back + c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + //queryValue := utils.SerializeStr(c.Request.URL.Query()) //不建议开启,失去限流的意义 + + //TODO::分布式锁阻拦(保证原子性) + requestIdPrefix := fmt.Sprintf(md.DealAppNewcomersLimiterRequestIdPrefix, mid, ip) + cb, err := svc.HandleLimiterDistributedLock(mid, ip, requestIdPrefix) + if err != nil { + e.OutErr(c, e.ERR, err.Error()) + return + } + if cb != nil { + defer cb() // 释放锁 + } + + Md5 := utils.Md5(ip + token + method + host + uri + string(body)) + //Md5 := utils.Md5(ip + token + method + host + uri + string(body) + queryValue) + if cache.Exists(Md5) { + c.AbortWithStatusJSON(428, gin.H{ + "code": 428, + "msg": "请求频繁", + "data": struct{}{}, + }) + return + } + + // 2s后没返回自动释放 + go cache.SetEx(Md5, "0", ttl) + + key := "NEW_LIMITER_APP_NEWCOMERS_COMM_" + ip + reqs, _ := cache.GetInt(key) + if reqs >= limit { + c.AbortWithStatusJSON(429, gin.H{ + "code": 429, + "msg": "请求频繁", + "data": struct{}{}, + }) + return + } + if reqs > 0 { + //go cache.Incr(key) + go cache.SetEx(key, reqs+1, ttl) + } else { + go cache.SetEx(key, 1, ttl) + } + c.Next() + go cache.Del(Md5) +} diff --git a/app/mw/mw_recovery.go b/app/mw/mw_recovery.go new file mode 100644 index 0000000..b32cc82 --- /dev/null +++ b/app/mw/mw_recovery.go @@ -0,0 +1,57 @@ +package mw + +import ( + "net" + "net/http" + "net/http/httputil" + "os" + "runtime/debug" + "strings" + + "github.com/gin-gonic/gin" + "go.uber.org/zap" +) + +func Recovery(logger *zap.Logger, stack bool) gin.HandlerFunc { + return func(c *gin.Context) { + defer func() { + if err := recover(); err != nil { + var brokenPipe bool + if ne, ok := err.(*net.OpError); ok { + if se, ok := ne.Err.(*os.SyscallError); ok { + if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") { + brokenPipe = true + } + } + } + + httpRequest, _ := httputil.DumpRequest(c.Request, false) + if brokenPipe { + logger.Error(c.Request.URL.Path, + zap.Any("error", err), + zap.String("request", string(httpRequest)), + ) + // If the connection is dead, we can't write a status to it. + c.Error(err.(error)) + c.Abort() + return + } + + if stack { + logger.Error("[Recovery from panic]", + zap.Any("error", err), + zap.String("request", string(httpRequest)), + zap.String("stack", string(debug.Stack())), + ) + } else { + logger.Error("[Recovery from panic]", + zap.Any("error", err), + zap.String("request", string(httpRequest)), + ) + } + c.AbortWithStatus(http.StatusInternalServerError) + } + }() + c.Next() + } +} diff --git a/app/router/router.go b/app/router/router.go new file mode 100644 index 0000000..94edf78 --- /dev/null +++ b/app/router/router.go @@ -0,0 +1,72 @@ +package router + +import ( + "applet/app/cfg" + "applet/app/hdl" + "applet/app/mw" + _ "applet/docs" + "github.com/gin-gonic/gin" +) + +// 初始化路由 +// 1 +func Init() *gin.Engine { + // debug, release, test 项目阶段 + mode := "release" + if cfg.Debug { + mode = "debug" + } + gin.SetMode(mode) + //创建一个新的启动器 + r := gin.New() + r.Use(mw.ChangeHeader) + + // 是否打印访问日志, 在非正式环境都打印 + if mode != "release" { + r.Use(gin.Logger()) + } + r.Use(gin.Recovery()) + + r.GET("/favicon.ico", func(c *gin.Context) { + c.Status(204) + }) + r.NoRoute(func(c *gin.Context) { + c.JSON(404, gin.H{"code": 404, "msg": "page not found", "data": []struct{}{}}) + }) + r.NoMethod(func(c *gin.Context) { + c.JSON(405, gin.H{"code": 405, "msg": "method not allowed", "data": []struct{}{}}) + }) + r.Use(mw.Cors) + routeCommunityTeam(r.Group("/api/v1/communityTeam")) + return r +} +func routeCommunityTeam(r *gin.RouterGroup) { + r.Use(mw.DB) // 下面接口再根据mid 获取数据库名 + r.Use(mw.CheckBody) //body参数转换 + r.Use(mw.CheckSign) //签名校验 + r.Use(mw.Checker) + r.GET("/cate", hdl.Cate) + r.GET("/bank/store/cate", hdl.BankStoreCate) + r.POST("/bank/store/list", hdl.BankStore) + r.POST("/store", hdl.Store) + // 用户授权后调用的接口 + r.Use(mw.AuthJWT) + r.POST("/store/addLike", hdl.StoreAddLike) + r.POST("/store/cancelLike", hdl.StoreCancelLike) + r.POST("/goods", hdl.Goods) + r.POST("/goods/sku", hdl.GoodsSku) + r.POST("/goods/coupon", hdl.GoodsCoupon) + r.POST("/order/total", hdl.OrderTotal) + r.POST("/order/create", hdl.OrderCreate) + r.POST("/order/cancel", hdl.OrderCancel) + r.POST("/order/coupon", hdl.OrderCoupon) + r.POST("/order/list", hdl.OrderList) + r.POST("/order/detail", hdl.OrderDetail) + r.GET("/order/cate", hdl.OrderCate) + r.POST("/pay/:payMethod/:orderType", hdl.Pay) + + r.POST("/store/order/list", hdl.StoreOrderList) + r.POST("/store/order/detail", hdl.StoreOrderDetail) + r.POST("/store/order/confirm", hdl.StoreOrderConfirm) + r.GET("/store/order/cate", hdl.StoreOrderCate) +} diff --git a/app/svc/svc_alipay.go b/app/svc/svc_alipay.go new file mode 100644 index 0000000..b2b384f --- /dev/null +++ b/app/svc/svc_alipay.go @@ -0,0 +1,106 @@ +package svc + +import ( + "applet/app/cfg" + "applet/app/db" + "applet/app/e" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/logx" + "code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" + "fmt" + "github.com/gin-gonic/gin" + "github.com/iGoogle-ink/gopay/alipay" +) + +// 支付宝回调处理 +func AlipayCallback(c *gin.Context) (string, error) { + data, ok := c.Get("callback") + if data == nil || !ok { + return "", e.NewErrCode(e.ERR_INVALID_ARGS) + } + args := data.(*md.AliPayCallback) + _, ok = db.DBs[args.MasterID] + if !ok { + return "", logx.Warn("Alipay Failed : master_id not found") + } + c.Set("mid", args.MasterID) + // 回调交易状态失败 + if args.TradeStatus != "TRADE_SUCCESS" { + return "", logx.Warn("Alipay Failed : trade status failed") + } + return args.OutTradeNo, nil +} + +func PrepareAlipayCode(c *gin.Context, p *md.AliPayPayParams) (interface{}, error) { + req, err := CommAlipayConfig(c, p) + if err != nil { + return "", err + } + var param interface{} + switch req["platform"] { + case md.PLATFORM_ALIPAY_APPLET: + param, err = pay.AlipayApplet(req) + case md.PLATFORM_WAP: + param, err = pay.AlipayWap(req) + case md.PLATFORM_ANDROID, md.PLATFORM_IOS: + param, err = pay.AlipayApp(req) + default: + return "", e.NewErrCode(e.ERR_PLATFORM) + } + if err != nil { + fmt.Println("支付宝错误日志") + fmt.Println(param) + fmt.Println(err) + return "", e.NewErrCode(e.ERR_ALIPAY_ORDER_ERR) + } + return utils.AnyToString(param), nil + +} + +func CommAlipayConfig(c *gin.Context, p *md.AliPayPayParams) (map[string]string, error) { + //获取支付配置 + req := map[string]string{ + "pay_ali_use_type": SysCfgGet(c, "pay_ali_use_type"), + "private_key": SysCfgGet(c, "pay_ali_private_key"), + "app_id": SysCfgGet(c, "pay_ali_app_id"), + "rsa": SysCfgGet(c, "pay_ali_key_len_type"), + "pkcs": SysCfgGet(c, "pay_ali_key_format_type"), + } + if req["pay_ali_use_type"] == "1" { + req["private_key"] = SysCfgGet(c, "pay_ali_new_private_key") + req["app_id"] = SysCfgGet(c, "pay_ali_new_app_id") + appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + SysCfgGet(c, "pay_app_cert_sn")) + if err != nil { + fmt.Println(err) + return nil, err + } + if appCertSN == "" { + fmt.Println(err) + return nil, err + } + req["pay_app_cert_sn"] = appCertSN + aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + SysCfgGet(c, "pay_alipayrsa_public_key")) + if err != nil { + fmt.Println(err) + return nil, err + } + if aliPayPublicCertSN == "" { + fmt.Println(err) + return nil, err + } + req["pay_alipayrsa_public_key"] = aliPayPublicCertSN + } + if req["private_key"] == "" || req["app_id"] == "" { + return req, e.NewErr(400, "请在后台正确配置支付宝") + } + req["ord_id"] = p.OrdId + req["amount"] = p.Amount + req["subject"] = p.Subject + req["order_type"] = p.OrderType + req["notify_url"] = fmt.Sprintf(md.CALLBACK_URL, c.Request.Host, c.GetString("mid"), p.OrderType, md.ALIPAY) + req["platform"] = c.GetHeader("Platform") + req["page_url"] = c.Query("page_url") + utils.FilePutContents(c.GetString("mid")+"alipay", utils.SerializeStr(req)) + return req, nil +} diff --git a/app/svc/svc_auth.go b/app/svc/svc_auth.go new file mode 100644 index 0000000..988a3d7 --- /dev/null +++ b/app/svc/svc_auth.go @@ -0,0 +1,69 @@ +package svc + +import ( + "applet/app/db" + "applet/app/md" + "applet/app/utils" + "errors" + "github.com/gin-gonic/gin" + "strings" +) + +// 因为在mw_auth已经做完所有校验, 因此在此不再做任何校验 +// GetUser is get user model +func GetUser(c *gin.Context) *md.User { + user, _ := c.Get("user") + if user == nil { + return nil + } + return user.(*md.User) +} + +func GetUid(c *gin.Context) string { + user, _ := c.Get("user") + u := user.(*md.User) + return utils.IntToStr(u.Info.Uid) +} + +func CheckUser(c *gin.Context) (*md.User, error) { + token := c.GetHeader("Authorization") + if token == "" { + return nil, errors.New("token not exist") + } + // 按空格分割 + parts := strings.SplitN(token, " ", 2) + if !(len(parts) == 2 && parts[0] == "Bearer") { + return nil, errors.New("token format error") + } + // parts[1]是获取到的tokenString,我们使用之前定义好的解析JWT的函数来解析它 + mc, err := utils.ParseToken(parts[1]) + if err != nil { + return nil, err + } + + // 获取user + u, err := db.UserFindByID(db.DBs[c.GetString("mid")], mc.UID) + if err != nil { + return nil, err + } + if u == nil { + return nil, errors.New("token can not find user") + } + // 获取user profile + up, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], mc.UID) + if err != nil { + return nil, err + } + // 获取user 等级 + ul, err := db.UserLevelByID(db.DBs[c.GetString("mid")], u.Level) + if err != nil { + return nil, err + } + + user := &md.User{ + Info: u, + Profile: up, + Level: ul, + } + return user, nil +} diff --git a/app/svc/svc_balance.go b/app/svc/svc_balance.go new file mode 100644 index 0000000..6e30eec --- /dev/null +++ b/app/svc/svc_balance.go @@ -0,0 +1,74 @@ +package svc + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/e" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/logx" + "github.com/gin-gonic/gin" + "time" + "xorm.io/xorm" +) + +func BalancePay(c *gin.Context, money, oid string, types string) error { + + user, err := CheckUser(c) + if user == nil || err != nil { + return err + } + // 获取余额更新锁 + cb, err := HandleBalanceDistributedLock(c.GetString("mid"), utils.IntToStr(user.Info.Uid), "balance_pay") + if err != nil { + return err + } + // 释放锁 + if cb != nil { + defer cb() + } + finValid := utils.AnyToFloat64(user.Profile.FinValid) + needMoney := utils.AnyToFloat64(money) + if finValid < needMoney { + return e.NewErrCode(e.ERR_BALANCE_NOT_ENOUGH) + } + user.Profile.FinValid = utils.AnyToString(finValid - needMoney) + affect, err := db.UserProfileUpdate(db.DBs[c.GetString("mid")], user.Profile.Uid, user.Profile, "fin_valid") + if err != nil || affect != 1 { + return err + } + var str = "" + if types == md.CommunityTeam { + str = "小店下单" + } + flowInsert(db.DBs[c.GetString("mid")], user.Profile.Uid, money, 21, utils.StrToInt64(oid), 0, 0, str+"余额支付", types, 1, utils.Float64ToStr(finValid), user.Profile.FinValid) + return nil +} +func flowInsert(eg *xorm.Engine, uid int, paidPrice string, orderAction int, ordId int64, id int64, goodsId int, ItemTitle string, ordType string, types int, beforeAmount string, afterAmount string) { + session := eg.NewSession() + + now := time.Now() + if err := db.FinUserFlowInsertOneWithSession( + session, + &model.FinUserFlow{ + Type: types, + Uid: uid, + Amount: paidPrice, + BeforeAmount: beforeAmount, + AfterAmount: afterAmount, + OrdType: ordType, + OrdId: utils.Int64ToStr(ordId), + OrdAction: orderAction, + OrdDetail: utils.IntToStr(goodsId), + State: 2, + OtherId: id, + OrdTitle: ItemTitle, + OrdTime: int(now.Unix()), + CreateAt: now, + UpdateAt: now, + }); err != nil { + _ = session.Rollback() + _ = logx.Warn(err) + return + } +} diff --git a/app/svc/svc_cate.go b/app/svc/svc_cate.go new file mode 100644 index 0000000..1b02dbe --- /dev/null +++ b/app/svc/svc_cate.go @@ -0,0 +1,24 @@ +package svc + +import ( + "applet/app/db" + "applet/app/e" + "applet/app/utils" + "github.com/gin-gonic/gin" +) + +func Cate(c *gin.Context) { + cate := db.GetCate(MasterDb(c), "0") + cateList := make([]map[string]string, 0) + if cate != nil { + for _, v := range *cate { + tmp := map[string]string{ + "id": utils.IntToStr(v.Id), + "name": v.Title, + } + cateList = append(cateList, tmp) + } + } + e.OutSuc(c, cateList, nil) + return +} diff --git a/app/svc/svc_comm.go b/app/svc/svc_comm.go new file mode 100644 index 0000000..f5b28e3 --- /dev/null +++ b/app/svc/svc_comm.go @@ -0,0 +1,25 @@ +package svc + +import ( + "applet/app/utils" + "github.com/gin-gonic/gin" + "strings" +) + +func GetCommissionPrec(c *gin.Context, sum, commPrec, isShowPoint string) string { + if sum == "" { + sum = "0" + } + sum = utils.StrToFormat(c, sum, utils.StrToInt(commPrec)) + ex := strings.Split(sum, ".") + if len(ex) == 2 && isShowPoint != "1" { + if utils.StrToFloat64(ex[1]) == 0 { + sum = ex[0] + } else { + val := utils.Float64ToStrByPrec(utils.StrToFloat64(ex[1]), 0) + valNew := strings.ReplaceAll(val, "0", "") + sum = ex[0] + "." + strings.ReplaceAll(ex[1], val, valNew) + } + } + return sum +} diff --git a/app/svc/svc_db.go b/app/svc/svc_db.go new file mode 100644 index 0000000..99b1e0d --- /dev/null +++ b/app/svc/svc_db.go @@ -0,0 +1,11 @@ +package svc + +import ( + "applet/app/db" + "github.com/gin-gonic/gin" + "xorm.io/xorm" +) + +func MasterDb(c *gin.Context) *xorm.Engine { + return db.DBs[c.GetString("mid")] +} diff --git a/app/svc/svc_default_user.go b/app/svc/svc_default_user.go new file mode 100644 index 0000000..63bdaaa --- /dev/null +++ b/app/svc/svc_default_user.go @@ -0,0 +1,50 @@ +package svc + +import ( + "applet/app/db" + "applet/app/md" + "errors" + "github.com/gin-gonic/gin" + "strings" +) + +// GetDefaultUser is 获取默认账号,uid =0 为系统默认账号,用于一些请求需要渠道id之类的东西 +func GetDefaultUser(c *gin.Context, token string) (*md.User, error) { + user := new(md.User) + if c.GetString("convert_url") == "1" { //转链接口 + goto DEFALUT + } else { + // Token 不为空时拿对应的用户数据 + if token != "" && strings.Contains(token, "Bearer") { + + user, err := CheckUser(c) + if user == nil { + return nil, errors.New("token is expired") + } + if err != nil { + // 有报错自己拿默认用户 + goto DEFALUT + } + return user, nil + } + } + +DEFALUT: + // 默认拿uid 等于0的用户数据 + profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], 0) + if err != nil { + return nil, err + } + info, err := db.UserFindByID(db.DBs[c.GetString("mid")], 0) + if err != nil { + return nil, err + } + ul, err := db.UserLevelInIDescByWeightLowWithOne(db.DBs[c.GetString("mid")]) + if err != nil { + return nil, err + } + user.Info = info + user.Profile = profile + user.Level = ul + return user, nil +} diff --git a/app/svc/svc_domain_info.go b/app/svc/svc_domain_info.go new file mode 100644 index 0000000..9318ad9 --- /dev/null +++ b/app/svc/svc_domain_info.go @@ -0,0 +1,206 @@ +package svc + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/db/offical" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/logx" + "github.com/gin-gonic/gin" + "github.com/tidwall/gjson" + "strings" +) + +// 获取指定类型的域名:admin、wap、api +func GetWebSiteDomainInfo(c *gin.Context, domainType string) string { + if domainType == "" { + domainType = "wap" + } + + domainSetting := SysCfgGet(c, "domain_setting") + + domainTypePath := domainType + ".type" + domainSslPath := domainType + ".isOpenHttps" + domainPath := domainType + ".domain" + + domainTypeValue := gjson.Get(domainSetting, domainTypePath).String() + domainSslValue := gjson.Get(domainSetting, domainSslPath).String() + domain := gjson.Get(domainSetting, domainPath).String() + + scheme := "http://" + if domainSslValue == "1" { + scheme = "https://" + } + + // 有自定义域名 返回自定义的 + if domainTypeValue == "own" && domain != "" { + return scheme + domain + } + // 否则返回官方的 + official, err := db.GetOfficialDomainInfoByType(db.Db, c.GetString("mid"), domainType) + if err != nil { + _ = logx.Errorf("Get Official Domain Fail! %s", err) + return "" + } + if strings.Contains(official, "http") { + return official + } + return scheme + official +} +func GetWebSiteDomainInfoToAgent(c *gin.Context, domainType string) string { + if domainType == "" { + domainType = "wap" + } + + domainSetting := SysCfgGet(c, "domain_setting") + + domainTypePath := domainType + ".type" + domainSslPath := domainType + ".isOpenHttps" + domainPath := domainType + ".domain" + + domainTypeValue := gjson.Get(domainSetting, domainTypePath).String() + domainSslValue := gjson.Get(domainSetting, domainSslPath).String() + domain := gjson.Get(domainSetting, domainPath).String() + + scheme := "http://" + if domainSslValue == "1" { + scheme = "https://" + } + + // 有自定义域名 返回自定义的 + if domainTypeValue == "own" && domain != "" { + return scheme + domain + } + // 否则返回官方的 + puid := AppUserListPuid(c) + var official = "" + var err error + if puid != "" && puid != "0" { + official, err = db.GetOfficialDomainInfoByTypeToAgent(db.Db, c.GetString("mid"), puid, domainType) + if err != nil { + _ = logx.Errorf("Get Official Domain Fail! %s", err) + return "" + } + } else { + official, err = db.GetOfficialDomainInfoByType(db.Db, c.GetString("mid"), domainType) + if err != nil { + _ = logx.Errorf("Get Official Domain Fail! %s", err) + return "" + } + } + if strings.Contains(official, "http") { + return official + } + return scheme + official +} +func GetWebSiteDomainInfoOfficial(c *gin.Context, domainType string) string { + if domainType == "" { + domainType = "wap" + } + + domainSetting := SysCfgGet(c, "domain_setting") + + domainSslPath := domainType + ".isOpenHttps" + + domainSslValue := gjson.Get(domainSetting, domainSslPath).String() + + scheme := "http://" + if domainSslValue == "1" { + scheme = "https://" + } + + // 有自定义域名 返回自定义的 + // 否则返回官方的 + official, err := db.GetOfficialDomainInfoByType(db.Db, c.GetString("mid"), domainType) + if err != nil { + _ = logx.Errorf("Get Official Domain Fail! %s", err) + return "" + } + if strings.Contains(official, "http") { + return official + } + return scheme + official +} + +// 获取指定类型的域名对应的masterId:admin、wap、api +func GetWebSiteDomainMasterId(domainType string, host string) string { + obj := new(model.UserAppDomain) + has, err := db.Db.Where("domain=? and type=?", host, domainType).Get(obj) + if err != nil || !has { + return "" + } + return utils.AnyToString(obj.Uuid) +} + +func GetWebSiteAppSmsPlatform(mid string) string { + obj := new(model.UserAppList) + has, err := db.Db.Where("uuid=? ", mid).Asc("id").Get(obj) + if err != nil || !has { + return "" + } + return utils.AnyToString(obj.SmsPlatform) +} + +// 获取指定类型的域名:admin、wap、api +func GetWebSiteLiveBroadcastDomainInfo(c *gin.Context, domainType, mid string) string { + if domainType == "" { + domainType = "wap" + } + + domainSetting := SysCfgGet(c, "domain_setting") + domainSslPath := domainType + ".isOpenHttps" + domainSslValue := gjson.Get(domainSetting, domainSslPath).String() + //masterid.izhyin.cn + domain := mid + ".izhim.net" + + scheme := "http://" + if domainSslValue == "1" { + scheme = "https://" + } + if c.GetHeader("platform") == md.PLATFORM_WX_APPLET { //小程序需要https + scheme = "https://" + } + return scheme + domain +} +func GetWebSiteDomainInfoSecond(c *gin.Context, domainType string) string { + if domainType == "" { + domainType = "wap" + } + + domainSetting := SysCfgGet(c, "domain_setting") + domainSslPath := domainType + ".isOpenHttps" + domainSslValue := gjson.Get(domainSetting, domainSslPath).String() + domain := c.GetString("mid") + ".izhim.net" + domainTypePath := domainType + ".type" + domainTypeValue := gjson.Get(domainSetting, domainTypePath).String() + scheme := "http://" + if domainSslValue == "1" { + scheme = "https://" + } + if c.GetHeader("platform") == md.PLATFORM_WX_APPLET { //小程序需要https + scheme = "https://" + } + // 有自定义域名 返回自定义的 + if domainTypeValue == "own" { + domainPath := domainType + ".domain" + domain = gjson.Get(domainSetting, domainPath).String() + } + return scheme + domain +} +func AppUserListPuid(c *gin.Context) string { + appList := offical.GetUserAppList(c.GetString("mid")) + uid := "0" + if appList != nil && appList.Puid > 0 { + uid = utils.IntToStr(appList.Puid) + } + return uid +} +func AppUserListPuidWithDb(dbName string) string { + appList := offical.GetUserAppList(dbName) + uid := "0" + if appList != nil && appList.Puid > 0 { + uid = utils.IntToStr(appList.Puid) + } + return uid +} diff --git a/app/svc/svc_file_img_format.go b/app/svc/svc_file_img_format.go new file mode 100644 index 0000000..4131981 --- /dev/null +++ b/app/svc/svc_file_img_format.go @@ -0,0 +1,81 @@ +package svc + +import ( + "applet/app/utils" + "fmt" + "github.com/syyongx/php2go" + "strings" + + "github.com/gin-gonic/gin" +) + +// ImageFormat is 格式化 图片 +func ImageFormat(c *gin.Context, name string) string { + if strings.Contains(name, "https:") || strings.Contains(name, "http:") { + return name + } + scheme := SysCfgGet(c, "file_bucket_scheme") + domain := SysCfgGet(c, "file_bucket_host") + name, _ = php2go.URLDecode(name) + name = php2go.URLEncode(name) + return fmt.Sprintf("%s://%s/%s", scheme, domain, name) +} + +// OffImageFormat is 格式化官方 图片 +func OffImageFormat(c *gin.Context, name string) string { + if strings.Contains(name, "https:") || strings.Contains(name, "http:") { + return name + } + name, _ = php2go.URLDecode(name) + name = php2go.URLEncode(name) + + return fmt.Sprintf("%s://%s/%s", "http", "ossn.izhim.net", name) +} + +// ImageBucket is 获取域名 +func ImageBucket(c *gin.Context) (string, string) { + return SysCfgGet(c, "file_bucket_scheme"), SysCfgGet(c, "file_bucket_host") +} + +// ImageFormatWithBucket is 格式化成oss 域名 +func ImageFormatWithBucket(scheme, domain, name string) string { + if strings.Contains(name, "http") || name == "" { + return name + } + name, _ = php2go.URLDecode(name) + name = php2go.URLEncode(name) + return fmt.Sprintf("%s://%s/%s", scheme, domain, name) +} + +// ImageBucketNew is 获取域名 +func ImageBucketNew(c *gin.Context) (string, string, string, map[string]string) { + var list = make(map[string]string, 0) + for i := 1; i < 10; i++ { + keys := "file_bucket_sub_host" + utils.IntToStr(i) + list[keys] = SysCfgGet(c, keys) + } + return SysCfgGet(c, "file_bucket_scheme"), SysCfgGet(c, "file_bucket_host"), SysCfgGet(c, "file_bucket_sub_host"), list +} + +// ImageFormatWithBucket is 格式化成oss 域名 +func ImageFormatWithBucketNew(scheme, domain, subDomain string, moreSubDomain map[string]string, name string) string { + if strings.Contains(name, "http") { + return name + } + if strings.Contains(name, "{{subhost}}") && subDomain != "" { //读副域名 有可能是其他平台的 + domain = subDomain + } + //为了兼容一些客户自营商城导到不同系统 并且七牛云不一样 + for i := 1; i < 10; i++ { + keys := "file_bucket_sub_host" + utils.IntToStr(i) + if strings.Contains(name, "{{subhost"+utils.IntToStr(i)+"}}") && moreSubDomain[keys] != "" { + domain = moreSubDomain[keys] + } + name = strings.ReplaceAll(name, "{{subhost"+utils.IntToStr(i)+"}}", "") + } + name = strings.ReplaceAll(name, "{{host}}", "") + name = strings.ReplaceAll(name, "{{subhost}}", "") + name, _ = php2go.URLDecode(name) + name = php2go.URLEncode(name) + return fmt.Sprintf("%s://%s/%s", scheme, domain, name) +} diff --git a/app/svc/svc_goods.go b/app/svc/svc_goods.go new file mode 100644 index 0000000..7c6f19e --- /dev/null +++ b/app/svc/svc_goods.go @@ -0,0 +1,75 @@ +package svc + +import ( + "applet/app/db" + "applet/app/e" + "applet/app/utils" + "encoding/json" + "github.com/gin-gonic/gin" +) + +func Goods(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + goods := db.GetGoods(MasterDb(c), arg) + goodsList := make([]map[string]interface{}, 0) + if goods != nil { + for _, v := range *goods { + speImageList := make([]string, 0) + if v.IsSpeImageOn == 1 { + json.Unmarshal([]byte(v.SpeImages), &speImageList) + } + tmp := map[string]interface{}{ + "id": utils.IntToStr(v.Id), + "title": v.Title, + "img": v.Img, + "info": v.Info, + "price": v.Price, + "stock": utils.IntToStr(v.Stock), + "is_single_sku": utils.IntToStr(v.IsSingleSku), + "sale_count": utils.IntToStr(v.SaleCount), + "spe_image_list": speImageList, + } + goodsList = append(goodsList, tmp) + } + } + e.OutSuc(c, goodsList, nil) + return +} +func GoodsSku(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + sku := db.GetGoodsSku(MasterDb(c), arg["goods_id"]) + skuList := make([]map[string]string, 0) + if sku != nil { + for _, v := range *sku { + tmp := map[string]string{ + "sku_id": utils.Int64ToStr(v.SkuId), + "goods_id": utils.IntToStr(v.GoodsId), + "price": v.Price, + "stock": utils.IntToStr(v.Stock), + "indexes": v.Indexes, + "sku": v.Sku, + } + skuList = append(skuList, tmp) + } + } + e.OutSuc(c, skuList, nil) + return +} +func GoodsCoupon(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + returnData := CommCoupon(c, arg["amount"]) + e.OutSuc(c, returnData, nil) + return +} diff --git a/app/svc/svc_order.go b/app/svc/svc_order.go new file mode 100644 index 0000000..d0be942 --- /dev/null +++ b/app/svc/svc_order.go @@ -0,0 +1,656 @@ +package svc + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/e" + "applet/app/enum" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/cache" + "encoding/json" + "errors" + "fmt" + "github.com/gin-gonic/gin" + "github.com/shopspring/decimal" + "time" + "xorm.io/xorm" +) + +func OrderCate(c *gin.Context) { + var cate = []map[string]string{ + {"name": "全部", "value": ""}, + {"name": "待付款", "value": "0"}, + {"name": "待提货", "value": "1"}, + {"name": "已完成", "value": "2"}, + {"name": "已取消", "value": "3"}, + } + e.OutSuc(c, cate, nil) + return +} +func OrderList(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + user := GetUser(c) + arg["uid"] = utils.IntToStr(user.Info.Uid) + data := db.GetOrderList(MasterDb(c), arg) + var state = []string{"待付款", "待提货", "已完成", "已取消"} + list := make([]map[string]string, 0) + if data != nil { + now := time.Now().Unix() + for _, v := range *data { + store := db.GetStoreIdEg(MasterDb(c), utils.IntToStr(v.StoreUid)) + info := db.GetOrderInfoEg(MasterDb(c), utils.Int64ToStr(v.Oid)) + downTime := "0" + if v.State == 0 { + downTime = utils.IntToStr(int(v.CreateAt.Unix() + 15*60 - now)) + if now > v.CreateAt.Unix()+15*60 { + v.State = 3 + } + if utils.StrToInt(downTime) < 0 { + downTime = "0" + } + } + img := "" + title := "" + storeName := "" + if store != nil { + storeName = store.Name + } + if info != nil { + img = info.Img + title = info.Title + } + tmp := map[string]string{ + "oid": utils.Int64ToStr(v.Oid), + "label": "自提", + "state": utils.IntToStr(v.State), + "state_str": state[v.State], + "store_name": storeName, + "img": img, + "title": title, + "amount": v.Amount, + "num": utils.IntToStr(v.Num), + "timer": "", + "down_time": downTime, + } + if v.Type == 1 { + tmp["label"] = "外卖" + } + if v.IsNow == 1 { + tmp["timer"] = "立即提货" + } else if v.Timer != "" { + tmp["timer"] = "提货时间:" + v.Timer + } + list = append(list, tmp) + } + } + e.OutSuc(c, list, nil) + return +} +func OrderDetail(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + data := db.GetOrderEg(MasterDb(c), arg["oid"]) + var state = []string{"待付款", "待提货", "已完成", "已取消"} + now := time.Now().Unix() + store := db.GetStoreIdEg(MasterDb(c), utils.IntToStr(data.StoreUid)) + downTime := "0" + if data.State == 0 { + downTime = utils.IntToStr(int(data.CreateAt.Unix() + 15*60 - now)) + if now > data.CreateAt.Unix()+15*60 { + data.State = 3 + } + if utils.StrToInt(downTime) < 0 { + downTime = "0" + } + } + img := "" + title := "" + storeName := "" + storeAddress := "" + lat := "" + lng := "" + km := "" + if store != nil { + storeName = store.Name + storeAddress = store.Address + lat = store.Lat + lng = store.Lng + km = "" + if arg["lat"] != "" && arg["lng"] != "" { + km1 := utils.CalculateDistance(utils.StrToFloat64(lat), utils.StrToFloat64(lng), utils.StrToFloat64(arg["lat"]), utils.StrToFloat64(arg["lng"])) + if km1 < 1 { + km = utils.Float64ToStr(km1*1000) + "m" + } else { + km = utils.Float64ToStr(km1) + "km" + } + } + } + confirmAt := "" + if data.ConfirmAt.IsZero() == false { + confirmAt = data.ConfirmAt.Format("2006-01-02 15:04:05") + } + payMethod := "-" + if data.PayMethod > 0 { + payMethod = md.PayMethodIdToName[data.PayMethod] + } + orderInfo := []map[string]string{ + {"title": "订单编号", "content": utils.Int64ToStr(data.Oid)}, + {"title": "下单时间", "content": data.CreateAt.Format("2006-01-02 15:04:05")}, + {"title": "提货时间", "content": confirmAt}, + {"title": "预留电话", "content": data.Phone}, + {"title": "支付方式", "content": payMethod}, + {"title": "备注信息", "content": data.Memo}, + } + goodsInfo := make([]map[string]string, 0) + info := db.GetOrderInfoAllEg(MasterDb(c), utils.Int64ToStr(data.Oid)) + if info != nil { + for _, v := range *info { + tmp := map[string]string{ + "img": v.Img, + "title": v.Title, + "price": v.Price, + "num": utils.IntToStr(v.Num), + "sku_str": "", + } + skuData := make([]md.Sku, 0) + json.Unmarshal([]byte(v.SkuInfo), &skuData) + skuStr := "" + for _, v1 := range skuData { + if skuStr != "" { + skuStr += ";" + } + skuStr += v1.Value + } + tmp["sku_str"] = skuStr + goodsInfo = append(goodsInfo, tmp) + } + } + tmp := map[string]interface{}{ + "oid": utils.Int64ToStr(data.Oid), + "label": "自提", + "state": utils.IntToStr(data.State), + "state_str": state[data.State], + "store_name": storeName, + "store_address": storeAddress, + "lat": lat, + "lng": lng, + "km": km, + "img": img, + "title": title, + "amount": data.Amount, + "num": utils.IntToStr(data.Num), + "timer": "", + "code": data.Code, + "down_time": downTime, + "order_info": orderInfo, + "goods_info": goodsInfo, + "goods_count": utils.IntToStr(len(goodsInfo)), + } + if data.Type == 1 { + tmp["label"] = "外卖" + } + if data.IsNow == 1 { + tmp["timer"] = "立即提货" + } else if data.Timer != "" { + tmp["timer"] = data.Timer + } + e.OutSuc(c, tmp, nil) + return +} +func OrderCoupon(c *gin.Context) { + var arg md.OrderTotal + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + totalPrice := commGoods(c, arg) + returnData := CommCoupon(c, totalPrice) + e.OutSuc(c, returnData, nil) + return +} +func CommCoupon(c *gin.Context, totalPrice string) map[string]interface{} { + var err error + engine := MasterDb(c) + user := GetUser(c) + now := time.Now().Format("2006-01-02 15:04:05") + var ActCouponUserList []*model.CommunityTeamCouponUser + sess := engine.Table("act_coupon_user"). + Where("store_type=? and uid = ? AND is_use = ? AND (valid_time_start < ? AND valid_time_end > ?)", 0, + user.Info.Uid, 0, now, now) + err = sess.Find(&ActCouponUserList) + if err != nil { + return map[string]interface{}{} + } + var ids = make([]int, 0) + for _, v := range ActCouponUserList { + ids = append(ids, v.MerchantSchemeId) + } + var merchantScheme []model.CommunityTeamCoupon + engine.In("id", ids).Find(&merchantScheme) + var merchantSchemeMap = make(map[int]model.CommunityTeamCoupon) + for _, v := range merchantScheme { + merchantSchemeMap[v.Id] = v + } + + var couponList []md.CouponList // 可使用的 + couponList = make([]md.CouponList, 0) + count := 0 + for _, item := range ActCouponUserList { + var coupon = md.CouponList{ + Id: utils.Int64ToStr(item.Id), + Title: item.Name, + Timer: item.ValidTimeStart.Format("2006.01.02") + "-" + item.ValidTimeEnd.Format("2006.01.02"), + Label: "全部商品可用", + Img: item.Img, + Content: item.ActivityStatement, + IsCanUse: "0", + NotUseStr: "", + } + var cal struct { + Reach string `json:"reach"` + Reduce string `json:"reduce"` + } + err = json.Unmarshal([]byte(item.Cal), &cal) + if err != nil { + return map[string]interface{}{} + } + switch item.Kind { + case int(enum.ActCouponTypeImmediate): + if utils.AnyToFloat64(totalPrice) >= utils.AnyToFloat64(cal.Reduce) { + coupon.IsCanUse = "1" + } + case int(enum.ActCouponTypeReachReduce): + if utils.AnyToFloat64(totalPrice) >= utils.AnyToFloat64(cal.Reduce) { + coupon.IsCanUse = "1" + } + case int(enum.ActCouponTypeReachDiscount): + if utils.AnyToFloat64(totalPrice) >= utils.AnyToFloat64(cal.Reduce) && utils.AnyToFloat64(cal.Reduce) > 0 { + coupon.IsCanUse = "1" + } + if utils.AnyToFloat64(cal.Reduce) == 0 { + coupon.IsCanUse = "1" + } + } + if coupon.IsCanUse != "1" { + coupon.NotUseStr = "订单金额未满" + cal.Reduce + "元" + } + if coupon.IsCanUse == "1" { + count++ + } + couponList = append(couponList, coupon) + } + + returnData := map[string]interface{}{ + "total": utils.IntToStr(count), + "coupon_list": couponList, + } + + return returnData +} +func OrderCancel(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + // 加锁 防止并发提取 + mutexKey := fmt.Sprintf("%s:team.OrderCancel:%s", c.GetString("mid"), arg["oid"]) + withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX") + if err != nil { + e.OutErr(c, e.ERR, err) + return + } + if withdrawAvailable != "OK" { + e.OutErr(c, e.ERR, e.NewErr(400000, "请求过于频繁,请稍后再试")) + return + } + sess := MasterDb(c).NewSession() + defer sess.Close() + sess.Begin() + order := db.GetOrder(sess, arg["oid"]) + if order == nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单不存在")) + return + } + if order.State > 0 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单不能取消")) + return + } + orderInfo := db.GetOrderInfo(sess, arg["oid"]) + if orderInfo != nil { + goodsMap := make(map[int]int) + skuMap := make(map[int]int) + for _, v := range *orderInfo { + goodsMap[v.GoodsId] += v.Num + skuMap[v.SkuId] += v.Num + } + for k, v := range goodsMap { + sql := `update community_team_goods set stock=stock+%d where id=%d` + sql = fmt.Sprintf(sql, v, k) + _, err := db.QueryNativeStringWithSess(sess, sql) + if err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单取消失败")) + return + } + } + for k, v := range skuMap { + sql := `update community_team_sku set stock=stock+%d where sku_id=%d` + sql = fmt.Sprintf(sql, v, k) + _, err := db.QueryNativeStringWithSess(sess, sql) + if err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单取消失败")) + return + } + } + } + order.State = 3 + order.UpdateAt = time.Now() + update, err := sess.Where("id=?", order.Id).Cols("state,update_at").Update(order) + if update == 0 || err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单取消失败")) + return + } + if order.CouponId > 0 { + update, err = sess.Where("id=?", order.CouponId).Cols("is_use").Update(&model.CommunityTeamCouponUser{IsUse: 0}) + if update == 0 || err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单取消失败")) + return + } + } + sess.Commit() + e.OutSuc(c, "success", nil) + return +} +func OrderCreate(c *gin.Context) { + var arg md.OrderTotal + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + user := GetUser(c) + // 加锁 防止并发提取 + mutexKey := fmt.Sprintf("%s:team.OrderCreate:%s", c.GetString("mid"), utils.IntToStr(user.Info.Uid)) + withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX") + if err != nil { + e.OutErr(c, e.ERR, err) + return + } + if withdrawAvailable != "OK" { + e.OutErr(c, e.ERR, e.NewErr(400000, "请求过于频繁,请稍后再试")) + return + } + sess := MasterDb(c).NewSession() + defer sess.Close() + err = sess.Begin() + if err != nil { + e.OutErr(c, 400, err.Error()) + return + } + totalPrice := commGoods(c, arg) + coupon := "0" + totalPrice, coupon, err = CouponProcess(c, sess, totalPrice, arg) + if err != nil { + sess.Rollback() + e.OutErr(c, 400, err.Error()) + return + } + ordId := utils.OrderUUID(user.Info.Uid) + // 获取店铺信息 + store := db.GetStoreId(sess, arg.StoreId) + num := 0 + for _, item := range arg.GoodsInfo { + num += utils.StrToInt(item.Num) + } + var order = &model.CommunityTeamOrder{ + Uid: user.Info.Uid, + StoreUid: utils.StrToInt(arg.StoreId), + Commission: utils.Float64ToStr(utils.FloatFormat(utils.AnyToFloat64(totalPrice)*(utils.AnyToFloat64(store.Commission)/100), 2)), + CreateAt: time.Now(), + UpdateAt: time.Now(), + BuyPhone: arg.BuyPhone, + Coupon: coupon, + Num: num, + IsNow: utils.StrToInt(arg.IsNow), + Timer: arg.Timer, + Memo: arg.Memo, + Oid: utils.StrToInt64(ordId), + Amount: totalPrice, + MealNum: utils.StrToInt(arg.MealNum), + } + if utils.StrToFloat64(coupon) > 0 { + order.CouponId = utils.StrToInt(arg.CouponId) + } + insert, err := sess.Insert(order) + if insert == 0 || err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "下单失败")) + return + } + for _, item := range arg.GoodsInfo { + // 获取详细信息 + goodsInterface, has, err := db.GetComm(MasterDb(c), &model.CommunityTeamGoods{Id: utils.StrToInt(item.GoodsId)}) + if err != nil || !has { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "商品不存在")) + return + } + goodsModel := goodsInterface.(*model.CommunityTeamGoods) + var skuInterface interface{} + if item.SkuId != "-1" { + skuInterface, _, _ = db.GetComm(MasterDb(c), &model.CommunityTeamSku{GoodsId: utils.StrToInt(item.GoodsId), SkuId: utils.StrToInt64(item.SkuId)}) + } else { + skuInterface, _, _ = db.GetComm(MasterDb(c), &model.CommunityTeamSku{GoodsId: utils.StrToInt(item.GoodsId)}) + } + if err != nil || !has { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "商品不存在")) + return + } + skuModel := skuInterface.(*model.CommunityTeamSku) + var goodsSaleCount int + // 走普通逻辑 + stock := skuModel.Stock - utils.StrToInt(item.Num) + saleCount := skuModel.SaleCount + utils.StrToInt(item.Num) + goodsSaleCount = goodsModel.SaleCount + utils.StrToInt(item.Num) + if stock < 0 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "库存不足")) + return + } + update, err := sess.Where("sku_id=?", skuModel.SkuId).Cols("stock", "sale_count").Update(&model.CommunityTeamSku{Stock: stock, SaleCount: saleCount}) + if err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "商品不存在")) + return + } + if update != 1 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "商品不存在")) + return + } + // 更新销量 + goodsModel.SaleCount = goodsSaleCount + goodsModel.Stock = goodsModel.Stock - utils.StrToInt(item.Num) + _, err = sess.Where("id = ?", goodsModel.Id).Cols("sale_count,stock").Update(goodsModel) + if err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "商品不存在")) + return + } + + // 插入订单 + insert, err := sess.Insert(&model.CommunityTeamOrderInfo{ + Oid: utils.StrToInt64(ordId), + Title: goodsModel.Title, + Img: goodsModel.Img, + Price: skuModel.Price, + Num: utils.StrToInt(item.Num), + SkuInfo: skuModel.Sku, + GoodsId: skuModel.GoodsId, + SkuId: int(skuModel.SkuId), + }) + + if err != nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "下单失败")) + return + } + if insert != 1 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "下单失败")) + return + } + } + // 更新优惠券使用状态 + if utils.StrToInt(arg.CouponId) > 0 { + affect, err := sess.Where("id = ?", arg.CouponId). + Update(&model.CommunityTeamCouponUser{IsUse: 1}) + if err != nil { + e.OutErr(c, 400, e.NewErr(400, "下单失败")) + return + } + if affect != 1 { + e.OutErr(c, 400, e.NewErr(400, "下单失败")) + return + } + } + + err = sess.Commit() + if err != nil { + sess.Rollback() + e.OutErr(c, 400, err.Error()) + return + } + sess.Commit() + return +} +func OrderTotal(c *gin.Context) { + var arg md.OrderTotal + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + sess := MasterDb(c).NewSession() + defer sess.Close() + err := sess.Begin() + if err != nil { + e.OutErr(c, 400, err.Error()) + return + } + totalPrice := commGoods(c, arg) + oldTotalPrice := totalPrice + coupon := "0" + totalPrice, coupon, err = CouponProcess(c, sess, totalPrice, arg) + if err != nil { + sess.Rollback() + e.OutErr(c, 400, err.Error()) + return + } + user := GetUser(c) + result := map[string]interface{}{ + "balance_money": GetCommissionPrec(c, user.Profile.FinValid, SysCfgGet(c, "commission_prec"), SysCfgGet(c, "is_show_point")), + "small_amount": GetCommissionPrec(c, oldTotalPrice, SysCfgGet(c, "commission_prec"), SysCfgGet(c, "is_show_point")), + "all_amount": GetCommissionPrec(c, totalPrice, SysCfgGet(c, "commission_prec"), SysCfgGet(c, "is_show_point")), + "coupon": GetCommissionPrec(c, coupon, SysCfgGet(c, "commission_prec"), SysCfgGet(c, "is_show_point")), + } + sess.Commit() + e.OutSuc(c, result, nil) + return +} +func CouponProcess(c *gin.Context, sess *xorm.Session, total string, args md.OrderTotal) (string, string, error) { + if utils.StrToInt(args.CouponId) == 0 { + return total, "0", nil + } + now := time.Now().Format("2006-01-02 15:04:05") + user := GetUser(c) + var goodsIds []int + var skuIds []string + for _, item := range args.GoodsInfo { + goodsIds = append(goodsIds, utils.StrToInt(item.GoodsId)) + skuIds = append(skuIds, utils.AnyToString(item.SkuId)) + } + // 获取优惠券信息 + var mallUserCoupon model.CommunityTeamCouponUser + isExist, err := sess. + Where("id = ? AND uid = ? AND is_use = ? AND (valid_time_start < ? AND valid_time_end > ?)", args.CouponId, user.Info.Uid, 0, now, now). + Get(&mallUserCoupon) + if err != nil { + return "", "", err + } + if !isExist { + return "", "", errors.New("无相关优惠券信息") + } + + var cal struct { + Reach string `json:"reach"` + Reduce string `json:"reduce"` + } + _ = json.Unmarshal([]byte(mallUserCoupon.Cal), &cal) + reach, err := decimal.NewFromString(cal.Reach) + reduce, err := decimal.NewFromString(cal.Reduce) + if err != nil { + return "", "", err + } + + var specialTotal = total + // 是否满足优惠条件 + if !reach.IsZero() { // 满减及有门槛折扣 + if utils.StrToFloat64(specialTotal) < utils.StrToFloat64(reach.String()) { + return "", "", errors.New("不满足优惠条件") + } + } else { + if mallUserCoupon.Kind == 1 { //立减 + if utils.StrToFloat64(specialTotal) < utils.StrToFloat64(reduce.String()) { + return "", "", errors.New("付款金额有误") + } + } + } + // 计算优惠后支付金额 + couponTotal := "0" + if mallUserCoupon.Kind == int(enum.ActCouponTypeImmediate) || + mallUserCoupon.Kind == int(enum.ActCouponTypeReachReduce) { // 立减 || 满减 + couponTotal = reduce.String() + total = utils.Float64ToStr(utils.StrToFloat64(total) - utils.StrToFloat64(reduce.String())) + } else { // 折扣 + couponTotal = utils.Float64ToStr(utils.StrToFloat64(total) - utils.StrToFloat64(total)*utils.StrToFloat64(reduce.String())/10) + total = utils.Float64ToStr(utils.StrToFloat64(total) * utils.StrToFloat64(reduce.String()) / 10) + } + return total, couponTotal, nil +} + +func commGoods(c *gin.Context, arg md.OrderTotal) (totalPrice string) { + engine := MasterDb(c) + var totalPriceAmt float64 = 0 + for _, item := range arg.GoodsInfo { + goodsInterface, _, _ := db.GetComm(engine, &model.CommunityTeamGoods{Id: utils.StrToInt(item.GoodsId)}) + goodsModel := goodsInterface.(*model.CommunityTeamGoods) + var skuInterface interface{} + if item.SkuId != "-1" { + skuInterface, _, _ = db.GetComm(engine, &model.CommunityTeamSku{GoodsId: utils.StrToInt(item.GoodsId), SkuId: utils.StrToInt64(item.SkuId)}) + } else { + skuInterface, _, _ = db.GetComm(engine, &model.CommunityTeamSku{GoodsId: utils.StrToInt(item.GoodsId)}) + } + skuModel := skuInterface.(*model.CommunityTeamSku) + priceOne := goodsModel.Price + if item.SkuId != "-1" { + priceOne = skuModel.Price + } + totalPriceAmt += utils.StrToFloat64(priceOne) * utils.StrToFloat64(item.Num) + } + return utils.Float64ToStr(totalPriceAmt) + +} diff --git a/app/svc/svc_pay.go b/app/svc/svc_pay.go new file mode 100644 index 0000000..a888629 --- /dev/null +++ b/app/svc/svc_pay.go @@ -0,0 +1,21 @@ +package svc + +import ( + "applet/app/md" + "github.com/gin-gonic/gin" +) + +var PayFuncList = map[string]map[string]func(*gin.Context) (interface{}, error){ + md.CommunityTeam: { + md.BALANCE_PAY: BalanceCommunityTeam, + md.ALIPAY: AlipayCommunityTeam, + md.WX_PAY: WxPayCommunityTeam, + }, +} +var PayCallbackFuncList = map[string]map[string]func(*gin.Context){ + md.CommunityTeam: { + md.BALANCE_PAY: nil, + md.ALIPAY: AlipayCallbackCommunityTeam, + md.WX_PAY: WxPayCallbackCommunityTeam, + }, +} diff --git a/app/svc/svc_pay_community_team.go b/app/svc/svc_pay_community_team.go new file mode 100644 index 0000000..e88b408 --- /dev/null +++ b/app/svc/svc_pay_community_team.go @@ -0,0 +1,142 @@ +package svc + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/e" + "applet/app/md" + "applet/app/utils" + "fmt" + "github.com/gin-gonic/gin" + "github.com/shopspring/decimal" + "math" + "math/rand" + "time" +) + +func BalanceCommunityTeam(c *gin.Context) (interface{}, error) { + + ord, err := CheckCommunityTeam(c) + if err != nil || ord == nil { + return nil, err + } + err = BalancePay(c, ord.Amount, utils.Int64ToStr(ord.Oid), md.CommunityTeam) + if err != nil { + return nil, err + } + // 回调 + CommonCallbackCommunityTeam(c, utils.AnyToString(ord.Oid), md.BALANCE_PAY) + return nil, nil +} +func AlipayCommunityTeam(c *gin.Context) (interface{}, error) { + ord, err := CheckCommunityTeam(c) + if err != nil { + return nil, err + } + payParams := &md.AliPayPayParams{ + Subject: "小店下单", + Amount: ord.Amount, + OrdId: utils.AnyToString(ord.Oid), + OrderType: md.CommunityTeam, + Uid: utils.IntToStr(ord.Uid), + } + r, err := PrepareAlipayCode(c, payParams) + if err != nil { + return nil, err + } + return r, nil +} +func WxPayCommunityTeam(c *gin.Context) (interface{}, error) { + var r interface{} + var err error + ord, err := CheckCommunityTeam(c) + if err != nil { + return nil, err + } + params := map[string]string{ + "subject": md.NeedPayPart[md.AggregationRecharge], + "amount": wxMoneyMulHundred(ord.Amount), + "order_type": md.AggregationRecharge, + "ord_id": utils.AnyToString(ord.Oid), + "pay_wx_mch_id": SysCfgGet(c, "pay_wx_mch_id"), + "pay_wx_api_key": SysCfgGet(c, "pay_wx_api_key"), + "uid": utils.IntToStr(ord.Uid), + } + params["notify_url"] = fmt.Sprintf(md.CALLBACK_URL, c.Request.Host, c.GetString("mid"), params["order_type"], md.WX_PAY) + r, err = CommPayData(c, params) + if err != nil { + return nil, err + } + + return r, nil +} +func AlipayCallbackCommunityTeam(c *gin.Context) { + orderId, err := AlipayCallback(c) + if err != nil || orderId == "" { + return + } + CommonCallbackCommunityTeam(c, orderId, md.ALIPAY) +} +func WxPayCallbackCommunityTeam(c *gin.Context) { + orderId, err := wxPayCallback(c) + if err != nil || orderId == "" { + return + } + CommonCallbackCommunityTeam(c, orderId, md.WX_PAY) +} + +// 微信金额乘100 +func wxMoneyMulHundred(m string) string { + amount, _ := decimal.NewFromString(m) + newM := amount.Mul(decimal.NewFromInt(100)) + return newM.String() +} +func CommonCallbackCommunityTeam(c *gin.Context, orderId string, payMethod string) { + ord := db.GetOrderEg(db.DBs[c.GetString("mid")], orderId) + if ord == nil { + return + } + // 判断是否失效 + if ord.State != 0 { + return + } + ord.State = 1 + ord.UpdateAt = time.Now() + ord.Code = Code() + ord.PayAt = time.Now() + ord.PayMethod = md.PayMethodIDs[payMethod] + MasterDb(c).Where("id=?", ord.Id).Cols("state,update_at,code,pay_at,pay_method").Update(ord) + return +} +func Code() string { + rand.Seed(time.Now().UnixNano()) + var digits = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") + b := make([]rune, 6) + for i := range b { + if fl := float64(rand.Intn(10)); fl > math.Log10(float64(i+1)) { + b[i] = digits[rand.Intn(len(digits))] + } else { + b[i] = digits[rand.Intn(10)] + } + } + fmt.Println(string(b)) + return string(b) +} +func CheckCommunityTeam(c *gin.Context) (*model.CommunityTeamOrder, error) { + var args struct { + MainOrdId string `json:"main_ord_id"` + } + if err := c.ShouldBindJSON(&args); err != nil || args.MainOrdId == "" { + return nil, e.NewErrCode(e.ERR_INVALID_ARGS) + } + // 查询订单 + ord := db.GetOrderEg(db.DBs[c.GetString("mid")], args.MainOrdId) + if ord == nil { + return nil, e.NewErr(403000, "不存在该订单") + } + // 判断是否失效 + if ord.State != 0 { + return nil, e.NewErr(403000, "订单已处理") + } + return ord, nil +} diff --git a/app/svc/svc_redis_mutex_lock.go b/app/svc/svc_redis_mutex_lock.go new file mode 100644 index 0000000..f35e0f9 --- /dev/null +++ b/app/svc/svc_redis_mutex_lock.go @@ -0,0 +1,100 @@ +package svc + +import ( + "applet/app/md" + "applet/app/utils" + "applet/app/utils/cache" + "errors" + "fmt" + "math/rand" + "reflect" + "time" +) + +const redisMutexLockExpTime = 15 + +// TryGetDistributedLock 分布式锁获取 +// requestId 用于标识请求客户端,可以是随机字符串,需确保唯一 +func TryGetDistributedLock(lockKey, requestId string, isNegative bool) bool { + if isNegative { // 多次尝试获取 + retry := 1 + for { + ok, err := cache.Do("SET", lockKey, requestId, "EX", redisMutexLockExpTime, "NX") + // 获取锁成功 + if err == nil && ok == "OK" { + return true + } + // 尝试多次没获取成功 + if retry > 10 { + return false + } + time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000))) + retry += 1 + } + } else { // 只尝试一次 + ok, err := cache.Do("SET", lockKey, requestId, "EX", redisMutexLockExpTime, "NX") + // 获取锁成功 + if err == nil && ok == "OK" { + return true + } + + return false + } +} + +// ReleaseDistributedLock 释放锁,通过比较requestId,用于确保客户端只释放自己的锁,使用lua脚本保证操作的原子型 +func ReleaseDistributedLock(lockKey, requestId string) (bool, error) { + luaScript := ` + if redis.call("get",KEYS[1]) == ARGV[1] + then + return redis.call("del",KEYS[1]) + else + return 0 + end` + + do, err := cache.Do("eval", luaScript, 1, lockKey, requestId) + fmt.Println(reflect.TypeOf(do)) + fmt.Println(do) + + if utils.AnyToInt64(do) == 1 { + return true, err + } else { + return false, err + } +} + +func GetDistributedLockRequestId(prefix string) string { + return prefix + utils.IntToStr(rand.Intn(100000000)) +} + +// HandleBalanceDistributedLock 处理余额更新时获取锁和释放锁 如果加锁成功,使用语句 ` defer cb() ` 释放锁 +func HandleBalanceDistributedLock(masterId, uid, requestIdPrefix string) (cb func(), err error) { + // 获取余额更新锁 + balanceLockKey := fmt.Sprintf(md.UserFinValidUpdateLock, masterId, uid) + requestId := GetDistributedLockRequestId(requestIdPrefix) + balanceLockOk := TryGetDistributedLock(balanceLockKey, requestId, true) + if !balanceLockOk { + return nil, errors.New("系统繁忙,请稍后再试") + } + + cb = func() { + _, _ = ReleaseDistributedLock(balanceLockKey, requestId) + } + + return cb, nil +} + +func HandleLimiterDistributedLock(masterId, ip, requestIdPrefix string) (cb func(), err error) { + balanceLockKey := fmt.Sprintf(md.AppLimiterLock, masterId, ip) + requestId := GetDistributedLockRequestId(requestIdPrefix) + balanceLockOk := TryGetDistributedLock(balanceLockKey, requestId, true) + if !balanceLockOk { + return nil, errors.New("系统繁忙,请稍后再试") + } + + cb = func() { + _, _ = ReleaseDistributedLock(balanceLockKey, requestId) + } + + return cb, nil +} diff --git a/app/svc/svc_store.go b/app/svc/svc_store.go new file mode 100644 index 0000000..0ec26ab --- /dev/null +++ b/app/svc/svc_store.go @@ -0,0 +1,135 @@ +package svc + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/e" + "applet/app/utils" + "github.com/gin-gonic/gin" + "time" +) + +func BankStore(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + arg["store_type"] = "0" + user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) + var store = make([]map[string]string, 0) + if arg["cid"] == "2" { + store = db.GetStoreLike(MasterDb(c), arg) + } else { + store = db.GetStore(MasterDb(c), arg) + } + storeList := make([]map[string]interface{}, 0) + for _, v := range store { + if utils.StrToFloat64(v["km"]) < 1 { + v["km"] = utils.IntToStr(int(utils.StrToFloat64(v["km"])*1000)) + "m" + } else { + v["km"] += "km" + } + if utils.StrToFloat64(v["km"]) <= 0 { + v["km"] = "-" + } + tmp := map[string]interface{}{ + "lat": v["lat"], + "lng": v["lng"], + "address": v["address"], + "name": v["name"], + "id": v["id"], + "km": v["km"], + "time_str": v["timer"], + "phone": v["phone"], + "logo": v["logo"], + "is_like": "0", + "fan": "", + } + if user != nil { + count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{}) + if count > 0 { + tmp["is_like"] = "1" + } + } + storeList = append(storeList, tmp) + } + e.OutSuc(c, storeList, nil) + return +} +func Store(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + arg["store_type"] = "0" + + user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) + store := db.GetStore(MasterDb(c), arg) + storeList := make([]map[string]interface{}, 0) + for _, v := range store { + if utils.StrToFloat64(v["km"]) < 1 { + v["km"] = utils.IntToStr(int(utils.StrToFloat64(v["km"])*1000)) + "m" + } else { + v["km"] += "km" + } + label := make([]string, 0) + tmp := map[string]interface{}{ + "lat": v["lat"], + "lng": v["lng"], + "address": v["address"], + "work_state": v["work_state"], + "name": v["name"], + "id": v["id"], + "km": v["km"], + "time_str": v["timer"], + "phone": v["phone"], + "label": label, + "is_like": "0", + } + if user != nil { + count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{}) + if count > 0 { + tmp["is_like"] = "1" + } + } + + storeList = append(storeList, tmp) + } + e.OutSuc(c, storeList, nil) + return +} +func StoreAddLike(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + user := GetUser(c) + count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, arg["id"]).Count(&model.CommunityTeamStoreLike{}) + if count > 0 { + e.OutErr(c, 400, e.NewErr(400, "已收藏")) + return + } + var data = model.CommunityTeamStoreLike{ + Uid: user.Info.Uid, + StoreId: utils.StrToInt(arg["id"]), + Time: time.Now(), + } + MasterDb(c).Insert(&data) + e.OutSuc(c, "success", nil) + return +} + +func StoreCancelLike(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + user := GetUser(c) + MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, arg["id"]).Delete(&model.CommunityTeamStoreLike{}) + e.OutSuc(c, "success", nil) + return +} diff --git a/app/svc/svc_store_order.go b/app/svc/svc_store_order.go new file mode 100644 index 0000000..79cc221 --- /dev/null +++ b/app/svc/svc_store_order.go @@ -0,0 +1,277 @@ +package svc + +import ( + "applet/app/db" + "applet/app/e" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/cache" + "encoding/json" + "fmt" + "github.com/gin-gonic/gin" + "time" +) + +func StoreOrderCate(c *gin.Context) { + var cate = []map[string]string{ + {"name": "全部", "value": ""}, + {"name": "待付款", "value": "0"}, + {"name": "待提货", "value": "1"}, + {"name": "已完成", "value": "2"}, + {"name": "已取消", "value": "3"}, + } + e.OutSuc(c, cate, nil) + return +} +func StoreOrderList(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + user := GetUser(c) + arg["store_uid"] = utils.IntToStr(user.Info.Uid) + data := db.GetOrderList(MasterDb(c), arg) + var state = []string{"待付款", "待提货", "已完成", "已取消"} + list := make([]map[string]interface{}, 0) + if data != nil { + now := time.Now().Unix() + for _, v := range *data { + store := db.GetStoreIdEg(MasterDb(c), utils.IntToStr(v.StoreUid)) + info := db.GetOrderInfoAllEg(MasterDb(c), utils.Int64ToStr(v.Oid)) + downTime := "0" + if v.State == 0 { + downTime = utils.IntToStr(int(v.CreateAt.Unix() + 15*60 - now)) + if now > v.CreateAt.Unix()+15*60 { + v.State = 3 + } + if utils.StrToInt(downTime) < 0 { + downTime = "0" + } + } + storeName := "" + if store != nil { + storeName = store.Name + } + goodsInfo := make([]map[string]string, 0) + if info != nil { + for _, v1 := range *info { + skuData := make([]md.Sku, 0) + json.Unmarshal([]byte(v1.SkuInfo), &skuData) + skuStr := "" + for _, v2 := range skuData { + if skuStr != "" { + skuStr += ";" + } + skuStr += v2.Value + } + if skuStr != "" { + skuStr = "(" + skuStr + ")" + } + tmp := map[string]string{ + "title": v1.Title + skuStr, + "num": utils.IntToStr(v1.Num), + "img": v1.Img, + } + goodsInfo = append(goodsInfo, tmp) + } + } + user1, _ := db.UserFindByID(MasterDb(c), v.Uid) + userProfile, _ := db.UserProfileFindByID(MasterDb(c), v.Uid) + nickname := "" + headImg := "" + if userProfile != nil { + headImg = userProfile.AvatarUrl + } + if user1 != nil { + if user1.Nickname != user1.Phone { + user1.Nickname += " " + user1.Phone + } + nickname = user1.Nickname + } + tmp := map[string]interface{}{ + "goods_info": goodsInfo, + "oid": utils.Int64ToStr(v.Oid), + "label": "自提", + "state": utils.IntToStr(v.State), + "state_str": state[v.State], + "store_name": storeName, + "coupon": v.Coupon, + "username": nickname, + "head_img": headImg, + "amount": v.Amount, + "num": utils.IntToStr(v.Num), + "timer": "", + "down_time": downTime, + "create_at": v.CreateAt.Format("2006-01-02 15:04:05"), + "pay_at": "", + "confirm_at": "", + } + if v.PayAt.IsZero() == false { + tmp["pay_at"] = v.PayAt.Format("2006-01-02 15:04:05") + } + if v.ConfirmAt.IsZero() == false { + tmp["confirm_at"] = v.ConfirmAt.Format("2006-01-02 15:04:05") + } + if v.Type == 1 { + tmp["label"] = "外卖" + } + if v.IsNow == 1 { + tmp["timer"] = "立即提货" + } else if v.Timer != "" { + tmp["timer"] = v.Timer + } + list = append(list, tmp) + } + } + e.OutSuc(c, list, nil) + return +} +func StoreOrderDetail(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + data := db.GetOrderEg(MasterDb(c), arg["oid"]) + var state = []string{"待付款", "待提货", "已完成", "已取消"} + now := time.Now().Unix() + downTime := "0" + if data.State == 0 { + downTime = utils.IntToStr(int(data.CreateAt.Unix() + 15*60 - now)) + if now > data.CreateAt.Unix()+15*60 { + data.State = 3 + } + if utils.StrToInt(downTime) < 0 { + downTime = "0" + } + } + img := "" + title := "" + confirmAt := "" + if data.ConfirmAt.IsZero() == false { + confirmAt = data.ConfirmAt.Format("2006-01-02 15:04:05") + } + payAt := "" + if data.PayAt.IsZero() == false { + payAt = data.PayAt.Format("2006-01-02 15:04:05") + } + timer := "" + if data.IsNow == 1 { + timer = "立即提货" + } else if data.Timer != "" { + timer = data.Timer + } + orderInfo := []map[string]string{ + {"title": "订单编号", "content": utils.Int64ToStr(data.Oid)}, + {"title": "提货码", "content": data.Code}, + {"title": "下单时间", "content": data.CreateAt.Format("2006-01-02 15:04:05")}, + {"title": "付款时间", "content": payAt}, + {"title": "预计提货时间", "content": timer}, + {"title": "提货时间", "content": confirmAt}, + {"title": "预留电话", "content": data.Phone}, + {"title": "备注信息", "content": data.Memo}, + } + goodsInfo := make([]map[string]string, 0) + info := db.GetOrderInfoAllEg(MasterDb(c), utils.Int64ToStr(data.Oid)) + if info != nil { + for _, v := range *info { + tmp := map[string]string{ + "img": v.Img, + "title": v.Title, + "price": v.Price, + "num": utils.IntToStr(v.Num), + "sku_str": "", + } + skuData := make([]md.Sku, 0) + json.Unmarshal([]byte(v.SkuInfo), &skuData) + skuStr := "" + for _, v1 := range skuData { + if skuStr != "" { + skuStr += ";" + } + skuStr += v1.Value + } + tmp["sku_str"] = skuStr + goodsInfo = append(goodsInfo, tmp) + } + } + user1, _ := db.UserFindByID(MasterDb(c), data.Uid) + userProfile, _ := db.UserProfileFindByID(MasterDb(c), data.Uid) + nickname := "" + headImg := "" + if userProfile != nil { + headImg = userProfile.AvatarUrl + } + if user1 != nil { + if user1.Nickname != user1.Phone { + user1.Nickname += " " + user1.Phone + } + nickname = user1.Nickname + } + tmp := map[string]interface{}{ + "oid": utils.Int64ToStr(data.Oid), + "label": "自提", + "username": nickname, + "head_img": headImg, + "state": utils.IntToStr(data.State), + "state_str": state[data.State], + "img": img, + "title": title, + "amount": data.Amount, + "all_amount": utils.Float64ToStr(utils.StrToFloat64(data.Amount) + utils.StrToFloat64(data.Coupon)), + "coupon": data.Coupon, + "num": utils.IntToStr(data.Num), + "code": data.Code, + "down_time": downTime, + "order_info": orderInfo, + "goods_info": goodsInfo, + "goods_count": utils.IntToStr(len(goodsInfo)), + } + if data.Type == 1 { + tmp["label"] = "外卖" + } + e.OutSuc(c, tmp, nil) + return +} +func StoreOrderConfirm(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + // 加锁 防止并发提取 + mutexKey := fmt.Sprintf("%s:team.StoreOrderConfirm:%s", c.GetString("mid"), arg["oid"]) + withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX") + if err != nil { + e.OutErr(c, e.ERR, err) + return + } + if withdrawAvailable != "OK" { + e.OutErr(c, e.ERR, e.NewErr(400000, "请求过于频繁,请稍后再试")) + return + } + sess := MasterDb(c).NewSession() + defer sess.Close() + sess.Begin() + order := db.GetOrder(sess, arg["oid"]) + if order == nil { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单不存在")) + return + } + if order.State != 1 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "订单不能确认")) + return + } + order.State = 2 + order.UpdateAt = time.Now() + update, err := sess.Where("id=?", order.Id).Cols("state,update_at").Update(order) + if update == 0 || err != nil { + e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) + return + } + e.OutSuc(c, "success", nil) + return +} diff --git a/app/svc/svc_sys_cfg_get.go b/app/svc/svc_sys_cfg_get.go new file mode 100644 index 0000000..976a7a3 --- /dev/null +++ b/app/svc/svc_sys_cfg_get.go @@ -0,0 +1,218 @@ +package svc + +import ( + "applet/app/md" + "errors" + "github.com/gin-gonic/gin" + "strings" + "xorm.io/xorm" + + "applet/app/cfg" + "applet/app/db" + + "applet/app/utils" + "applet/app/utils/cache" +) + +// 单挑记录获取 +func SysCfgGet(c *gin.Context, key string) string { + mid := c.GetString("mid") + eg := db.DBs[mid] + return db.SysCfgGetWithDb(eg, mid, key) +} + +// 多条记录获取 +func SysCfgFind(c *gin.Context, keys ...string) map[string]string { + var masterId string + if c == nil { + masterId = "" + } else { + masterId = c.GetString("mid") + } + tmp := SysCfgFindComm(masterId, keys...) + return tmp +} + +// SysCfgGetByMasterId get one config by master id +func SysCfgGetByMasterId(masterId, key string) string { + res := SysCfgFindComm(masterId, key) + if _, ok := res[key]; !ok { + return "" + } + return res[key] +} + +// SysCfgFindComm get cfg by master id +func SysCfgFindComm(masterId string, keys ...string) map[string]string { + var eg *xorm.Engine + if masterId == "" { + eg = db.Db + } else { + eg = db.DBs[masterId] + } + res := map[string]string{} + //TODO::判断keys长度(大于10个直接查数据库) + if len(keys) > 10 { + cfgList, _ := db.SysCfgGetAll(eg) + if cfgList == nil { + return nil + } + for _, v := range *cfgList { + res[v.Key] = v.Val + } + } else { + for _, key := range keys { + res[key] = db.SysCfgGetWithDb(eg, masterId, key) + } + } + return res +} + +// 多条记录获取 +func EgSysCfgFind(keys ...string) map[string]string { + var e *xorm.Engine + res := map[string]string{} + if len(res) == 0 { + cfgList, _ := db.SysCfgGetAll(e) + if cfgList == nil { + return nil + } + for _, v := range *cfgList { + res[v.Key] = v.Val + } + // 先不设置缓存 + // cache.SetJson(md.KEY_SYS_CFG_CACHE, res, 60) + } + if len(keys) == 0 { + return res + } + tmp := map[string]string{} + for _, v := range keys { + if val, ok := res[v]; ok { + tmp[v] = val + } else { + tmp[v] = "" + } + } + return tmp +} + +// 清理系统配置信息 +func SysCfgCleanCache() { + cache.Del(md.KEY_SYS_CFG_CACHE) +} + +// 写入系统设置 +func SysCfgSet(c *gin.Context, key, val, memo string) bool { + cfg, err := db.SysCfgGetOne(db.DBs[c.GetString("mid")], key) + if err != nil || cfg == nil { + return db.SysCfgInsert(db.DBs[c.GetString("mid")], key, val, memo) + } + if memo != "" && cfg.Memo != memo { + cfg.Memo = memo + } + SysCfgCleanCache() + return db.SysCfgUpdate(db.DBs[c.GetString("mid")], key, val, cfg.Memo) +} + +// 多条记录获取 +func SysCfgFindByIds(eg *xorm.Engine, keys ...string) map[string]string { + key := utils.Md5(eg.DataSourceName() + md.KEY_SYS_CFG_CACHE) + res := map[string]string{} + c, ok := cfg.MemCache.Get(key).(map[string]string) + if !ok || len(c) == 0 { + cfgList, _ := db.DbsSysCfgGetAll(eg) + if cfgList == nil { + return nil + } + for _, v := range *cfgList { + res[v.Key] = v.Val + } + cfg.MemCache.Put(key, res, 10) + } else { + res = c + } + if len(keys) == 0 { + return res + } + tmp := map[string]string{} + for _, v := range keys { + if val, ok := res[v]; ok { + tmp[v] = val + } else { + tmp[v] = "" + } + } + return tmp +} + +// 多条记录获取 +func SysCfgFindByIdsToCache(eg *xorm.Engine, dbName string, keys ...string) map[string]string { + key := utils.Md5(dbName + md.KEY_SYS_CFG_CACHE) + res := map[string]string{} + c, ok := cfg.MemCache.Get(key).(map[string]string) + if !ok || len(c) == 0 { + cfgList, _ := db.DbsSysCfgGetAll(eg) + if cfgList == nil { + return nil + } + for _, v := range *cfgList { + res[v.Key] = v.Val + } + cfg.MemCache.Put(key, res, 1800) + } else { + res = c + } + if len(keys) == 0 { + return res + } + tmp := map[string]string{} + for _, v := range keys { + if val, ok := res[v]; ok { + tmp[v] = val + } else { + tmp[v] = "" + } + } + return tmp +} + +// 支付配置 +func SysCfgFindPayment(c *gin.Context) ([]map[string]string, error) { + platform := c.GetHeader("platform") + payCfg := SysCfgFind(c, "pay_wx_pay_img", "pay_ali_pay_img", "pay_balance_img", "pay_type") + if payCfg["pay_wx_pay_img"] == "" || payCfg["pay_ali_pay_img"] == "" || payCfg["pay_balance_img"] == "" || payCfg["pay_type"] == "" { + return nil, errors.New("lack of payment config") + } + payCfg["pay_wx_pay_img"] = ImageFormat(c, payCfg["pay_wx_pay_img"]) + payCfg["pay_ali_pay_img"] = ImageFormat(c, payCfg["pay_ali_pay_img"]) + payCfg["pay_balance_img"] = ImageFormat(c, payCfg["pay_balance_img"]) + + var result []map[string]string + + if strings.Contains(payCfg["pay_type"], "aliPay") && platform != md.PLATFORM_WX_APPLET { + item := make(map[string]string) + item["pay_channel"] = "alipay" + item["img"] = payCfg["pay_ali_pay_img"] + item["name"] = "支付宝支付" + result = append(result, item) + } + + if strings.Contains(payCfg["pay_type"], "wxPay") { + item := make(map[string]string) + item["pay_channel"] = "wx" + item["img"] = payCfg["pay_wx_pay_img"] + item["name"] = "微信支付" + result = append(result, item) + } + + if strings.Contains(payCfg["pay_type"], "walletPay") { + item := make(map[string]string) + item["pay_channel"] = "fin" + item["img"] = payCfg["pay_balance_img"] + item["name"] = "余额支付" + result = append(result, item) + } + + return result, nil +} diff --git a/app/svc/svc_wx.go b/app/svc/svc_wx.go new file mode 100644 index 0000000..c551fbf --- /dev/null +++ b/app/svc/svc_wx.go @@ -0,0 +1,103 @@ +package svc + +import ( + "applet/app/db" + "applet/app/e" + "applet/app/md" + "applet/app/utils/logx" + "code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" + "github.com/gin-gonic/gin" + "strings" +) + +// 微信支付回调处理 +func wxPayCallback(c *gin.Context) (string, error) { + data, ok := c.Get("callback") + if data == nil || !ok { + return "", e.NewErrCode(e.ERR_INVALID_ARGS) + } + args := data.(*md.WxPayCallback) + _, ok = db.DBs[args.MasterID] + if !ok { + return "", logx.Warn("wxpay Failed : master_id not found") + } + c.Set("mid", args.MasterID) + //回调交易状态失败 + if args.ResultCode != "SUCCESS" || args.ReturnCode != "SUCCESS" { + return "", logx.Warn("wxpay Failed : trade status failed") + } + return args.OutTradeNo, nil +} +func CommPayData(c *gin.Context, params map[string]string) (interface{}, error) { + platform := c.GetHeader("Platform") + browser := c.GetHeader("browser") + var r interface{} + var err error + switch platform { + case md.PLATFORM_WX_APPLET: + params = WxMiniProgPayConfig(c, params) + r, err = pay.WxMiniProgPay(params) + case md.PLATFORM_WAP: + if strings.Contains(browser, "wx_pay_browser") { + params = WxJsApiConfig(c, params) + r, err = pay.WxAppJSAPIPay(params) + } else { + params = WxH5PayConfig(c, params) + r, err = pay.WxH5Pay(params) + } + case md.PLATFORM_ANDROID, md.PLATFORM_IOS, md.PLATFORM_JSAPI: + params = WxAPPConfig(c, params) + r, err = pay.WxAppPay(params) + default: + return nil, e.NewErrCode(e.ERR_PLATFORM) + } + if err != nil { + return nil, err + } + + return r, nil +} +func WxH5PayConfig(c *gin.Context, params map[string]string) map[string]string { + params["pay_wx_appid"] = SysCfgGet(c, "wx_official_account_app_id") + return params +} +func WxAPPConfig(c *gin.Context, params map[string]string) map[string]string { + params["pay_wx_appid"] = SysCfgGet(c, "pay_wx_appid") + return params +} + +// 小程序v2 +func WxMiniProgPayConfig(c *gin.Context, params map[string]string) map[string]string { + //读取小程序设置的 + wxAppletCfg := db.GetAppletKey(c, MasterDb(c)) + params["pay_wx_appid"] = wxAppletCfg["app_id"] + // 兼容未登录支付 api/v1/unlogin/pay/:payMethod/:orderType(因为该路由未经过jwt-auth中间件) + user, err := CheckUser(c) + if user == nil || err != nil { + return params + } + if c.GetHeader("openid") != "" { //前端会传过来 + user.Profile.ThirdPartyWechatMiniOpenid = c.GetHeader("openid") + } + if user.Profile.ThirdPartyWechatMiniOpenid == "" { + return params + } + params["third_party_wechat_openid"] = user.Profile.ThirdPartyWechatMiniOpenid + return params +} +func WxJsApiConfig(c *gin.Context, params map[string]string) map[string]string { + params["pay_wx_appid"] = SysCfgGet(c, "wx_official_account_app_id") + // 兼容未登录支付 api/v1/unlogin/pay/:payMethod/:orderType(因为该路由未经过jwt-auth中间件) + user, err := CheckUser(c) + if user == nil || err != nil { + return params + } + if c.GetHeader("openid") != "" { //前端会传过来 + user.Profile.ThirdPartyWechatH5Openid = c.GetHeader("openid") + } + if user.Profile.ThirdPartyWechatH5Openid == "" { + return params + } + params["third_party_wechat_openid"] = user.Profile.ThirdPartyWechatH5Openid + return params +} diff --git a/app/task/init.go b/app/task/init.go new file mode 100644 index 0000000..c35f775 --- /dev/null +++ b/app/task/init.go @@ -0,0 +1,300 @@ +package task + +import ( + "github.com/robfig/cron/v3" + "time" + + "applet/app/cfg" + "applet/app/db" + "applet/app/db/model" + "applet/app/md" + "applet/app/utils" + "applet/app/utils/logx" + "xorm.io/xorm" +) + +var ( + timer *cron.Cron + jobs = map[string]func(*xorm.Engine, string){} + baseEntryId cron.EntryID + entryIds []cron.EntryID + taskCfgList map[string]*[]model.SysCfg + ch = make(chan int, 50) + workerNum = 50 // 智盟跟单并发数量 + orderStatWorkerNum = 50 // 智盟跟单并发数量 + tbagoworkerNum = 50 // 智盟跟单并发数量 + tbsettleworkerNum = 50 // 智盟跟单并发数量 + pddOrderWorkerNum = 50 // 拼多多跟单并发数量 + orderSuccessWorkerNum = 50 // + tbOrderWorkerNum = 50 // 淘宝跟单并发数量 + jdOrderWorkerNum = 50 // 京东跟单并发数量 + wphOrderWorkerNum = 50 // 唯品会跟单并发数量 + cardWorkerNum = 20 // 权益卡并发数量 + tbRelationWorkerNum = 50 // 淘宝并发数量 + hw365WorkerNum = 50 // 海威并发数量 + hw365TourismWorkerNum = 50 // 海威并发数量 + tbpubWorkerNum = 50 // 海威并发数量 + liveWorkerNum = 50 // 海威并发数量 + tikTokOwnWorkerNum = 50 // 海威并发数量 + cardUpdateWorkerNum = 50 // 海威并发数量 + lifeWorkerNum = 50 //生活服务跟单 + pddWorkerNum = 50 // + oilWorkerNum = 50 // + otherWorkerNum = 50 // 淘宝, 苏宁, 考拉并发量 + jdWorkerNum = 50 // + tikTokWorkerNum = 50 // + teamGoodsWorkerNum = 50 + jdCh = make(chan int, 50) + jdWorkerNum1 = 50 // + orderStatCh = make(chan int, 50) + jdCh1 = make(chan int, 50) + oilCh = make(chan int, 50) + otherCh = make(chan int, 50) + otherTourismCh = make(chan int, 50) + liveOtherCh = make(chan int, 50) + teamGoodsCh = make(chan int, 50) + tikTokOwnOtherCh = make(chan int, 50) + cardUpdateCh = make(chan int, 50) + tbpubCh = make(chan int, 50) + cardCh = make(chan int, 20) + pddCh = make(chan int, 50) + tikTokCh = make(chan int, 50) + tbRefundCh = make(chan int, 50) + tbagodCh = make(chan int, 50) + tbsettleCh = make(chan int, 50) + pddFailCh = make(chan int, 50) + orderSuccessCh = make(chan int, 50) + tbRelationCh = make(chan int, 50) +) + +func Init() { + // 初始化任务列表 + initTasks() + var err error + timer = cron.New() + if baseEntryId, err = timer.AddFunc("@every 20m", reload); err != nil { + _ = logx.Fatal(err) + } +} + +func Run() { + reload() + timer.Start() + _ = logx.Info("auto tasks running...") +} + +func reload() { + // 重新初始化数据库 + db.InitMapDbs(cfg.DB, cfg.Prd) + + if len(taskCfgList) == 0 { + taskCfgList = map[string]*[]model.SysCfg{} + } + + // 获取所有站长的配置信息 + for dbName, v := range db.DBs { + if conf := db.MapCrontabCfg(v); conf != nil { + if cfg.Debug { + dbInfo := md.SplitDbInfo(v) + // 去掉模版库 + if dbName == "000000" { + continue + } + _ = logx.Debugf("【MasterId】%s, 【Host】%s, 【Name】%s, 【User】%s, 【prd】%v, 【Task】%v\n", dbName, dbInfo.Host, dbInfo.Name, dbInfo.User, cfg.Prd, utils.SerializeStr(*conf)) + } + taskCfgList[dbName] = conf + } + } + if len(taskCfgList) > 0 { + // 删除原有所有任务 + if len(entryIds) > 0 { + for _, v := range entryIds { + if v != baseEntryId { + timer.Remove(v) + } + } + entryIds = nil + } + var ( + entryId cron.EntryID + err error + ) + // 添加任务 + for dbName, v := range taskCfgList { + for _, vv := range *v { + if _, ok := jobs[vv.Key]; ok && vv.Val != "" { + // fmt.Println(vv.Val) + if entryId, err = timer.AddFunc(vv.Val, doTask(dbName, vv.Key)); err == nil { + entryIds = append(entryIds, entryId) + } + } + } + } + + } +} + +func doTask(dbName, fnName string) func() { + return func() { + begin := time.Now().Local() + jobs[fnName](db.DBs[dbName], dbName) + end := time.Now().Local() + logx.Infof( + "[%s] AutoTask <%s> started at <%s>, ended at <%s> duration <%s>", + dbName, + fnName, + begin.Format("2006-01-02 15:04:05.000"), + end.Format("2006-01-02 15:04:05.000"), + time.Duration(end.UnixNano()-begin.UnixNano()).String(), + ) + } +} + +// 增加自动任务队列 +func initTasks() { + //v2 + //jobs[md.KEY_CFG_CRON_BUCKLE] = taskOrderBuckle // + //jobs[md.KEY_CFG_CRON_CHECK_BUCKLE_ORDER] = taskCheckBuckleOrder // + //jobs[md.KEY_CFG_CRON_USER_RELATE] = taskUserRelate // + + //v3 + //jobs[md.KEY_CFG_CRON_TB12] = taskOrderTaobao12 //淘宝抓单 + //jobs[md.KEY_CFG_CRON_TBBYAGOTIME] = taskAgoOrderTB //用于恢复个别时间丢单的 + //jobs[md.KEY_CFG_CRON_TB_PUNISH_REFUND] = taskTbPunishOrderRefund //淘宝退款订单处理 + //jobs[md.KEY_CFG_CRON_TBREFUND] = taskTbOrderRefund //淘宝退款订单处理 + //jobs[md.KEY_CFG_CRON_PUBLISHER_RELATION] = taskTaobaoPublisherRelation //获取渠道信息 + //jobs[md.KEY_CFG_CRON_PUBLISHER_RELATION_NEW] = taskTaobaoPublisherRelationNew //获取渠道信息 + //jobs[md.KEY_CFG_CRON_TBSETTLEORDER] = taskOrderTaobaoSettleOrder //淘宝抓单结算订单 + + //v4 + //jobs[md.KEY_CFG_CRON_PDD_SUCC] = taskOrderPddSucc + //jobs[md.KEY_CFG_CRON_PDDBYSTATUS] = taskOrderPddStatus + //jobs[md.KEY_CFG_CRON_PDDBYSTATUSSUCCESS] = taskOrderPddStatusSuccess + //jobs[md.KEY_CFG_CRON_PDDBYSTATUSFAIL] = taskOrderPddStatusFail + //jobs[md.KEY_CFG_CRON_PDDBYLOOPTIME] = taskLoopOrderPdd //拼多多创建时间循环当天 + //jobs[md.KEY_CFG_CRON_PDDREFUND] = taskPddOrderRefund //拼多多退款订单处理 + //jobs[md.KEY_CFG_CRON_PDDBYAGOTIME] = taskAgoOrderPdd //用于恢复个别时间丢单的 + //jobs[md.KEY_CFG_CRON_PDDBYCREATETIME] = taskOrderPddByCreateTime //拼多多创建时间跟踪订单 + //jobs[md.KEY_CFG_CRON_PDD] = taskOrderPdd + + //v5-guide-settle + //jobs[md.KEY_CFG_CRON_SETTLE] = taskOrderSettle // 结算 + //v5 + //jobs[md.KEY_CFG_CRON_FREE_SETTLE] = taskOrderFreeSettle // 结算 + //jobs[md.KEY_CFG_CRON_SECOND_FREE_SETTLE] = taskOrderSecondFreeSettle // 结算 + //jobs[md.KEY_CFG_CRON_THIRD_FREE_SETTLE] = taskOrderMoreFreeSettle // 结算 + //jobs[md.KEY_CFG_CRON_AGGREGATION_RECHARGE_SETTLE] = taskAggregationRechargeSettle // + //jobs[md.KEY_CFG_CRON_PLAYLET_SETTLE] = taskAggregationPlaylet // + //jobs[md.KEY_CFG_CRON_DUOYOUORD_SETTLE] = taskDuoYouSettle // + //jobs[md.KEY_CFG_CRON_LIANLIAN_SETTLE] = taskLianlianSettle // + //jobs[md.KEY_CFG_CRON_SWIPE_SETTLE] = taskSwipeSettle // + //jobs[md.KEY_CFG_CRON_USER_LV_UP_SETTLE] = taskUserLvUpOrderSettle // 会员费订单结算 + //jobs[md.KEY_CFG_CRON_PRIVILEGE_CARD_SETTLE] = taskPrivilegeCardOrderSettle // 权益卡订单结算 + //jobs[md.KEY_CFG_CRON_ACQUISITION_CONDITION] = taskAcquisitionCondition + //jobs[md.KEY_CFG_CRON_ACQUISITION_CONDITION_BY_LV] = taskAcquisitionConditionByLv + //jobs[md.KEY_CFG_CRON_ACQUISITION_REWARD] = taskAcquisitionReward + //jobs[md.KEY_CFG_CRON_NEW_ACQUISTION_SETTLE] = taskNewAcquisition // 拉新 + //jobs[md.KEY_CFG_CRON_ACQUISTION_SETTLE] = taskAcquisition // 拉新 + //jobs[md.KEY_CFG_VERIFY] = taskVerify //团长 + + //v7 + //jobs[md.KEY_CFG_CRON_JD] = taskOrderJd + //jobs[md.KEY_CFG_CRON_JDFAILBYCREATETIME] = taskOrderJDFailByCreateTime //拼多多创建时间跟踪订单 + //jobs[md.KEY_CFG_CRON_JDBYCREATETIME] = taskOrderJDByCreateTime //拼多多创建时间跟踪订单 + //jobs[md.KEY_CFG_CRON_JDBYSUCCESS] = taskOrderJDBySuccess //拼多多创建时间跟踪订单 + //jobs[md.KEY_CFG_CRON_ORDER_SUCCESS_CHECK] = taskOrderSuccessCheck // + //jobs[md.KEY_CFG_CRON_JDBYSTATUS] = taskOrderJdStatus + //jobs[md.KEY_CFG_CRON_JDREFUND] = taskJdOrderRefund //京东退款订单处理 + + //v6 + jobs[md.KEY_CFG_CRON_TIKTOKLIFE] = taskOrderTikTokLife //抖音本地生活 + jobs[md.KEY_CFG_KUAISHOU_AUTH] = taskKuaishouAuth //团长 + jobs[md.KEY_CFG_TIK_TOK_TEAM_ORDER_PAY] = taskTikTokTeamOrder //团长 + jobs[md.KEY_CFG_TIK_TOK_TEAM_ORDER_UPDATE] = taskTikTokTeamOrderUpdate //团长 + jobs[md.KEY_CFG_TIK_TOK_TEAM_USER_BIND_BUYINID] = taskTikTokTeamUserBindBuyinid //达人buyin_id + jobs[md.KEY_CFG_KUAISHOU_TEAM_ORDER_PAY] = taskKuaishouTeamOrder //团长 + jobs[md.KEY_CFG_KUAISHOU_TEAM_ORDER_UPDATE] = taskKuaishouTeamOrderUpdate //团长 + jobs[md.KEY_CFG_CRON_AUTO_ADD_TIKTOK_GOODS] = taskAutoAddTikTokGoods // + jobs[md.KEY_CFG_CRON_KuaishouOwn] = taskOrderKuaishouOwn // + jobs[md.KEY_CFG_CRON_KuaishouOwnCreate] = taskOrderKuaishouOwnCreate // + jobs[md.KEY_CFG_CRON_KUAISHOU] = taskOrderKuaishou // + jobs[md.KEY_CFG_CRON_KUAISHOULIVE] = taskOrderKuaishouLive // + jobs[md.KEY_CFG_CRON_TIKTOKCsjp] = taskOrderTIKTokCsjp // + jobs[md.KEY_CFG_CRON_TIKTOKCsjpLive] = taskOrderTIKTokCsjpLive // + jobs[md.KEY_CFG_CRON_TIKTOKOwnCsjp] = taskOrderTIKTokOwnCsjp // + jobs[md.KEY_CFG_CRON_TIKTOKOwnCsjpLive] = taskOrderTIKTokOwnCsjpLive // + jobs[md.KEY_CFG_CRON_TIKTOKOwnCsjpActivity] = taskOrderTIKTokOwnCsjpActivity // + jobs[md.KEY_CFG_CRON_KUAISHOUOFFICIAL] = taskOrderKuaishouOfficial // + jobs[md.KEY_CFG_CRON_KUAISHOUOFFICIALLive] = taskOrderKuaishouOfficialLive // + + //v8 + //jobs[md.KEY_CFG_CRON_MEITUANLM_START] = taskOrderMeituanLmStart //智盟返回的美团联盟 + //jobs[md.KEY_CFG_CRON_MEITUAN_START] = taskOrderMeituanStart //智盟返回的美团联盟 + //jobs[md.KEY_CFG_CRON_MEITUAN] = taskOrderMeituan + //jobs[md.KEY_CFG_CRON_MEITUANLM] = taskOrderMeituanLm //智盟返回的美团联盟 + //jobs[md.KEY_CFG_CRON_STATIONMEITUANLM] = taskOrderStationMeituanLm //站长自己美团联盟 + //jobs[md.KEY_CFG_CRON_MEITUANOFFICIAL] = taskOrderMeituanOfficial //站长自己美团联盟 + + //v9 + //jobs[md.KEY_CFG_CRON_ELM] = taskOrderElm // + //jobs[md.KEY_CFG_CRON_HEYTEA] = taskOrderHeytea //海威365喜茶 + //jobs[md.KEY_CFG_CRON_PIZZA] = taskOrderPizza //海威365 + //jobs[md.KEY_CFG_CRON_WALLACE] = taskOrderWallace //海威365 + //jobs[md.KEY_CFG_CRON_TOURISM] = taskOrderTourism //海威365 + //jobs[md.KEY_CFG_CRON_FLOWERCAKE] = taskOrderFlowerCake //海威365 + //jobs[md.KEY_CFG_CRON_DELIVERY] = taskOrderDelivery //海威365 + //jobs[md.KEY_CFG_CRON_BURGERKING] = taskOrderBurgerKing //海威365汉堡王 + //jobs[md.KEY_CFG_CRON_STARBUCKS] = taskOrderStarbucks //海威365星巴克 + //jobs[md.KEY_CFG_CRON_MCDONALD] = taskOrderMcdonald //海威365麦当劳 + //jobs[md.KEY_CFG_CRON_HWMOVIE] = taskOrderHwMovie //海威365电影票 + //jobs[md.KEY_CFG_CRON_NAYUKI] = taskOrderNayuki //海威365奈雪 + //jobs[md.KEY_CFG_CRON_TO_KFC] = taskOrderToKfc //海威365 + //jobs[md.KEY_CFG_CRON_PAGODA] = taskOrderPagoda //海威365 + //jobs[md.KEY_CFG_CRON_LUCKIN] = taskOrderLuckin //海威365 + + //v10 + + ////jobs[md.KEY_CFG_CRON_WPHREFUND] = taskWphOrderRefund //唯品会退款订单处理 + ////jobs[md.KEY_CFG_CRON_VIP] = taskOrderVip + //jobs[md.KEY_CFG_CRON_KFC] = taskOrderKfc + //jobs[md.KEY_CFG_CRON_CINEMA] = taskOrderCinema + //jobs[md.KEY_CFG_CRON_DUOMAI] = taskOrderDuomai //多麦跟单 + //jobs[md.KEY_CFG_CRON_PLAYLET_ORDER] = taskPlayletOrder + //jobs[md.KEY_CFG_CRON_DIDI_ENERGY] = taskOrderDidiEnergy //滴滴加油 + //jobs[md.KEY_CFG_CRON_T3_CAR] = taskOrderT3Car //T3打车 + //jobs[md.KEY_CFG_CRON_DIDI_ONLINE_CAR] = taskOrderDidiOnlineCar //滴滴网约车 + //jobs[md.KEY_CFG_CRON_KING_FLOWER] = taskOrderKingFlower //滴滴网约车 + //jobs[md.KEY_CFG_CRON_DIDI_FREIGHT] = taskOrderDidiFreight //滴滴货运 + //jobs[md.KEY_CFG_CRON_DIDI_CHAUFFEUR] = taskOrderDidiChauffeur //滴滴代驾 + //jobs[md.KEY_CFG_CRON_OILSTATION] = taskOrderOilstation + //jobs[md.KEY_CFG_CRON_BRIGHTOILSTATION] = taskOrderBrightOilstation + //jobs[md.KEY_CFG_CRON_SN] = taskOrderSuning + //jobs[md.KEY_CFG_CRON_KL] = taskOrderKaola + + ////原来的 + //jobs[md.KEY_CFG_CRON_PlayLet_Total] = taskPlayletTotal // + //jobs[md.KEY_CFG_CRON_CHECK_GUIDE_STORE_ORDER] = taskCheckGuideStoreOrder // + //jobs[md.KEY_CFG_CRON_FAST_REFUND] = taskOrderFastRefund // + //jobs[md.KEY_CFG_CRON_FAST_SUCCESS] = taskOrderFastSuccess // + //jobs[md.KEY_CFG_CRON_DUOYOUORD] = taskOrderDuoYouOrd // + //jobs[md.KEY_CFG_CRON_TASKBOX] = taskOrderTaskBoxOrd // + //jobs[md.KEY_CFG_CRON_TASKBOXSECOND] = taskOrderTaskSecondOrd // + //jobs[md.KEY_CFG_CRON_CARD_CHECK_UPDATE] = taskCardCheckUpdate //权益卡退款 + //jobs[md.KEY_CFG_CRON_CARD_UPDATE] = taskCardUpdate // 权益卡更新 + //jobs[md.KEY_CFG_CRON_ORDER_STAT] = taskOrderStat // 订单统计 + //jobs[md.KEY_CFG_CRON_GOODS_SHELF] = taskGoodsShelf //站内商品上下架 + //jobs[md.KEY_CFG_CRON_CARD_RETURN] = taskCardReturn //权益卡退款 + //jobs[md.KEY_CFG_CRON_DTKBRAND] = taskTaoKeBrandInfo // 大淘客品牌信息 + //jobs[md.KEY_CFG_CRON_PUBLISHER] = taskTaobaoPublisherInfo // 淘宝备案信息绑定 + //jobs[md.KEY_CFG_CRON_AUTO_UN_FREEZE] = taskAutoUnFreeze // 定时解冻 + + //先不用 + //jobs[md.ZhimengCronPlayletVideoOrder] = taskPlayletVideoOrder // + //jobs[md.ZhimengCronPlayletVideoOrderYesterDay] = taskPlayletVideoOrderYesterday // + //jobs[md.ZhimengCronPlayletVideoOrderMonth] = taskPlayletVideoOrderMonth // + //jobs[md.ZhimengCronPlayletAdvOrderMonth] = taskPlayletAdvOrderMonth // + //jobs[md.ZhimengCronPlayletAdvOrder] = taskPlayletAdvOrder // + //jobs[md.ZhimengCronPlayletAdvOrderYesterDay] = taskPlayletAdvOrderYesterday // + //jobs[md.ZhimengCronPlayletAdvOrderYesterDayToMoney] = taskPlayletAdvOrderYesterdayToMoney // + +} diff --git a/app/utils/aes.go b/app/utils/aes.go new file mode 100644 index 0000000..5a39181 --- /dev/null +++ b/app/utils/aes.go @@ -0,0 +1,172 @@ +package utils + +import ( + "applet/app/cfg" + "bytes" + "crypto/aes" + "crypto/cipher" + "encoding/base64" + "encoding/json" + "fmt" +) + +func AesEncrypt(rawData, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + rawData = PKCS5Padding(rawData, blockSize) + // rawData = ZeroPadding(rawData, block.BlockSize()) + blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) + encrypted := make([]byte, len(rawData)) + // 根据CryptBlocks方法的说明,如下方式初始化encrypted也可以 + // encrypted := rawData + blockMode.CryptBlocks(encrypted, rawData) + return encrypted, nil +} + +func AesDecrypt(encrypted, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) + rawData := make([]byte, len(encrypted)) + // rawData := encrypted + blockMode.CryptBlocks(rawData, encrypted) + rawData = PKCS5UnPadding(rawData) + // rawData = ZeroUnPadding(rawData) + return rawData, nil +} + +func ZeroPadding(cipherText []byte, blockSize int) []byte { + padding := blockSize - len(cipherText)%blockSize + padText := bytes.Repeat([]byte{0}, padding) + return append(cipherText, padText...) +} + +func ZeroUnPadding(rawData []byte) []byte { + length := len(rawData) + unPadding := int(rawData[length-1]) + return rawData[:(length - unPadding)] +} + +func PKCS5Padding(cipherText []byte, blockSize int) []byte { + padding := blockSize - len(cipherText)%blockSize + padText := bytes.Repeat([]byte{byte(padding)}, padding) + return append(cipherText, padText...) +} + +func PKCS5UnPadding(rawData []byte) []byte { + length := len(rawData) + // 去掉最后一个字节 unPadding 次 + unPadding := int(rawData[length-1]) + return rawData[:(length - unPadding)] +} + +// 填充0 +func zeroFill(key *string) { + l := len(*key) + if l != 16 && l != 24 && l != 32 { + if l < 16 { + *key = *key + fmt.Sprintf("%0*d", 16-l, 0) + } else if l < 24 { + *key = *key + fmt.Sprintf("%0*d", 24-l, 0) + } else if l < 32 { + *key = *key + fmt.Sprintf("%0*d", 32-l, 0) + } else { + *key = string([]byte(*key)[:32]) + } + } +} + +type AesCrypt struct { + Key []byte + Iv []byte +} + +func (a *AesCrypt) Encrypt(data []byte) ([]byte, error) { + aesBlockEncrypt, err := aes.NewCipher(a.Key) + if err != nil { + println(err.Error()) + return nil, err + } + + content := pKCS5Padding(data, aesBlockEncrypt.BlockSize()) + cipherBytes := make([]byte, len(content)) + aesEncrypt := cipher.NewCBCEncrypter(aesBlockEncrypt, a.Iv) + aesEncrypt.CryptBlocks(cipherBytes, content) + return cipherBytes, nil +} + +func (a *AesCrypt) Decrypt(src []byte) (data []byte, err error) { + decrypted := make([]byte, len(src)) + var aesBlockDecrypt cipher.Block + aesBlockDecrypt, err = aes.NewCipher(a.Key) + if err != nil { + println(err.Error()) + return nil, err + } + aesDecrypt := cipher.NewCBCDecrypter(aesBlockDecrypt, a.Iv) + aesDecrypt.CryptBlocks(decrypted, src) + return pKCS5Trimming(decrypted), nil +} + +func pKCS5Padding(cipherText []byte, blockSize int) []byte { + padding := blockSize - len(cipherText)%blockSize + padText := bytes.Repeat([]byte{byte(padding)}, padding) + return append(cipherText, padText...) +} + +func pKCS5Trimming(encrypt []byte) []byte { + padding := encrypt[len(encrypt)-1] + return encrypt[:len(encrypt)-int(padding)] +} + +// AesAdminCurlPOST is 与后台接口加密交互 +func AesAdminCurlPOST(aesData string, url string, uid int) ([]byte, error) { + adminKey := cfg.Admin.AesKey + adminVI := cfg.Admin.AesIV + crypto := AesCrypt{ + Key: []byte(adminKey), + Iv: []byte(adminVI), + } + + encrypt, err := crypto.Encrypt([]byte(aesData)) + if err != nil { + return nil, err + } + + // 发送请求到后台 + postData := map[string]string{ + "postData": base64.StdEncoding.EncodeToString(encrypt), + } + fmt.Println(adminKey) + fmt.Println(adminVI) + fmt.Println("=======ADMIN请求=====") + fmt.Println(postData) + postDataByte, _ := json.Marshal(postData) + rdata, err := CurlPost(url, postDataByte, nil) + fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>", err) + + if err != nil { + return nil, err + } + + FilePutContents("cash_out", fmt.Sprintf("curl Result返回:%s uid:%d, >>>>>>>>>>>>>>>>>>>>", string(rdata), uid)) + pass, err := base64.StdEncoding.DecodeString(string(rdata)) + if err != nil { + return nil, err + } + fmt.Println(pass) + + decrypt, err := crypto.Decrypt(pass) + fmt.Println(err) + + if err != nil { + return nil, err + } + return decrypt, nil +} diff --git a/app/utils/auth.go b/app/utils/auth.go new file mode 100644 index 0000000..d7bd9ae --- /dev/null +++ b/app/utils/auth.go @@ -0,0 +1,46 @@ +package utils + +import ( + "errors" + "time" + + "applet/app/lib/auth" + + "github.com/dgrijalva/jwt-go" +) + +// GenToken 生成JWT +func GenToken(uid int, username, phone, appname, MiniOpenID, MiniSK string) (string, error) { + // 创建一个我们自己的声明 + c := auth.JWTUser{ + uid, + username, + phone, + appname, + MiniOpenID, + MiniSK, + jwt.StandardClaims{ + ExpiresAt: time.Now().Add(auth.TokenExpireDuration).Unix(), // 过期时间 + Issuer: "zyos", // 签发人 + }, + } + // 使用指定的签名方法创建签名对象 + token := jwt.NewWithClaims(jwt.SigningMethodHS256, c) + // 使用指定的secret签名并获得完整的编码后的字符串token + return token.SignedString(auth.Secret) +} + +// ParseToken 解析JWT +func ParseToken(tokenString string) (*auth.JWTUser, error) { + // 解析token + token, err := jwt.ParseWithClaims(tokenString, &auth.JWTUser{}, func(token *jwt.Token) (i interface{}, err error) { + return auth.Secret, nil + }) + if err != nil { + return nil, err + } + if claims, ok := token.Claims.(*auth.JWTUser); ok && token.Valid { // 校验token + return claims, nil + } + return nil, errors.New("invalid token") +} diff --git a/app/utils/base64.go b/app/utils/base64.go new file mode 100644 index 0000000..661b552 --- /dev/null +++ b/app/utils/base64.go @@ -0,0 +1,117 @@ +package utils + +import ( + "encoding/base64" + "fmt" + "regexp" +) + +const ( + Base64Std = iota + Base64Url + Base64RawStd + Base64RawUrl +) + +func Base64StdEncode(str interface{}) string { + return Base64Encode(str, Base64Std) +} + +func Base64StdDecode(str interface{}) string { + return Base64Decode(str, Base64Std) +} + +func Base64UrlEncode(str interface{}) string { + return Base64Encode(str, Base64Url) +} + +func Base64UrlDecode(str interface{}) string { + return Base64Decode(str, Base64Url) +} + +func Base64RawStdEncode(str interface{}) string { + return Base64Encode(str, Base64RawStd) +} + +func Base64RawStdDecode(str interface{}) string { + return Base64Decode(str, Base64RawStd) +} + +func Base64RawUrlEncode(str interface{}) string { + return Base64Encode(str, Base64RawUrl) +} + +func Base64RawUrlDecode(str interface{}) string { + return Base64Decode(str, Base64RawUrl) +} + +func Base64Encode(str interface{}, encode int) string { + newEncode := base64Encode(encode) + if newEncode == nil { + return "" + } + switch v := str.(type) { + case string: + return newEncode.EncodeToString([]byte(v)) + case []byte: + return newEncode.EncodeToString(v) + } + return newEncode.EncodeToString([]byte(fmt.Sprint(str))) +} + +func Base64Decode(str interface{}, encode int) string { + var err error + var b []byte + newEncode := base64Encode(encode) + if newEncode == nil { + return "" + } + switch v := str.(type) { + case string: + b, err = newEncode.DecodeString(v) + case []byte: + b, err = newEncode.DecodeString(string(v)) + default: + return "" + } + if err != nil { + return "" + } + return string(b) +} + +func base64Encode(encode int) *base64.Encoding { + switch encode { + case Base64Std: + return base64.StdEncoding + case Base64Url: + return base64.URLEncoding + case Base64RawStd: + return base64.RawStdEncoding + case Base64RawUrl: + return base64.RawURLEncoding + default: + return nil + } +} + +func JudgeBase64(str string) bool { + pattern := "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$" + matched, err := regexp.MatchString(pattern, str) + if err != nil { + return false + } + if !(len(str)%4 == 0 && matched) { + return false + } + unCodeStr, err := base64.StdEncoding.DecodeString(str) + if err != nil { + return false + } + tranStr := base64.StdEncoding.EncodeToString(unCodeStr) + //return str==base64.StdEncoding.EncodeToString(unCodeStr) + if str == tranStr { + return true + } + return false +} diff --git a/app/utils/boolean.go b/app/utils/boolean.go new file mode 100644 index 0000000..fdfd986 --- /dev/null +++ b/app/utils/boolean.go @@ -0,0 +1,26 @@ +package utils + +import "reflect" + +// 检验一个值是否为空 +func Empty(val interface{}) bool { + v := reflect.ValueOf(val) + switch v.Kind() { + case reflect.String, reflect.Array: + return v.Len() == 0 + case reflect.Map, reflect.Slice: + return v.Len() == 0 || v.IsNil() + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + + return reflect.DeepEqual(val, reflect.Zero(v.Type()).Interface()) +} diff --git a/app/utils/cache/base.go b/app/utils/cache/base.go new file mode 100644 index 0000000..64648dd --- /dev/null +++ b/app/utils/cache/base.go @@ -0,0 +1,421 @@ +package cache + +import ( + "errors" + "fmt" + "strconv" + "time" +) + +const ( + redisDialTTL = 10 * time.Second + redisReadTTL = 3 * time.Second + redisWriteTTL = 3 * time.Second + redisIdleTTL = 10 * time.Second + redisPoolTTL = 10 * time.Second + redisPoolSize int = 512 + redisMaxIdleConn int = 64 + redisMaxActive int = 512 +) + +var ( + ErrNil = errors.New("nil return") + ErrWrongArgsNum = errors.New("args num error") + ErrNegativeInt = errors.New("redis cluster: unexpected value for Uint64") +) + +// 以下为提供类型转换 + +func Int(reply interface{}, err error) (int, error) { + if err != nil { + return 0, err + } + switch reply := reply.(type) { + case int: + return reply, nil + case int8: + return int(reply), nil + case int16: + return int(reply), nil + case int32: + return int(reply), nil + case int64: + x := int(reply) + if int64(x) != reply { + return 0, strconv.ErrRange + } + return x, nil + case uint: + n := int(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case uint8: + return int(reply), nil + case uint16: + return int(reply), nil + case uint32: + n := int(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case uint64: + n := int(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case []byte: + data := string(reply) + if len(data) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(data, 10, 0) + return int(n), err + case string: + if len(reply) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(reply, 10, 0) + return int(n), err + case nil: + return 0, ErrNil + case error: + return 0, reply + } + return 0, fmt.Errorf("redis cluster: unexpected type for Int, got type %T", reply) +} + +func Int64(reply interface{}, err error) (int64, error) { + if err != nil { + return 0, err + } + switch reply := reply.(type) { + case int: + return int64(reply), nil + case int8: + return int64(reply), nil + case int16: + return int64(reply), nil + case int32: + return int64(reply), nil + case int64: + return reply, nil + case uint: + n := int64(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case uint8: + return int64(reply), nil + case uint16: + return int64(reply), nil + case uint32: + return int64(reply), nil + case uint64: + n := int64(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case []byte: + data := string(reply) + if len(data) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(data, 10, 64) + return n, err + case string: + if len(reply) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(reply, 10, 64) + return n, err + case nil: + return 0, ErrNil + case error: + return 0, reply + } + return 0, fmt.Errorf("redis cluster: unexpected type for Int64, got type %T", reply) +} + +func Uint64(reply interface{}, err error) (uint64, error) { + if err != nil { + return 0, err + } + switch reply := reply.(type) { + case uint: + return uint64(reply), nil + case uint8: + return uint64(reply), nil + case uint16: + return uint64(reply), nil + case uint32: + return uint64(reply), nil + case uint64: + return reply, nil + case int: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int8: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int16: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int32: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int64: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case []byte: + data := string(reply) + if len(data) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseUint(data, 10, 64) + return n, err + case string: + if len(reply) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseUint(reply, 10, 64) + return n, err + case nil: + return 0, ErrNil + case error: + return 0, reply + } + return 0, fmt.Errorf("redis cluster: unexpected type for Uint64, got type %T", reply) +} + +func Float64(reply interface{}, err error) (float64, error) { + if err != nil { + return 0, err + } + + var value float64 + err = nil + switch v := reply.(type) { + case float32: + value = float64(v) + case float64: + value = v + case int: + value = float64(v) + case int8: + value = float64(v) + case int16: + value = float64(v) + case int32: + value = float64(v) + case int64: + value = float64(v) + case uint: + value = float64(v) + case uint8: + value = float64(v) + case uint16: + value = float64(v) + case uint32: + value = float64(v) + case uint64: + value = float64(v) + case []byte: + data := string(v) + if len(data) == 0 { + return 0, ErrNil + } + value, err = strconv.ParseFloat(string(v), 64) + case string: + if len(v) == 0 { + return 0, ErrNil + } + value, err = strconv.ParseFloat(v, 64) + case nil: + err = ErrNil + case error: + err = v + default: + err = fmt.Errorf("redis cluster: unexpected type for Float64, got type %T", v) + } + + return value, err +} + +func Bool(reply interface{}, err error) (bool, error) { + if err != nil { + return false, err + } + switch reply := reply.(type) { + case bool: + return reply, nil + case int64: + return reply != 0, nil + case []byte: + data := string(reply) + if len(data) == 0 { + return false, ErrNil + } + + return strconv.ParseBool(data) + case string: + if len(reply) == 0 { + return false, ErrNil + } + + return strconv.ParseBool(reply) + case nil: + return false, ErrNil + case error: + return false, reply + } + return false, fmt.Errorf("redis cluster: unexpected type for Bool, got type %T", reply) +} + +func Bytes(reply interface{}, err error) ([]byte, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []byte: + if len(reply) == 0 { + return nil, ErrNil + } + return reply, nil + case string: + data := []byte(reply) + if len(data) == 0 { + return nil, ErrNil + } + return data, nil + case nil: + return nil, ErrNil + case error: + return nil, reply + } + return nil, fmt.Errorf("redis cluster: unexpected type for Bytes, got type %T", reply) +} + +func String(reply interface{}, err error) (string, error) { + if err != nil { + return "", err + } + + value := "" + err = nil + switch v := reply.(type) { + case string: + if len(v) == 0 { + return "", ErrNil + } + + value = v + case []byte: + if len(v) == 0 { + return "", ErrNil + } + + value = string(v) + case int: + value = strconv.FormatInt(int64(v), 10) + case int8: + value = strconv.FormatInt(int64(v), 10) + case int16: + value = strconv.FormatInt(int64(v), 10) + case int32: + value = strconv.FormatInt(int64(v), 10) + case int64: + value = strconv.FormatInt(v, 10) + case uint: + value = strconv.FormatUint(uint64(v), 10) + case uint8: + value = strconv.FormatUint(uint64(v), 10) + case uint16: + value = strconv.FormatUint(uint64(v), 10) + case uint32: + value = strconv.FormatUint(uint64(v), 10) + case uint64: + value = strconv.FormatUint(v, 10) + case float32: + value = strconv.FormatFloat(float64(v), 'f', -1, 32) + case float64: + value = strconv.FormatFloat(v, 'f', -1, 64) + case bool: + value = strconv.FormatBool(v) + case nil: + err = ErrNil + case error: + err = v + default: + err = fmt.Errorf("redis cluster: unexpected type for String, got type %T", v) + } + + return value, err +} + +func Strings(reply interface{}, err error) ([]string, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []interface{}: + result := make([]string, len(reply)) + for i := range reply { + if reply[i] == nil { + continue + } + switch subReply := reply[i].(type) { + case string: + result[i] = subReply + case []byte: + result[i] = string(subReply) + default: + return nil, fmt.Errorf("redis cluster: unexpected element type for String, got type %T", reply[i]) + } + } + return result, nil + case []string: + return reply, nil + case nil: + return nil, ErrNil + case error: + return nil, reply + } + return nil, fmt.Errorf("redis cluster: unexpected type for Strings, got type %T", reply) +} + +func Values(reply interface{}, err error) ([]interface{}, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []interface{}: + return reply, nil + case nil: + return nil, ErrNil + case error: + return nil, reply + } + return nil, fmt.Errorf("redis cluster: unexpected type for Values, got type %T", reply) +} diff --git a/app/utils/cache/cache/cache.go b/app/utils/cache/cache/cache.go new file mode 100644 index 0000000..e43c5f0 --- /dev/null +++ b/app/utils/cache/cache/cache.go @@ -0,0 +1,107 @@ +package cache + +import ( + "fmt" + "time" +) + +var c Cache + +type Cache interface { + // get cached value by key. + Get(key string) interface{} + // GetMulti is a batch version of Get. + GetMulti(keys []string) []interface{} + // set cached value with key and expire time. + Put(key string, val interface{}, timeout time.Duration) error + // delete cached value by key. + Delete(key string) error + // increase cached int value by key, as a counter. + Incr(key string) error + // decrease cached int value by key, as a counter. + Decr(key string) error + // check if cached value exists or not. + IsExist(key string) bool + // clear all cache. + ClearAll() error + // start gc routine based on config string settings. + StartAndGC(config string) error +} + +// Instance is a function create a new Cache Instance +type Instance func() Cache + +var adapters = make(map[string]Instance) + +// Register makes a cache adapter available by the adapter name. +// If Register is called twice with the same name or if driver is nil, +// it panics. +func Register(name string, adapter Instance) { + if adapter == nil { + panic("cache: Register adapter is nil") + } + if _, ok := adapters[name]; ok { + panic("cache: Register called twice for adapter " + name) + } + adapters[name] = adapter +} + +// NewCache Create a new cache driver by adapter name and config string. +// config need to be correct JSON as string: {"interval":360}. +// it will start gc automatically. +func NewCache(adapterName, config string) (adapter Cache, err error) { + instanceFunc, ok := adapters[adapterName] + if !ok { + err = fmt.Errorf("cache: unknown adapter name %q (forgot to import?)", adapterName) + return + } + adapter = instanceFunc() + err = adapter.StartAndGC(config) + if err != nil { + adapter = nil + } + return +} + +func InitCache(adapterName, config string) (err error) { + instanceFunc, ok := adapters[adapterName] + if !ok { + err = fmt.Errorf("cache: unknown adapter name %q (forgot to import?)", adapterName) + return + } + c = instanceFunc() + err = c.StartAndGC(config) + if err != nil { + c = nil + } + return +} + +func Get(key string) interface{} { + return c.Get(key) +} + +func GetMulti(keys []string) []interface{} { + return c.GetMulti(keys) +} +func Put(key string, val interface{}, ttl time.Duration) error { + return c.Put(key, val, ttl) +} +func Delete(key string) error { + return c.Delete(key) +} +func Incr(key string) error { + return c.Incr(key) +} +func Decr(key string) error { + return c.Decr(key) +} +func IsExist(key string) bool { + return c.IsExist(key) +} +func ClearAll() error { + return c.ClearAll() +} +func StartAndGC(cfg string) error { + return c.StartAndGC(cfg) +} diff --git a/app/utils/cache/cache/conv.go b/app/utils/cache/cache/conv.go new file mode 100644 index 0000000..6b700ae --- /dev/null +++ b/app/utils/cache/cache/conv.go @@ -0,0 +1,86 @@ +package cache + +import ( + "fmt" + "strconv" +) + +// GetString convert interface to string. +func GetString(v interface{}) string { + switch result := v.(type) { + case string: + return result + case []byte: + return string(result) + default: + if v != nil { + return fmt.Sprint(result) + } + } + return "" +} + +// GetInt convert interface to int. +func GetInt(v interface{}) int { + switch result := v.(type) { + case int: + return result + case int32: + return int(result) + case int64: + return int(result) + default: + if d := GetString(v); d != "" { + value, _ := strconv.Atoi(d) + return value + } + } + return 0 +} + +// GetInt64 convert interface to int64. +func GetInt64(v interface{}) int64 { + switch result := v.(type) { + case int: + return int64(result) + case int32: + return int64(result) + case int64: + return result + default: + + if d := GetString(v); d != "" { + value, _ := strconv.ParseInt(d, 10, 64) + return value + } + } + return 0 +} + +// GetFloat64 convert interface to float64. +func GetFloat64(v interface{}) float64 { + switch result := v.(type) { + case float64: + return result + default: + if d := GetString(v); d != "" { + value, _ := strconv.ParseFloat(d, 64) + return value + } + } + return 0 +} + +// GetBool convert interface to bool. +func GetBool(v interface{}) bool { + switch result := v.(type) { + case bool: + return result + default: + if d := GetString(v); d != "" { + value, _ := strconv.ParseBool(d) + return value + } + } + return false +} diff --git a/app/utils/cache/cache/file.go b/app/utils/cache/cache/file.go new file mode 100644 index 0000000..5c4e366 --- /dev/null +++ b/app/utils/cache/cache/file.go @@ -0,0 +1,241 @@ +package cache + +import ( + "bytes" + "crypto/md5" + "encoding/gob" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "reflect" + "strconv" + "time" +) + +// FileCacheItem is basic unit of file cache adapter. +// it contains data and expire time. +type FileCacheItem struct { + Data interface{} + LastAccess time.Time + Expired time.Time +} + +// FileCache Config +var ( + FileCachePath = "cache" // cache directory + FileCacheFileSuffix = ".bin" // cache file suffix + FileCacheDirectoryLevel = 2 // cache file deep level if auto generated cache files. + FileCacheEmbedExpiry time.Duration // cache expire time, default is no expire forever. +) + +// FileCache is cache adapter for file storage. +type FileCache struct { + CachePath string + FileSuffix string + DirectoryLevel int + EmbedExpiry int +} + +// NewFileCache Create new file cache with no config. +// the level and expiry need set in method StartAndGC as config string. +func NewFileCache() Cache { + // return &FileCache{CachePath:FileCachePath, FileSuffix:FileCacheFileSuffix} + return &FileCache{} +} + +// StartAndGC will start and begin gc for file cache. +// the config need to be like {CachePath:"/cache","FileSuffix":".bin","DirectoryLevel":2,"EmbedExpiry":0} +func (fc *FileCache) StartAndGC(config string) error { + + var cfg map[string]string + json.Unmarshal([]byte(config), &cfg) + if _, ok := cfg["CachePath"]; !ok { + cfg["CachePath"] = FileCachePath + } + if _, ok := cfg["FileSuffix"]; !ok { + cfg["FileSuffix"] = FileCacheFileSuffix + } + if _, ok := cfg["DirectoryLevel"]; !ok { + cfg["DirectoryLevel"] = strconv.Itoa(FileCacheDirectoryLevel) + } + if _, ok := cfg["EmbedExpiry"]; !ok { + cfg["EmbedExpiry"] = strconv.FormatInt(int64(FileCacheEmbedExpiry.Seconds()), 10) + } + fc.CachePath = cfg["CachePath"] + fc.FileSuffix = cfg["FileSuffix"] + fc.DirectoryLevel, _ = strconv.Atoi(cfg["DirectoryLevel"]) + fc.EmbedExpiry, _ = strconv.Atoi(cfg["EmbedExpiry"]) + + fc.Init() + return nil +} + +// Init will make new dir for file cache if not exist. +func (fc *FileCache) Init() { + if ok, _ := exists(fc.CachePath); !ok { // todo : error handle + _ = os.MkdirAll(fc.CachePath, os.ModePerm) // todo : error handle + } +} + +// get cached file name. it's md5 encoded. +func (fc *FileCache) getCacheFileName(key string) string { + m := md5.New() + io.WriteString(m, key) + keyMd5 := hex.EncodeToString(m.Sum(nil)) + cachePath := fc.CachePath + switch fc.DirectoryLevel { + case 2: + cachePath = filepath.Join(cachePath, keyMd5[0:2], keyMd5[2:4]) + case 1: + cachePath = filepath.Join(cachePath, keyMd5[0:2]) + } + + if ok, _ := exists(cachePath); !ok { // todo : error handle + _ = os.MkdirAll(cachePath, os.ModePerm) // todo : error handle + } + + return filepath.Join(cachePath, fmt.Sprintf("%s%s", keyMd5, fc.FileSuffix)) +} + +// Get value from file cache. +// if non-exist or expired, return empty string. +func (fc *FileCache) Get(key string) interface{} { + fileData, err := FileGetContents(fc.getCacheFileName(key)) + if err != nil { + return "" + } + var to FileCacheItem + GobDecode(fileData, &to) + if to.Expired.Before(time.Now()) { + return "" + } + return to.Data +} + +// GetMulti gets values from file cache. +// if non-exist or expired, return empty string. +func (fc *FileCache) GetMulti(keys []string) []interface{} { + var rc []interface{} + for _, key := range keys { + rc = append(rc, fc.Get(key)) + } + return rc +} + +// Put value into file cache. +// timeout means how long to keep this file, unit of ms. +// if timeout equals FileCacheEmbedExpiry(default is 0), cache this item forever. +func (fc *FileCache) Put(key string, val interface{}, timeout time.Duration) error { + gob.Register(val) + + item := FileCacheItem{Data: val} + if timeout == FileCacheEmbedExpiry { + item.Expired = time.Now().Add((86400 * 365 * 10) * time.Second) // ten years + } else { + item.Expired = time.Now().Add(timeout) + } + item.LastAccess = time.Now() + data, err := GobEncode(item) + if err != nil { + return err + } + return FilePutContents(fc.getCacheFileName(key), data) +} + +// Delete file cache value. +func (fc *FileCache) Delete(key string) error { + filename := fc.getCacheFileName(key) + if ok, _ := exists(filename); ok { + return os.Remove(filename) + } + return nil +} + +// Incr will increase cached int value. +// fc value is saving forever unless Delete. +func (fc *FileCache) Incr(key string) error { + data := fc.Get(key) + var incr int + if reflect.TypeOf(data).Name() != "int" { + incr = 0 + } else { + incr = data.(int) + 1 + } + fc.Put(key, incr, FileCacheEmbedExpiry) + return nil +} + +// Decr will decrease cached int value. +func (fc *FileCache) Decr(key string) error { + data := fc.Get(key) + var decr int + if reflect.TypeOf(data).Name() != "int" || data.(int)-1 <= 0 { + decr = 0 + } else { + decr = data.(int) - 1 + } + fc.Put(key, decr, FileCacheEmbedExpiry) + return nil +} + +// IsExist check value is exist. +func (fc *FileCache) IsExist(key string) bool { + ret, _ := exists(fc.getCacheFileName(key)) + return ret +} + +// ClearAll will clean cached files. +// not implemented. +func (fc *FileCache) ClearAll() error { + return nil +} + +// check file exist. +func exists(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +// FileGetContents Get bytes to file. +// if non-exist, create this file. +func FileGetContents(filename string) (data []byte, e error) { + return ioutil.ReadFile(filename) +} + +// FilePutContents Put bytes to file. +// if non-exist, create this file. +func FilePutContents(filename string, content []byte) error { + return ioutil.WriteFile(filename, content, os.ModePerm) +} + +// GobEncode Gob encodes file cache item. +func GobEncode(data interface{}) ([]byte, error) { + buf := bytes.NewBuffer(nil) + enc := gob.NewEncoder(buf) + err := enc.Encode(data) + if err != nil { + return nil, err + } + return buf.Bytes(), err +} + +// GobDecode Gob decodes file cache item. +func GobDecode(data []byte, to *FileCacheItem) error { + buf := bytes.NewBuffer(data) + dec := gob.NewDecoder(buf) + return dec.Decode(&to) +} + +func init() { + Register("file", NewFileCache) +} diff --git a/app/utils/cache/cache/memory.go b/app/utils/cache/cache/memory.go new file mode 100644 index 0000000..0cc5015 --- /dev/null +++ b/app/utils/cache/cache/memory.go @@ -0,0 +1,239 @@ +package cache + +import ( + "encoding/json" + "errors" + "sync" + "time" +) + +var ( + // DefaultEvery means the clock time of recycling the expired cache items in memory. + DefaultEvery = 60 // 1 minute +) + +// MemoryItem store memory cache item. +type MemoryItem struct { + val interface{} + createdTime time.Time + lifespan time.Duration +} + +func (mi *MemoryItem) isExpire() bool { + // 0 means forever + if mi.lifespan == 0 { + return false + } + return time.Now().Sub(mi.createdTime) > mi.lifespan +} + +// MemoryCache is Memory cache adapter. +// it contains a RW locker for safe map storage. +type MemoryCache struct { + sync.RWMutex + dur time.Duration + items map[string]*MemoryItem + Every int // run an expiration check Every clock time +} + +// NewMemoryCache returns a new MemoryCache. +func NewMemoryCache() Cache { + cache := MemoryCache{items: make(map[string]*MemoryItem)} + return &cache +} + +// Get cache from memory. +// if non-existed or expired, return nil. +func (bc *MemoryCache) Get(name string) interface{} { + bc.RLock() + defer bc.RUnlock() + if itm, ok := bc.items[name]; ok { + if itm.isExpire() { + return nil + } + return itm.val + } + return nil +} + +// GetMulti gets caches from memory. +// if non-existed or expired, return nil. +func (bc *MemoryCache) GetMulti(names []string) []interface{} { + var rc []interface{} + for _, name := range names { + rc = append(rc, bc.Get(name)) + } + return rc +} + +// Put cache to memory. +// if lifespan is 0, it will be forever till restart. +func (bc *MemoryCache) Put(name string, value interface{}, lifespan time.Duration) error { + bc.Lock() + defer bc.Unlock() + bc.items[name] = &MemoryItem{ + val: value, + createdTime: time.Now(), + lifespan: lifespan, + } + return nil +} + +// Delete cache in memory. +func (bc *MemoryCache) Delete(name string) error { + bc.Lock() + defer bc.Unlock() + if _, ok := bc.items[name]; !ok { + return errors.New("key not exist") + } + delete(bc.items, name) + if _, ok := bc.items[name]; ok { + return errors.New("delete key error") + } + return nil +} + +// Incr increase cache counter in memory. +// it supports int,int32,int64,uint,uint32,uint64. +func (bc *MemoryCache) Incr(key string) error { + bc.RLock() + defer bc.RUnlock() + itm, ok := bc.items[key] + if !ok { + return errors.New("key not exist") + } + switch itm.val.(type) { + case int: + itm.val = itm.val.(int) + 1 + case int32: + itm.val = itm.val.(int32) + 1 + case int64: + itm.val = itm.val.(int64) + 1 + case uint: + itm.val = itm.val.(uint) + 1 + case uint32: + itm.val = itm.val.(uint32) + 1 + case uint64: + itm.val = itm.val.(uint64) + 1 + default: + return errors.New("item val is not (u)int (u)int32 (u)int64") + } + return nil +} + +// Decr decrease counter in memory. +func (bc *MemoryCache) Decr(key string) error { + bc.RLock() + defer bc.RUnlock() + itm, ok := bc.items[key] + if !ok { + return errors.New("key not exist") + } + switch itm.val.(type) { + case int: + itm.val = itm.val.(int) - 1 + case int64: + itm.val = itm.val.(int64) - 1 + case int32: + itm.val = itm.val.(int32) - 1 + case uint: + if itm.val.(uint) > 0 { + itm.val = itm.val.(uint) - 1 + } else { + return errors.New("item val is less than 0") + } + case uint32: + if itm.val.(uint32) > 0 { + itm.val = itm.val.(uint32) - 1 + } else { + return errors.New("item val is less than 0") + } + case uint64: + if itm.val.(uint64) > 0 { + itm.val = itm.val.(uint64) - 1 + } else { + return errors.New("item val is less than 0") + } + default: + return errors.New("item val is not int int64 int32") + } + return nil +} + +// IsExist check cache exist in memory. +func (bc *MemoryCache) IsExist(name string) bool { + bc.RLock() + defer bc.RUnlock() + if v, ok := bc.items[name]; ok { + return !v.isExpire() + } + return false +} + +// ClearAll will delete all cache in memory. +func (bc *MemoryCache) ClearAll() error { + bc.Lock() + defer bc.Unlock() + bc.items = make(map[string]*MemoryItem) + return nil +} + +// StartAndGC start memory cache. it will check expiration in every clock time. +func (bc *MemoryCache) StartAndGC(config string) error { + var cf map[string]int + json.Unmarshal([]byte(config), &cf) + if _, ok := cf["interval"]; !ok { + cf = make(map[string]int) + cf["interval"] = DefaultEvery + } + dur := time.Duration(cf["interval"]) * time.Second + bc.Every = cf["interval"] + bc.dur = dur + go bc.vacuum() + return nil +} + +// check expiration. +func (bc *MemoryCache) vacuum() { + bc.RLock() + every := bc.Every + bc.RUnlock() + + if every < 1 { + return + } + for { + <-time.After(bc.dur) + if bc.items == nil { + return + } + if keys := bc.expiredKeys(); len(keys) != 0 { + bc.clearItems(keys) + } + } +} + +// expiredKeys returns key list which are expired. +func (bc *MemoryCache) expiredKeys() (keys []string) { + bc.RLock() + defer bc.RUnlock() + for key, itm := range bc.items { + if itm.isExpire() { + keys = append(keys, key) + } + } + return +} + +// clearItems removes all the items which key in keys. +func (bc *MemoryCache) clearItems(keys []string) { + bc.Lock() + defer bc.Unlock() + for _, key := range keys { + delete(bc.items, key) + } +} + +func init() { + Register("memory", NewMemoryCache) +} diff --git a/app/utils/cache/redis.go b/app/utils/cache/redis.go new file mode 100644 index 0000000..4e5f047 --- /dev/null +++ b/app/utils/cache/redis.go @@ -0,0 +1,403 @@ +package cache + +import ( + "encoding/json" + "errors" + "log" + "strings" + "time" + + redigo "github.com/gomodule/redigo/redis" +) + +// configuration +type Config struct { + Server string + Password string + MaxIdle int // Maximum number of idle connections in the pool. + + // Maximum number of connections allocated by the pool at a given time. + // When zero, there is no limit on the number of connections in the pool. + MaxActive int + + // Close connections after remaining idle for this duration. If the value + // is zero, then idle connections are not closed. Applications should set + // the timeout to a value less than the server's timeout. + IdleTimeout time.Duration + + // If Wait is true and the pool is at the MaxActive limit, then Get() waits + // for a connection to be returned to the pool before returning. + Wait bool + KeyPrefix string // prefix to all keys; example is "dev environment name" + KeyDelimiter string // delimiter to be used while appending keys; example is ":" + KeyPlaceholder string // placeholder to be parsed using given arguments to obtain a final key; example is "?" +} + +var pool *redigo.Pool +var conf *Config + +func NewRedis(addr string) { + if addr == "" { + panic("\nredis connect string cannot be empty\n") + } + pool = &redigo.Pool{ + MaxIdle: redisMaxIdleConn, + IdleTimeout: redisIdleTTL, + MaxActive: redisMaxActive, + // MaxConnLifetime: redisDialTTL, + Wait: true, + Dial: func() (redigo.Conn, error) { + c, err := redigo.Dial("tcp", addr, + redigo.DialConnectTimeout(redisDialTTL), + redigo.DialReadTimeout(redisReadTTL), + redigo.DialWriteTimeout(redisWriteTTL), + ) + if err != nil { + log.Println("Redis Dial failed: ", err) + return nil, err + } + return c, err + }, + TestOnBorrow: func(c redigo.Conn, t time.Time) error { + _, err := c.Do("PING") + if err != nil { + log.Println("Unable to ping to redis server:", err) + } + return err + }, + } + conn := pool.Get() + defer conn.Close() + if conn.Err() != nil { + println("\nredis connect " + addr + " error: " + conn.Err().Error()) + } else { + println("\nredis connect " + addr + " success!\n") + } +} + +func Do(cmd string, args ...interface{}) (reply interface{}, err error) { + conn := pool.Get() + defer conn.Close() + return conn.Do(cmd, args...) +} + +func GetPool() *redigo.Pool { + return pool +} + +func ParseKey(key string, vars []string) (string, error) { + arr := strings.Split(key, conf.KeyPlaceholder) + actualKey := "" + if len(arr) != len(vars)+1 { + return "", errors.New("redis/connection.go: Insufficient arguments to parse key") + } else { + for index, val := range arr { + if index == 0 { + actualKey = arr[index] + } else { + actualKey += vars[index-1] + val + } + } + } + return getPrefixedKey(actualKey), nil +} + +func getPrefixedKey(key string) string { + return conf.KeyPrefix + conf.KeyDelimiter + key +} +func StripEnvKey(key string) string { + return strings.TrimLeft(key, conf.KeyPrefix+conf.KeyDelimiter) +} +func SplitKey(key string) []string { + return strings.Split(key, conf.KeyDelimiter) +} +func Expire(key string, ttl int) (interface{}, error) { + return Do("EXPIRE", key, ttl) +} +func Persist(key string) (interface{}, error) { + return Do("PERSIST", key) +} + +func Del(key string) (interface{}, error) { + return Do("DEL", key) +} +func Set(key string, data interface{}) (interface{}, error) { + // set + return Do("SET", key, data) +} +func SetNX(key string, data interface{}) (interface{}, error) { + return Do("SETNX", key, data) +} +func SetEx(key string, data interface{}, ttl int) (interface{}, error) { + return Do("SETEX", key, ttl, data) +} + +func SetJson(key string, data interface{}, ttl int) bool { + c, err := json.Marshal(data) + if err != nil { + return false + } + if ttl < 1 { + _, err = Set(key, c) + } else { + _, err = SetEx(key, c, ttl) + } + if err != nil { + return false + } + return true +} + +func GetJson(key string, dst interface{}) error { + b, err := GetBytes(key) + if err != nil { + return err + } + if err = json.Unmarshal(b, dst); err != nil { + return err + } + return nil +} + +func Get(key string) (interface{}, error) { + // get + return Do("GET", key) +} +func GetTTL(key string) (time.Duration, error) { + ttl, err := redigo.Int64(Do("TTL", key)) + return time.Duration(ttl) * time.Second, err +} +func GetBytes(key string) ([]byte, error) { + return redigo.Bytes(Do("GET", key)) +} +func GetString(key string) (string, error) { + return redigo.String(Do("GET", key)) +} +func GetStringMap(key string) (map[string]string, error) { + return redigo.StringMap(Do("GET", key)) +} +func GetInt(key string) (int, error) { + return redigo.Int(Do("GET", key)) +} +func GetInt64(key string) (int64, error) { + return redigo.Int64(Do("GET", key)) +} +func GetStringLength(key string) (int, error) { + return redigo.Int(Do("STRLEN", key)) +} +func ZAdd(key string, score float64, data interface{}) (interface{}, error) { + return Do("ZADD", key, score, data) +} +func ZAddNX(key string, score float64, data interface{}) (interface{}, error) { + return Do("ZADD", key, "NX", score, data) +} +func ZRem(key string, data interface{}) (interface{}, error) { + return Do("ZREM", key, data) +} +func ZRange(key string, start int, end int, withScores bool) ([]interface{}, error) { + if withScores { + return redigo.Values(Do("ZRANGE", key, start, end, "WITHSCORES")) + } + return redigo.Values(Do("ZRANGE", key, start, end)) +} +func ZRemRangeByScore(key string, start int64, end int64) ([]interface{}, error) { + return redigo.Values(Do("ZREMRANGEBYSCORE", key, start, end)) +} +func ZCard(setName string) (int64, error) { + return redigo.Int64(Do("ZCARD", setName)) +} +func ZScan(setName string) (int64, error) { + return redigo.Int64(Do("ZCARD", setName)) +} +func SAdd(setName string, data interface{}) (interface{}, error) { + return Do("SADD", setName, data) +} +func SCard(setName string) (int64, error) { + return redigo.Int64(Do("SCARD", setName)) +} +func SIsMember(setName string, data interface{}) (bool, error) { + return redigo.Bool(Do("SISMEMBER", setName, data)) +} +func SMembers(setName string) ([]string, error) { + return redigo.Strings(Do("SMEMBERS", setName)) +} +func SRem(setName string, data interface{}) (interface{}, error) { + return Do("SREM", setName, data) +} +func HSet(key string, HKey string, data interface{}) (interface{}, error) { + return Do("HSET", key, HKey, data) +} + +func HGet(key string, HKey string) (interface{}, error) { + return Do("HGET", key, HKey) +} + +func HMGet(key string, hashKeys ...string) ([]interface{}, error) { + ret, err := Do("HMGET", key, hashKeys) + if err != nil { + return nil, err + } + reta, ok := ret.([]interface{}) + if !ok { + return nil, errors.New("result not an array") + } + return reta, nil +} + +func HMSet(key string, hashKeys []string, vals []interface{}) (interface{}, error) { + if len(hashKeys) == 0 || len(hashKeys) != len(vals) { + var ret interface{} + return ret, errors.New("bad length") + } + input := []interface{}{key} + for i, v := range hashKeys { + input = append(input, v, vals[i]) + } + return Do("HMSET", input...) +} + +func HGetString(key string, HKey string) (string, error) { + return redigo.String(Do("HGET", key, HKey)) +} +func HGetFloat(key string, HKey string) (float64, error) { + f, err := redigo.Float64(Do("HGET", key, HKey)) + return f, err +} +func HGetInt(key string, HKey string) (int, error) { + return redigo.Int(Do("HGET", key, HKey)) +} +func HGetInt64(key string, HKey string) (int64, error) { + return redigo.Int64(Do("HGET", key, HKey)) +} +func HGetBool(key string, HKey string) (bool, error) { + return redigo.Bool(Do("HGET", key, HKey)) +} +func HDel(key string, HKey string) (interface{}, error) { + return Do("HDEL", key, HKey) +} + +func HGetAll(key string) (map[string]interface{}, error) { + vals, err := redigo.Values(Do("HGETALL", key)) + if err != nil { + return nil, err + } + num := len(vals) / 2 + result := make(map[string]interface{}, num) + for i := 0; i < num; i++ { + key, _ := redigo.String(vals[2*i], nil) + result[key] = vals[2*i+1] + } + return result, nil +} + +func FlushAll() bool { + res, _ := redigo.String(Do("FLUSHALL")) + if res == "" { + return false + } + return true +} + +// NOTE: Use this in production environment with extreme care. +// Read more here:https://redigo.io/commands/keys +func Keys(pattern string) ([]string, error) { + return redigo.Strings(Do("KEYS", pattern)) +} + +func HKeys(key string) ([]string, error) { + return redigo.Strings(Do("HKEYS", key)) +} + +func Exists(key string) bool { + count, err := redigo.Int(Do("EXISTS", key)) + if count == 0 || err != nil { + return false + } + return true +} + +func Incr(key string) (int64, error) { + return redigo.Int64(Do("INCR", key)) +} + +func Decr(key string) (int64, error) { + return redigo.Int64(Do("DECR", key)) +} + +func IncrBy(key string, incBy int64) (int64, error) { + return redigo.Int64(Do("INCRBY", key, incBy)) +} + +func DecrBy(key string, decrBy int64) (int64, error) { + return redigo.Int64(Do("DECRBY", key)) +} + +func IncrByFloat(key string, incBy float64) (float64, error) { + return redigo.Float64(Do("INCRBYFLOAT", key, incBy)) +} + +func DecrByFloat(key string, decrBy float64) (float64, error) { + return redigo.Float64(Do("DECRBYFLOAT", key, decrBy)) +} + +// use for message queue +func LPush(key string, data interface{}) (interface{}, error) { + // set + return Do("LPUSH", key, data) +} + +func LPop(key string) (interface{}, error) { + return Do("LPOP", key) +} + +func LPopString(key string) (string, error) { + return redigo.String(Do("LPOP", key)) +} +func LPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("LPOP", key)) + return f, err +} +func LPopInt(key string) (int, error) { + return redigo.Int(Do("LPOP", key)) +} +func LPopInt64(key string) (int64, error) { + return redigo.Int64(Do("LPOP", key)) +} + +func RPush(key string, data interface{}) (interface{}, error) { + // set + return Do("RPUSH", key, data) +} + +func RPop(key string) (interface{}, error) { + return Do("RPOP", key) +} + +func RPopString(key string) (string, error) { + return redigo.String(Do("RPOP", key)) +} +func RPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("RPOP", key)) + return f, err +} +func RPopInt(key string) (int, error) { + return redigo.Int(Do("RPOP", key)) +} +func RPopInt64(key string) (int64, error) { + return redigo.Int64(Do("RPOP", key)) +} + +func Scan(cursor int64, pattern string, count int64) (int64, []string, error) { + var items []string + var newCursor int64 + + values, err := redigo.Values(Do("SCAN", cursor, "MATCH", pattern, "COUNT", count)) + if err != nil { + return 0, nil, err + } + values, err = redigo.Scan(values, &newCursor, &items) + if err != nil { + return 0, nil, err + } + return newCursor, items, nil +} diff --git a/app/utils/cache/redis_cluster.go b/app/utils/cache/redis_cluster.go new file mode 100644 index 0000000..901f30c --- /dev/null +++ b/app/utils/cache/redis_cluster.go @@ -0,0 +1,622 @@ +package cache + +import ( + "strconv" + "time" + + "github.com/go-redis/redis" +) + +var pools *redis.ClusterClient + +func NewRedisCluster(addrs []string) error { + opt := &redis.ClusterOptions{ + Addrs: addrs, + PoolSize: redisPoolSize, + PoolTimeout: redisPoolTTL, + IdleTimeout: redisIdleTTL, + DialTimeout: redisDialTTL, + ReadTimeout: redisReadTTL, + WriteTimeout: redisWriteTTL, + } + pools = redis.NewClusterClient(opt) + if err := pools.Ping().Err(); err != nil { + return err + } + return nil +} + +func RCGet(key string) (interface{}, error) { + res, err := pools.Get(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCSet(key string, value interface{}) error { + err := pools.Set(key, value, 0).Err() + return convertError(err) +} +func RCGetSet(key string, value interface{}) (interface{}, error) { + res, err := pools.GetSet(key, value).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCSetNx(key string, value interface{}) (int64, error) { + res, err := pools.SetNX(key, value, 0).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func RCSetEx(key string, value interface{}, timeout int64) error { + _, err := pools.Set(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + return nil +} + +// nil表示成功,ErrNil表示数据库内已经存在这个key,其他表示数据库发生错误 +func RCSetNxEx(key string, value interface{}, timeout int64) error { + res, err := pools.SetNX(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + if res { + return nil + } + return ErrNil +} +func RCMGet(keys ...string) ([]interface{}, error) { + res, err := pools.MGet(keys...).Result() + return res, convertError(err) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func RCMSet(kvs map[string]interface{}) error { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return err + } + pairs = append(pairs, k, val) + } + return convertError(pools.MSet(pairs).Err()) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func RCMSetNX(kvs map[string]interface{}) (bool, error) { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return false, err + } + pairs = append(pairs, k, val) + } + res, err := pools.MSetNX(pairs).Result() + return res, convertError(err) +} +func RCExpireAt(key string, timestamp int64) (int64, error) { + res, err := pools.ExpireAt(key, time.Unix(timestamp, 0)).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func RCDel(keys ...string) (int64, error) { + args := make([]interface{}, 0, len(keys)) + for _, key := range keys { + args = append(args, key) + } + res, err := pools.Del(keys...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCIncr(key string) (int64, error) { + res, err := pools.Incr(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCIncrBy(key string, delta int64) (int64, error) { + res, err := pools.IncrBy(key, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCExpire(key string, duration int64) (int64, error) { + res, err := pools.Expire(key, time.Duration(duration)*time.Second).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func RCExists(key string) (bool, error) { + res, err := pools.Exists(key).Result() + if err != nil { + return false, convertError(err) + } + if res > 0 { + return true, nil + } + return false, nil +} +func RCHGet(key string, field string) (interface{}, error) { + res, err := pools.HGet(key, field).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCHLen(key string) (int64, error) { + res, err := pools.HLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCHSet(key string, field string, val interface{}) error { + value, err := String(val, nil) + if err != nil && err != ErrNil { + return err + } + _, err = pools.HSet(key, field, value).Result() + if err != nil { + return convertError(err) + } + return nil +} +func RCHDel(key string, fields ...string) (int64, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + res, err := pools.HDel(key, fields...).Result() + if err != nil { + return 0, convertError(err) + } + return res, nil +} + +func RCHMGet(key string, fields ...string) (interface{}, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + if len(fields) == 0 { + return nil, ErrNil + } + res, err := pools.HMGet(key, fields...).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCHMSet(key string, kvs ...interface{}) error { + if len(kvs) == 0 { + return nil + } + if len(kvs)%2 != 0 { + return ErrWrongArgsNum + } + var err error + v := map[string]interface{}{} // todo change + v["field"], err = String(kvs[0], nil) + if err != nil && err != ErrNil { + return err + } + v["value"], err = String(kvs[1], nil) + if err != nil && err != ErrNil { + return err + } + pairs := make([]string, 0, len(kvs)-2) + if len(kvs) > 2 { + for _, kv := range kvs[2:] { + kvString, err := String(kv, nil) + if err != nil && err != ErrNil { + return err + } + pairs = append(pairs, kvString) + } + } + v["paris"] = pairs + _, err = pools.HMSet(key, v).Result() + if err != nil { + return convertError(err) + } + return nil +} + +func RCHKeys(key string) ([]string, error) { + res, err := pools.HKeys(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCHVals(key string) ([]interface{}, error) { + res, err := pools.HVals(key).Result() + if err != nil { + return nil, convertError(err) + } + rs := make([]interface{}, 0, len(res)) + for _, res := range res { + rs = append(rs, res) + } + return rs, nil +} +func RCHGetAll(key string) (map[string]string, error) { + vals, err := pools.HGetAll(key).Result() + if err != nil { + return nil, convertError(err) + } + return vals, nil +} +func RCHIncrBy(key, field string, delta int64) (int64, error) { + res, err := pools.HIncrBy(key, field, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCZAdd(key string, kvs ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(kvs)+1) + args = append(args, key) + args = append(args, kvs...) + if len(kvs) == 0 { + return 0, nil + } + if len(kvs)%2 != 0 { + return 0, ErrWrongArgsNum + } + zs := make([]redis.Z, len(kvs)/2) + for i := 0; i < len(kvs); i += 2 { + idx := i / 2 + score, err := Float64(kvs[i], nil) + if err != nil && err != ErrNil { + return 0, err + } + zs[idx].Score = score + zs[idx].Member = kvs[i+1] + } + res, err := pools.ZAdd(key, zs...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCZRem(key string, members ...string) (int64, error) { + args := make([]interface{}, 0, len(members)) + args = append(args, key) + for _, member := range members { + args = append(args, member) + } + res, err := pools.ZRem(key, members).Result() + if err != nil { + return res, convertError(err) + } + return res, err +} + +func RCZRange(key string, min, max int64, withScores bool) (interface{}, error) { + res := make([]interface{}, 0) + if withScores { + zs, err := pools.ZRangeWithScores(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, z := range zs { + res = append(res, z.Member, strconv.FormatFloat(z.Score, 'f', -1, 64)) + } + } else { + ms, err := pools.ZRange(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, m := range ms { + res = append(res, m) + } + } + return res, nil +} +func RCZRangeByScoreWithScore(key string, min, max int64) (map[string]int64, error) { + opt := new(redis.ZRangeBy) + opt.Min = strconv.FormatInt(int64(min), 10) + opt.Max = strconv.FormatInt(int64(max), 10) + opt.Count = -1 + opt.Offset = 0 + vals, err := pools.ZRangeByScoreWithScores(key, *opt).Result() + if err != nil { + return nil, convertError(err) + } + res := make(map[string]int64, len(vals)) + for _, val := range vals { + key, err := String(val.Member, nil) + if err != nil && err != ErrNil { + return nil, err + } + res[key] = int64(val.Score) + } + return res, nil +} +func RCLRange(key string, start, stop int64) (interface{}, error) { + res, err := pools.LRange(key, start, stop).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCLSet(key string, index int, value interface{}) error { + err := pools.LSet(key, int64(index), value).Err() + return convertError(err) +} +func RCLLen(key string) (int64, error) { + res, err := pools.LLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCLRem(key string, count int, value interface{}) (int, error) { + val, _ := value.(string) + res, err := pools.LRem(key, int64(count), val).Result() + if err != nil { + return int(res), convertError(err) + } + return int(res), nil +} +func RCTTl(key string) (int64, error) { + duration, err := pools.TTL(key).Result() + if err != nil { + return int64(duration.Seconds()), convertError(err) + } + return int64(duration.Seconds()), nil +} +func RCLPop(key string) (interface{}, error) { + res, err := pools.LPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCRPop(key string) (interface{}, error) { + res, err := pools.RPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCBLPop(key string, timeout int) (interface{}, error) { + res, err := pools.BLPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, err + } + return res[1], nil +} +func RCBRPop(key string, timeout int) (interface{}, error) { + res, err := pools.BRPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, convertError(err) + } + return res[1], nil +} +func RCLPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + return err + } + vals = append(vals, val) + } + _, err := pools.LPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} +func RCRPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + if err == ErrNil { + continue + } + return err + } + if val == "" { + continue + } + vals = append(vals, val) + } + _, err := pools.RPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func RCBRPopLPush(srcKey string, destKey string, timeout int) (interface{}, error) { + res, err := pools.BRPopLPush(srcKey, destKey, time.Duration(timeout)*time.Second).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func RCRPopLPush(srcKey string, destKey string) (interface{}, error) { + res, err := pools.RPopLPush(srcKey, destKey).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCSAdd(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := pools.SAdd(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSPop(key string) ([]byte, error) { + res, err := pools.SPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCSIsMember(key string, member interface{}) (bool, error) { + m, _ := member.(string) + res, err := pools.SIsMember(key, m).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSRem(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := pools.SRem(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSMembers(key string) ([]string, error) { + res, err := pools.SMembers(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCScriptLoad(luaScript string) (interface{}, error) { + res, err := pools.ScriptLoad(luaScript).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCEvalSha(sha1 string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, sha1, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := pools.EvalSha(sha1, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCEval(luaScript string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, luaScript, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := pools.Eval(luaScript, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCGetBit(key string, offset int64) (int64, error) { + res, err := pools.GetBit(key, offset).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSetBit(key string, offset uint32, value int) (int, error) { + res, err := pools.SetBit(key, int64(offset), value).Result() + return int(res), convertError(err) +} +func RCGetClient() *redis.ClusterClient { + return pools +} +func convertError(err error) error { + if err == redis.Nil { + // 为了兼容redis 2.x,这里不返回 ErrNil,ErrNil在调用redis_cluster_reply函数时才返回 + return nil + } + return err +} diff --git a/app/utils/cache/redis_pool.go b/app/utils/cache/redis_pool.go new file mode 100644 index 0000000..ca38b3f --- /dev/null +++ b/app/utils/cache/redis_pool.go @@ -0,0 +1,324 @@ +package cache + +import ( + "errors" + "log" + "strings" + "time" + + redigo "github.com/gomodule/redigo/redis" +) + +type RedisPool struct { + *redigo.Pool +} + +func NewRedisPool(cfg *Config) *RedisPool { + return &RedisPool{&redigo.Pool{ + MaxIdle: cfg.MaxIdle, + IdleTimeout: cfg.IdleTimeout, + MaxActive: cfg.MaxActive, + Wait: cfg.Wait, + Dial: func() (redigo.Conn, error) { + c, err := redigo.Dial("tcp", cfg.Server) + if err != nil { + log.Println("Redis Dial failed: ", err) + return nil, err + } + if cfg.Password != "" { + if _, err := c.Do("AUTH", cfg.Password); err != nil { + c.Close() + log.Println("Redis AUTH failed: ", err) + return nil, err + } + } + return c, err + }, + TestOnBorrow: func(c redigo.Conn, t time.Time) error { + _, err := c.Do("PING") + if err != nil { + log.Println("Unable to ping to redis server:", err) + } + return err + }, + }} +} + +func (p *RedisPool) Do(cmd string, args ...interface{}) (reply interface{}, err error) { + conn := pool.Get() + defer conn.Close() + return conn.Do(cmd, args...) +} + +func (p *RedisPool) GetPool() *redigo.Pool { + return pool +} + +func (p *RedisPool) ParseKey(key string, vars []string) (string, error) { + arr := strings.Split(key, conf.KeyPlaceholder) + actualKey := "" + if len(arr) != len(vars)+1 { + return "", errors.New("redis/connection.go: Insufficient arguments to parse key") + } else { + for index, val := range arr { + if index == 0 { + actualKey = arr[index] + } else { + actualKey += vars[index-1] + val + } + } + } + return getPrefixedKey(actualKey), nil +} + +func (p *RedisPool) getPrefixedKey(key string) string { + return conf.KeyPrefix + conf.KeyDelimiter + key +} +func (p *RedisPool) StripEnvKey(key string) string { + return strings.TrimLeft(key, conf.KeyPrefix+conf.KeyDelimiter) +} +func (p *RedisPool) SplitKey(key string) []string { + return strings.Split(key, conf.KeyDelimiter) +} +func (p *RedisPool) Expire(key string, ttl int) (interface{}, error) { + return Do("EXPIRE", key, ttl) +} +func (p *RedisPool) Persist(key string) (interface{}, error) { + return Do("PERSIST", key) +} + +func (p *RedisPool) Del(key string) (interface{}, error) { + return Do("DEL", key) +} +func (p *RedisPool) Set(key string, data interface{}) (interface{}, error) { + // set + return Do("SET", key, data) +} +func (p *RedisPool) SetNX(key string, data interface{}) (interface{}, error) { + return Do("SETNX", key, data) +} +func (p *RedisPool) SetEx(key string, data interface{}, ttl int) (interface{}, error) { + return Do("SETEX", key, ttl, data) +} +func (p *RedisPool) Get(key string) (interface{}, error) { + // get + return Do("GET", key) +} +func (p *RedisPool) GetStringMap(key string) (map[string]string, error) { + // get + return redigo.StringMap(Do("GET", key)) +} + +func (p *RedisPool) GetTTL(key string) (time.Duration, error) { + ttl, err := redigo.Int64(Do("TTL", key)) + return time.Duration(ttl) * time.Second, err +} +func (p *RedisPool) GetBytes(key string) ([]byte, error) { + return redigo.Bytes(Do("GET", key)) +} +func (p *RedisPool) GetString(key string) (string, error) { + return redigo.String(Do("GET", key)) +} +func (p *RedisPool) GetInt(key string) (int, error) { + return redigo.Int(Do("GET", key)) +} +func (p *RedisPool) GetStringLength(key string) (int, error) { + return redigo.Int(Do("STRLEN", key)) +} +func (p *RedisPool) ZAdd(key string, score float64, data interface{}) (interface{}, error) { + return Do("ZADD", key, score, data) +} +func (p *RedisPool) ZRem(key string, data interface{}) (interface{}, error) { + return Do("ZREM", key, data) +} +func (p *RedisPool) ZRange(key string, start int, end int, withScores bool) ([]interface{}, error) { + if withScores { + return redigo.Values(Do("ZRANGE", key, start, end, "WITHSCORES")) + } + return redigo.Values(Do("ZRANGE", key, start, end)) +} +func (p *RedisPool) SAdd(setName string, data interface{}) (interface{}, error) { + return Do("SADD", setName, data) +} +func (p *RedisPool) SCard(setName string) (int64, error) { + return redigo.Int64(Do("SCARD", setName)) +} +func (p *RedisPool) SIsMember(setName string, data interface{}) (bool, error) { + return redigo.Bool(Do("SISMEMBER", setName, data)) +} +func (p *RedisPool) SMembers(setName string) ([]string, error) { + return redigo.Strings(Do("SMEMBERS", setName)) +} +func (p *RedisPool) SRem(setName string, data interface{}) (interface{}, error) { + return Do("SREM", setName, data) +} +func (p *RedisPool) HSet(key string, HKey string, data interface{}) (interface{}, error) { + return Do("HSET", key, HKey, data) +} + +func (p *RedisPool) HGet(key string, HKey string) (interface{}, error) { + return Do("HGET", key, HKey) +} + +func (p *RedisPool) HMGet(key string, hashKeys ...string) ([]interface{}, error) { + ret, err := Do("HMGET", key, hashKeys) + if err != nil { + return nil, err + } + reta, ok := ret.([]interface{}) + if !ok { + return nil, errors.New("result not an array") + } + return reta, nil +} + +func (p *RedisPool) HMSet(key string, hashKeys []string, vals []interface{}) (interface{}, error) { + if len(hashKeys) == 0 || len(hashKeys) != len(vals) { + var ret interface{} + return ret, errors.New("bad length") + } + input := []interface{}{key} + for i, v := range hashKeys { + input = append(input, v, vals[i]) + } + return Do("HMSET", input...) +} + +func (p *RedisPool) HGetString(key string, HKey string) (string, error) { + return redigo.String(Do("HGET", key, HKey)) +} +func (p *RedisPool) HGetFloat(key string, HKey string) (float64, error) { + f, err := redigo.Float64(Do("HGET", key, HKey)) + return float64(f), err +} +func (p *RedisPool) HGetInt(key string, HKey string) (int, error) { + return redigo.Int(Do("HGET", key, HKey)) +} +func (p *RedisPool) HGetInt64(key string, HKey string) (int64, error) { + return redigo.Int64(Do("HGET", key, HKey)) +} +func (p *RedisPool) HGetBool(key string, HKey string) (bool, error) { + return redigo.Bool(Do("HGET", key, HKey)) +} +func (p *RedisPool) HDel(key string, HKey string) (interface{}, error) { + return Do("HDEL", key, HKey) +} +func (p *RedisPool) HGetAll(key string) (map[string]interface{}, error) { + vals, err := redigo.Values(Do("HGETALL", key)) + if err != nil { + return nil, err + } + num := len(vals) / 2 + result := make(map[string]interface{}, num) + for i := 0; i < num; i++ { + key, _ := redigo.String(vals[2*i], nil) + result[key] = vals[2*i+1] + } + return result, nil +} + +// NOTE: Use this in production environment with extreme care. +// Read more here:https://redigo.io/commands/keys +func (p *RedisPool) Keys(pattern string) ([]string, error) { + return redigo.Strings(Do("KEYS", pattern)) +} + +func (p *RedisPool) HKeys(key string) ([]string, error) { + return redigo.Strings(Do("HKEYS", key)) +} + +func (p *RedisPool) Exists(key string) (bool, error) { + count, err := redigo.Int(Do("EXISTS", key)) + if count == 0 { + return false, err + } else { + return true, err + } +} + +func (p *RedisPool) Incr(key string) (int64, error) { + return redigo.Int64(Do("INCR", key)) +} + +func (p *RedisPool) Decr(key string) (int64, error) { + return redigo.Int64(Do("DECR", key)) +} + +func (p *RedisPool) IncrBy(key string, incBy int64) (int64, error) { + return redigo.Int64(Do("INCRBY", key, incBy)) +} + +func (p *RedisPool) DecrBy(key string, decrBy int64) (int64, error) { + return redigo.Int64(Do("DECRBY", key)) +} + +func (p *RedisPool) IncrByFloat(key string, incBy float64) (float64, error) { + return redigo.Float64(Do("INCRBYFLOAT", key, incBy)) +} + +func (p *RedisPool) DecrByFloat(key string, decrBy float64) (float64, error) { + return redigo.Float64(Do("DECRBYFLOAT", key, decrBy)) +} + +// use for message queue +func (p *RedisPool) LPush(key string, data interface{}) (interface{}, error) { + // set + return Do("LPUSH", key, data) +} + +func (p *RedisPool) LPop(key string) (interface{}, error) { + return Do("LPOP", key) +} + +func (p *RedisPool) LPopString(key string) (string, error) { + return redigo.String(Do("LPOP", key)) +} +func (p *RedisPool) LPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("LPOP", key)) + return float64(f), err +} +func (p *RedisPool) LPopInt(key string) (int, error) { + return redigo.Int(Do("LPOP", key)) +} +func (p *RedisPool) LPopInt64(key string) (int64, error) { + return redigo.Int64(Do("LPOP", key)) +} + +func (p *RedisPool) RPush(key string, data interface{}) (interface{}, error) { + // set + return Do("RPUSH", key, data) +} + +func (p *RedisPool) RPop(key string) (interface{}, error) { + return Do("RPOP", key) +} + +func (p *RedisPool) RPopString(key string) (string, error) { + return redigo.String(Do("RPOP", key)) +} +func (p *RedisPool) RPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("RPOP", key)) + return float64(f), err +} +func (p *RedisPool) RPopInt(key string) (int, error) { + return redigo.Int(Do("RPOP", key)) +} +func (p *RedisPool) RPopInt64(key string) (int64, error) { + return redigo.Int64(Do("RPOP", key)) +} + +func (p *RedisPool) Scan(cursor int64, pattern string, count int64) (int64, []string, error) { + var items []string + var newCursor int64 + + values, err := redigo.Values(Do("SCAN", cursor, "MATCH", pattern, "COUNT", count)) + if err != nil { + return 0, nil, err + } + values, err = redigo.Scan(values, &newCursor, &items) + if err != nil { + return 0, nil, err + } + + return newCursor, items, nil +} diff --git a/app/utils/cache/redis_pool_cluster.go b/app/utils/cache/redis_pool_cluster.go new file mode 100644 index 0000000..cd1911b --- /dev/null +++ b/app/utils/cache/redis_pool_cluster.go @@ -0,0 +1,617 @@ +package cache + +import ( + "strconv" + "time" + + "github.com/go-redis/redis" +) + +type RedisClusterPool struct { + client *redis.ClusterClient +} + +func NewRedisClusterPool(addrs []string) (*RedisClusterPool, error) { + opt := &redis.ClusterOptions{ + Addrs: addrs, + PoolSize: 512, + PoolTimeout: 10 * time.Second, + IdleTimeout: 10 * time.Second, + DialTimeout: 10 * time.Second, + ReadTimeout: 3 * time.Second, + WriteTimeout: 3 * time.Second, + } + c := redis.NewClusterClient(opt) + if err := c.Ping().Err(); err != nil { + return nil, err + } + return &RedisClusterPool{client: c}, nil +} + +func (p *RedisClusterPool) Get(key string) (interface{}, error) { + res, err := p.client.Get(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) Set(key string, value interface{}) error { + err := p.client.Set(key, value, 0).Err() + return convertError(err) +} +func (p *RedisClusterPool) GetSet(key string, value interface{}) (interface{}, error) { + res, err := p.client.GetSet(key, value).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) SetNx(key string, value interface{}) (int64, error) { + res, err := p.client.SetNX(key, value, 0).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func (p *RedisClusterPool) SetEx(key string, value interface{}, timeout int64) error { + _, err := p.client.Set(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + return nil +} + +// nil表示成功,ErrNil表示数据库内已经存在这个key,其他表示数据库发生错误 +func (p *RedisClusterPool) SetNxEx(key string, value interface{}, timeout int64) error { + res, err := p.client.SetNX(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + if res { + return nil + } + return ErrNil +} +func (p *RedisClusterPool) MGet(keys ...string) ([]interface{}, error) { + res, err := p.client.MGet(keys...).Result() + return res, convertError(err) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func (p *RedisClusterPool) MSet(kvs map[string]interface{}) error { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return err + } + pairs = append(pairs, k, val) + } + return convertError(p.client.MSet(pairs).Err()) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func (p *RedisClusterPool) MSetNX(kvs map[string]interface{}) (bool, error) { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return false, err + } + pairs = append(pairs, k, val) + } + res, err := p.client.MSetNX(pairs).Result() + return res, convertError(err) +} +func (p *RedisClusterPool) ExpireAt(key string, timestamp int64) (int64, error) { + res, err := p.client.ExpireAt(key, time.Unix(timestamp, 0)).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func (p *RedisClusterPool) Del(keys ...string) (int64, error) { + args := make([]interface{}, 0, len(keys)) + for _, key := range keys { + args = append(args, key) + } + res, err := p.client.Del(keys...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) Incr(key string) (int64, error) { + res, err := p.client.Incr(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) IncrBy(key string, delta int64) (int64, error) { + res, err := p.client.IncrBy(key, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) Expire(key string, duration int64) (int64, error) { + res, err := p.client.Expire(key, time.Duration(duration)*time.Second).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func (p *RedisClusterPool) Exists(key string) (bool, error) { // todo (bool, error) + res, err := p.client.Exists(key).Result() + if err != nil { + return false, convertError(err) + } + if res > 0 { + return true, nil + } + return false, nil +} +func (p *RedisClusterPool) HGet(key string, field string) (interface{}, error) { + res, err := p.client.HGet(key, field).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) HLen(key string) (int64, error) { + res, err := p.client.HLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) HSet(key string, field string, val interface{}) error { + value, err := String(val, nil) + if err != nil && err != ErrNil { + return err + } + _, err = p.client.HSet(key, field, value).Result() + if err != nil { + return convertError(err) + } + return nil +} +func (p *RedisClusterPool) HDel(key string, fields ...string) (int64, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + res, err := p.client.HDel(key, fields...).Result() + if err != nil { + return 0, convertError(err) + } + return res, nil +} + +func (p *RedisClusterPool) HMGet(key string, fields ...string) (interface{}, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + if len(fields) == 0 { + return nil, ErrNil + } + res, err := p.client.HMGet(key, fields...).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) HMSet(key string, kvs ...interface{}) error { + if len(kvs) == 0 { + return nil + } + if len(kvs)%2 != 0 { + return ErrWrongArgsNum + } + var err error + v := map[string]interface{}{} // todo change + v["field"], err = String(kvs[0], nil) + if err != nil && err != ErrNil { + return err + } + v["value"], err = String(kvs[1], nil) + if err != nil && err != ErrNil { + return err + } + pairs := make([]string, 0, len(kvs)-2) + if len(kvs) > 2 { + for _, kv := range kvs[2:] { + kvString, err := String(kv, nil) + if err != nil && err != ErrNil { + return err + } + pairs = append(pairs, kvString) + } + } + v["paris"] = pairs + _, err = p.client.HMSet(key, v).Result() + if err != nil { + return convertError(err) + } + return nil +} + +func (p *RedisClusterPool) HKeys(key string) ([]string, error) { + res, err := p.client.HKeys(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) HVals(key string) ([]interface{}, error) { + res, err := p.client.HVals(key).Result() + if err != nil { + return nil, convertError(err) + } + rs := make([]interface{}, 0, len(res)) + for _, res := range res { + rs = append(rs, res) + } + return rs, nil +} +func (p *RedisClusterPool) HGetAll(key string) (map[string]string, error) { + vals, err := p.client.HGetAll(key).Result() + if err != nil { + return nil, convertError(err) + } + return vals, nil +} +func (p *RedisClusterPool) HIncrBy(key, field string, delta int64) (int64, error) { + res, err := p.client.HIncrBy(key, field, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) ZAdd(key string, kvs ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(kvs)+1) + args = append(args, key) + args = append(args, kvs...) + if len(kvs) == 0 { + return 0, nil + } + if len(kvs)%2 != 0 { + return 0, ErrWrongArgsNum + } + zs := make([]redis.Z, len(kvs)/2) + for i := 0; i < len(kvs); i += 2 { + idx := i / 2 + score, err := Float64(kvs[i], nil) + if err != nil && err != ErrNil { + return 0, err + } + zs[idx].Score = score + zs[idx].Member = kvs[i+1] + } + res, err := p.client.ZAdd(key, zs...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) ZRem(key string, members ...string) (int64, error) { + args := make([]interface{}, 0, len(members)) + args = append(args, key) + for _, member := range members { + args = append(args, member) + } + res, err := p.client.ZRem(key, members).Result() + if err != nil { + return res, convertError(err) + } + return res, err +} + +func (p *RedisClusterPool) ZRange(key string, min, max int64, withScores bool) (interface{}, error) { + res := make([]interface{}, 0) + if withScores { + zs, err := p.client.ZRangeWithScores(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, z := range zs { + res = append(res, z.Member, strconv.FormatFloat(z.Score, 'f', -1, 64)) + } + } else { + ms, err := p.client.ZRange(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, m := range ms { + res = append(res, m) + } + } + return res, nil +} +func (p *RedisClusterPool) ZRangeByScoreWithScore(key string, min, max int64) (map[string]int64, error) { + opt := new(redis.ZRangeBy) + opt.Min = strconv.FormatInt(int64(min), 10) + opt.Max = strconv.FormatInt(int64(max), 10) + opt.Count = -1 + opt.Offset = 0 + vals, err := p.client.ZRangeByScoreWithScores(key, *opt).Result() + if err != nil { + return nil, convertError(err) + } + res := make(map[string]int64, len(vals)) + for _, val := range vals { + key, err := String(val.Member, nil) + if err != nil && err != ErrNil { + return nil, err + } + res[key] = int64(val.Score) + } + return res, nil +} +func (p *RedisClusterPool) LRange(key string, start, stop int64) (interface{}, error) { + res, err := p.client.LRange(key, start, stop).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) LSet(key string, index int, value interface{}) error { + err := p.client.LSet(key, int64(index), value).Err() + return convertError(err) +} +func (p *RedisClusterPool) LLen(key string) (int64, error) { + res, err := p.client.LLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) LRem(key string, count int, value interface{}) (int, error) { + val, _ := value.(string) + res, err := p.client.LRem(key, int64(count), val).Result() + if err != nil { + return int(res), convertError(err) + } + return int(res), nil +} +func (p *RedisClusterPool) TTl(key string) (int64, error) { + duration, err := p.client.TTL(key).Result() + if err != nil { + return int64(duration.Seconds()), convertError(err) + } + return int64(duration.Seconds()), nil +} +func (p *RedisClusterPool) LPop(key string) (interface{}, error) { + res, err := p.client.LPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) RPop(key string) (interface{}, error) { + res, err := p.client.RPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) BLPop(key string, timeout int) (interface{}, error) { + res, err := p.client.BLPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, err + } + return res[1], nil +} +func (p *RedisClusterPool) BRPop(key string, timeout int) (interface{}, error) { + res, err := p.client.BRPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, convertError(err) + } + return res[1], nil +} +func (p *RedisClusterPool) LPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + return err + } + vals = append(vals, val) + } + _, err := p.client.LPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} +func (p *RedisClusterPool) RPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + if err == ErrNil { + continue + } + return err + } + if val == "" { + continue + } + vals = append(vals, val) + } + _, err := p.client.RPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func (p *RedisClusterPool) BRPopLPush(srcKey string, destKey string, timeout int) (interface{}, error) { + res, err := p.client.BRPopLPush(srcKey, destKey, time.Duration(timeout)*time.Second).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func (p *RedisClusterPool) RPopLPush(srcKey string, destKey string) (interface{}, error) { + res, err := p.client.RPopLPush(srcKey, destKey).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SAdd(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := p.client.SAdd(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SPop(key string) ([]byte, error) { + res, err := p.client.SPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) SIsMember(key string, member interface{}) (bool, error) { + m, _ := member.(string) + res, err := p.client.SIsMember(key, m).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SRem(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := p.client.SRem(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SMembers(key string) ([]string, error) { + res, err := p.client.SMembers(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) ScriptLoad(luaScript string) (interface{}, error) { + res, err := p.client.ScriptLoad(luaScript).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) EvalSha(sha1 string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, sha1, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := p.client.EvalSha(sha1, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) Eval(luaScript string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, luaScript, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := p.client.Eval(luaScript, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) GetBit(key string, offset int64) (int64, error) { + res, err := p.client.GetBit(key, offset).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SetBit(key string, offset uint32, value int) (int, error) { + res, err := p.client.SetBit(key, int64(offset), value).Result() + return int(res), convertError(err) +} +func (p *RedisClusterPool) GetClient() *redis.ClusterClient { + return pools +} diff --git a/app/utils/cachesecond/base.go b/app/utils/cachesecond/base.go new file mode 100644 index 0000000..126c4d3 --- /dev/null +++ b/app/utils/cachesecond/base.go @@ -0,0 +1,421 @@ +package cachesecond + +import ( + "errors" + "fmt" + "strconv" + "time" +) + +const ( + redisDialTTL = 10 * time.Second + redisReadTTL = 3 * time.Second + redisWriteTTL = 3 * time.Second + redisIdleTTL = 10 * time.Second + redisPoolTTL = 10 * time.Second + redisPoolSize int = 512 + redisMaxIdleConn int = 64 + redisMaxActive int = 512 +) + +var ( + ErrNil = errors.New("nil return") + ErrWrongArgsNum = errors.New("args num error") + ErrNegativeInt = errors.New("redis cluster: unexpected value for Uint64") +) + +// 以下为提供类型转换 + +func Int(reply interface{}, err error) (int, error) { + if err != nil { + return 0, err + } + switch reply := reply.(type) { + case int: + return reply, nil + case int8: + return int(reply), nil + case int16: + return int(reply), nil + case int32: + return int(reply), nil + case int64: + x := int(reply) + if int64(x) != reply { + return 0, strconv.ErrRange + } + return x, nil + case uint: + n := int(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case uint8: + return int(reply), nil + case uint16: + return int(reply), nil + case uint32: + n := int(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case uint64: + n := int(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case []byte: + data := string(reply) + if len(data) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(data, 10, 0) + return int(n), err + case string: + if len(reply) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(reply, 10, 0) + return int(n), err + case nil: + return 0, ErrNil + case error: + return 0, reply + } + return 0, fmt.Errorf("redis cluster: unexpected type for Int, got type %T", reply) +} + +func Int64(reply interface{}, err error) (int64, error) { + if err != nil { + return 0, err + } + switch reply := reply.(type) { + case int: + return int64(reply), nil + case int8: + return int64(reply), nil + case int16: + return int64(reply), nil + case int32: + return int64(reply), nil + case int64: + return reply, nil + case uint: + n := int64(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case uint8: + return int64(reply), nil + case uint16: + return int64(reply), nil + case uint32: + return int64(reply), nil + case uint64: + n := int64(reply) + if n < 0 { + return 0, strconv.ErrRange + } + return n, nil + case []byte: + data := string(reply) + if len(data) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(data, 10, 64) + return n, err + case string: + if len(reply) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseInt(reply, 10, 64) + return n, err + case nil: + return 0, ErrNil + case error: + return 0, reply + } + return 0, fmt.Errorf("redis cluster: unexpected type for Int64, got type %T", reply) +} + +func Uint64(reply interface{}, err error) (uint64, error) { + if err != nil { + return 0, err + } + switch reply := reply.(type) { + case uint: + return uint64(reply), nil + case uint8: + return uint64(reply), nil + case uint16: + return uint64(reply), nil + case uint32: + return uint64(reply), nil + case uint64: + return reply, nil + case int: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int8: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int16: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int32: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case int64: + if reply < 0 { + return 0, ErrNegativeInt + } + return uint64(reply), nil + case []byte: + data := string(reply) + if len(data) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseUint(data, 10, 64) + return n, err + case string: + if len(reply) == 0 { + return 0, ErrNil + } + + n, err := strconv.ParseUint(reply, 10, 64) + return n, err + case nil: + return 0, ErrNil + case error: + return 0, reply + } + return 0, fmt.Errorf("redis cluster: unexpected type for Uint64, got type %T", reply) +} + +func Float64(reply interface{}, err error) (float64, error) { + if err != nil { + return 0, err + } + + var value float64 + err = nil + switch v := reply.(type) { + case float32: + value = float64(v) + case float64: + value = v + case int: + value = float64(v) + case int8: + value = float64(v) + case int16: + value = float64(v) + case int32: + value = float64(v) + case int64: + value = float64(v) + case uint: + value = float64(v) + case uint8: + value = float64(v) + case uint16: + value = float64(v) + case uint32: + value = float64(v) + case uint64: + value = float64(v) + case []byte: + data := string(v) + if len(data) == 0 { + return 0, ErrNil + } + value, err = strconv.ParseFloat(string(v), 64) + case string: + if len(v) == 0 { + return 0, ErrNil + } + value, err = strconv.ParseFloat(v, 64) + case nil: + err = ErrNil + case error: + err = v + default: + err = fmt.Errorf("redis cluster: unexpected type for Float64, got type %T", v) + } + + return value, err +} + +func Bool(reply interface{}, err error) (bool, error) { + if err != nil { + return false, err + } + switch reply := reply.(type) { + case bool: + return reply, nil + case int64: + return reply != 0, nil + case []byte: + data := string(reply) + if len(data) == 0 { + return false, ErrNil + } + + return strconv.ParseBool(data) + case string: + if len(reply) == 0 { + return false, ErrNil + } + + return strconv.ParseBool(reply) + case nil: + return false, ErrNil + case error: + return false, reply + } + return false, fmt.Errorf("redis cluster: unexpected type for Bool, got type %T", reply) +} + +func Bytes(reply interface{}, err error) ([]byte, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []byte: + if len(reply) == 0 { + return nil, ErrNil + } + return reply, nil + case string: + data := []byte(reply) + if len(data) == 0 { + return nil, ErrNil + } + return data, nil + case nil: + return nil, ErrNil + case error: + return nil, reply + } + return nil, fmt.Errorf("redis cluster: unexpected type for Bytes, got type %T", reply) +} + +func String(reply interface{}, err error) (string, error) { + if err != nil { + return "", err + } + + value := "" + err = nil + switch v := reply.(type) { + case string: + if len(v) == 0 { + return "", ErrNil + } + + value = v + case []byte: + if len(v) == 0 { + return "", ErrNil + } + + value = string(v) + case int: + value = strconv.FormatInt(int64(v), 10) + case int8: + value = strconv.FormatInt(int64(v), 10) + case int16: + value = strconv.FormatInt(int64(v), 10) + case int32: + value = strconv.FormatInt(int64(v), 10) + case int64: + value = strconv.FormatInt(v, 10) + case uint: + value = strconv.FormatUint(uint64(v), 10) + case uint8: + value = strconv.FormatUint(uint64(v), 10) + case uint16: + value = strconv.FormatUint(uint64(v), 10) + case uint32: + value = strconv.FormatUint(uint64(v), 10) + case uint64: + value = strconv.FormatUint(v, 10) + case float32: + value = strconv.FormatFloat(float64(v), 'f', -1, 32) + case float64: + value = strconv.FormatFloat(v, 'f', -1, 64) + case bool: + value = strconv.FormatBool(v) + case nil: + err = ErrNil + case error: + err = v + default: + err = fmt.Errorf("redis cluster: unexpected type for String, got type %T", v) + } + + return value, err +} + +func Strings(reply interface{}, err error) ([]string, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []interface{}: + result := make([]string, len(reply)) + for i := range reply { + if reply[i] == nil { + continue + } + switch subReply := reply[i].(type) { + case string: + result[i] = subReply + case []byte: + result[i] = string(subReply) + default: + return nil, fmt.Errorf("redis cluster: unexpected element type for String, got type %T", reply[i]) + } + } + return result, nil + case []string: + return reply, nil + case nil: + return nil, ErrNil + case error: + return nil, reply + } + return nil, fmt.Errorf("redis cluster: unexpected type for Strings, got type %T", reply) +} + +func Values(reply interface{}, err error) ([]interface{}, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []interface{}: + return reply, nil + case nil: + return nil, ErrNil + case error: + return nil, reply + } + return nil, fmt.Errorf("redis cluster: unexpected type for Values, got type %T", reply) +} diff --git a/app/utils/cachesecond/cache/cache.go b/app/utils/cachesecond/cache/cache.go new file mode 100644 index 0000000..e43c5f0 --- /dev/null +++ b/app/utils/cachesecond/cache/cache.go @@ -0,0 +1,107 @@ +package cache + +import ( + "fmt" + "time" +) + +var c Cache + +type Cache interface { + // get cached value by key. + Get(key string) interface{} + // GetMulti is a batch version of Get. + GetMulti(keys []string) []interface{} + // set cached value with key and expire time. + Put(key string, val interface{}, timeout time.Duration) error + // delete cached value by key. + Delete(key string) error + // increase cached int value by key, as a counter. + Incr(key string) error + // decrease cached int value by key, as a counter. + Decr(key string) error + // check if cached value exists or not. + IsExist(key string) bool + // clear all cache. + ClearAll() error + // start gc routine based on config string settings. + StartAndGC(config string) error +} + +// Instance is a function create a new Cache Instance +type Instance func() Cache + +var adapters = make(map[string]Instance) + +// Register makes a cache adapter available by the adapter name. +// If Register is called twice with the same name or if driver is nil, +// it panics. +func Register(name string, adapter Instance) { + if adapter == nil { + panic("cache: Register adapter is nil") + } + if _, ok := adapters[name]; ok { + panic("cache: Register called twice for adapter " + name) + } + adapters[name] = adapter +} + +// NewCache Create a new cache driver by adapter name and config string. +// config need to be correct JSON as string: {"interval":360}. +// it will start gc automatically. +func NewCache(adapterName, config string) (adapter Cache, err error) { + instanceFunc, ok := adapters[adapterName] + if !ok { + err = fmt.Errorf("cache: unknown adapter name %q (forgot to import?)", adapterName) + return + } + adapter = instanceFunc() + err = adapter.StartAndGC(config) + if err != nil { + adapter = nil + } + return +} + +func InitCache(adapterName, config string) (err error) { + instanceFunc, ok := adapters[adapterName] + if !ok { + err = fmt.Errorf("cache: unknown adapter name %q (forgot to import?)", adapterName) + return + } + c = instanceFunc() + err = c.StartAndGC(config) + if err != nil { + c = nil + } + return +} + +func Get(key string) interface{} { + return c.Get(key) +} + +func GetMulti(keys []string) []interface{} { + return c.GetMulti(keys) +} +func Put(key string, val interface{}, ttl time.Duration) error { + return c.Put(key, val, ttl) +} +func Delete(key string) error { + return c.Delete(key) +} +func Incr(key string) error { + return c.Incr(key) +} +func Decr(key string) error { + return c.Decr(key) +} +func IsExist(key string) bool { + return c.IsExist(key) +} +func ClearAll() error { + return c.ClearAll() +} +func StartAndGC(cfg string) error { + return c.StartAndGC(cfg) +} diff --git a/app/utils/cachesecond/cache/conv.go b/app/utils/cachesecond/cache/conv.go new file mode 100644 index 0000000..6b700ae --- /dev/null +++ b/app/utils/cachesecond/cache/conv.go @@ -0,0 +1,86 @@ +package cache + +import ( + "fmt" + "strconv" +) + +// GetString convert interface to string. +func GetString(v interface{}) string { + switch result := v.(type) { + case string: + return result + case []byte: + return string(result) + default: + if v != nil { + return fmt.Sprint(result) + } + } + return "" +} + +// GetInt convert interface to int. +func GetInt(v interface{}) int { + switch result := v.(type) { + case int: + return result + case int32: + return int(result) + case int64: + return int(result) + default: + if d := GetString(v); d != "" { + value, _ := strconv.Atoi(d) + return value + } + } + return 0 +} + +// GetInt64 convert interface to int64. +func GetInt64(v interface{}) int64 { + switch result := v.(type) { + case int: + return int64(result) + case int32: + return int64(result) + case int64: + return result + default: + + if d := GetString(v); d != "" { + value, _ := strconv.ParseInt(d, 10, 64) + return value + } + } + return 0 +} + +// GetFloat64 convert interface to float64. +func GetFloat64(v interface{}) float64 { + switch result := v.(type) { + case float64: + return result + default: + if d := GetString(v); d != "" { + value, _ := strconv.ParseFloat(d, 64) + return value + } + } + return 0 +} + +// GetBool convert interface to bool. +func GetBool(v interface{}) bool { + switch result := v.(type) { + case bool: + return result + default: + if d := GetString(v); d != "" { + value, _ := strconv.ParseBool(d) + return value + } + } + return false +} diff --git a/app/utils/cachesecond/cache/file.go b/app/utils/cachesecond/cache/file.go new file mode 100644 index 0000000..5c4e366 --- /dev/null +++ b/app/utils/cachesecond/cache/file.go @@ -0,0 +1,241 @@ +package cache + +import ( + "bytes" + "crypto/md5" + "encoding/gob" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "reflect" + "strconv" + "time" +) + +// FileCacheItem is basic unit of file cache adapter. +// it contains data and expire time. +type FileCacheItem struct { + Data interface{} + LastAccess time.Time + Expired time.Time +} + +// FileCache Config +var ( + FileCachePath = "cache" // cache directory + FileCacheFileSuffix = ".bin" // cache file suffix + FileCacheDirectoryLevel = 2 // cache file deep level if auto generated cache files. + FileCacheEmbedExpiry time.Duration // cache expire time, default is no expire forever. +) + +// FileCache is cache adapter for file storage. +type FileCache struct { + CachePath string + FileSuffix string + DirectoryLevel int + EmbedExpiry int +} + +// NewFileCache Create new file cache with no config. +// the level and expiry need set in method StartAndGC as config string. +func NewFileCache() Cache { + // return &FileCache{CachePath:FileCachePath, FileSuffix:FileCacheFileSuffix} + return &FileCache{} +} + +// StartAndGC will start and begin gc for file cache. +// the config need to be like {CachePath:"/cache","FileSuffix":".bin","DirectoryLevel":2,"EmbedExpiry":0} +func (fc *FileCache) StartAndGC(config string) error { + + var cfg map[string]string + json.Unmarshal([]byte(config), &cfg) + if _, ok := cfg["CachePath"]; !ok { + cfg["CachePath"] = FileCachePath + } + if _, ok := cfg["FileSuffix"]; !ok { + cfg["FileSuffix"] = FileCacheFileSuffix + } + if _, ok := cfg["DirectoryLevel"]; !ok { + cfg["DirectoryLevel"] = strconv.Itoa(FileCacheDirectoryLevel) + } + if _, ok := cfg["EmbedExpiry"]; !ok { + cfg["EmbedExpiry"] = strconv.FormatInt(int64(FileCacheEmbedExpiry.Seconds()), 10) + } + fc.CachePath = cfg["CachePath"] + fc.FileSuffix = cfg["FileSuffix"] + fc.DirectoryLevel, _ = strconv.Atoi(cfg["DirectoryLevel"]) + fc.EmbedExpiry, _ = strconv.Atoi(cfg["EmbedExpiry"]) + + fc.Init() + return nil +} + +// Init will make new dir for file cache if not exist. +func (fc *FileCache) Init() { + if ok, _ := exists(fc.CachePath); !ok { // todo : error handle + _ = os.MkdirAll(fc.CachePath, os.ModePerm) // todo : error handle + } +} + +// get cached file name. it's md5 encoded. +func (fc *FileCache) getCacheFileName(key string) string { + m := md5.New() + io.WriteString(m, key) + keyMd5 := hex.EncodeToString(m.Sum(nil)) + cachePath := fc.CachePath + switch fc.DirectoryLevel { + case 2: + cachePath = filepath.Join(cachePath, keyMd5[0:2], keyMd5[2:4]) + case 1: + cachePath = filepath.Join(cachePath, keyMd5[0:2]) + } + + if ok, _ := exists(cachePath); !ok { // todo : error handle + _ = os.MkdirAll(cachePath, os.ModePerm) // todo : error handle + } + + return filepath.Join(cachePath, fmt.Sprintf("%s%s", keyMd5, fc.FileSuffix)) +} + +// Get value from file cache. +// if non-exist or expired, return empty string. +func (fc *FileCache) Get(key string) interface{} { + fileData, err := FileGetContents(fc.getCacheFileName(key)) + if err != nil { + return "" + } + var to FileCacheItem + GobDecode(fileData, &to) + if to.Expired.Before(time.Now()) { + return "" + } + return to.Data +} + +// GetMulti gets values from file cache. +// if non-exist or expired, return empty string. +func (fc *FileCache) GetMulti(keys []string) []interface{} { + var rc []interface{} + for _, key := range keys { + rc = append(rc, fc.Get(key)) + } + return rc +} + +// Put value into file cache. +// timeout means how long to keep this file, unit of ms. +// if timeout equals FileCacheEmbedExpiry(default is 0), cache this item forever. +func (fc *FileCache) Put(key string, val interface{}, timeout time.Duration) error { + gob.Register(val) + + item := FileCacheItem{Data: val} + if timeout == FileCacheEmbedExpiry { + item.Expired = time.Now().Add((86400 * 365 * 10) * time.Second) // ten years + } else { + item.Expired = time.Now().Add(timeout) + } + item.LastAccess = time.Now() + data, err := GobEncode(item) + if err != nil { + return err + } + return FilePutContents(fc.getCacheFileName(key), data) +} + +// Delete file cache value. +func (fc *FileCache) Delete(key string) error { + filename := fc.getCacheFileName(key) + if ok, _ := exists(filename); ok { + return os.Remove(filename) + } + return nil +} + +// Incr will increase cached int value. +// fc value is saving forever unless Delete. +func (fc *FileCache) Incr(key string) error { + data := fc.Get(key) + var incr int + if reflect.TypeOf(data).Name() != "int" { + incr = 0 + } else { + incr = data.(int) + 1 + } + fc.Put(key, incr, FileCacheEmbedExpiry) + return nil +} + +// Decr will decrease cached int value. +func (fc *FileCache) Decr(key string) error { + data := fc.Get(key) + var decr int + if reflect.TypeOf(data).Name() != "int" || data.(int)-1 <= 0 { + decr = 0 + } else { + decr = data.(int) - 1 + } + fc.Put(key, decr, FileCacheEmbedExpiry) + return nil +} + +// IsExist check value is exist. +func (fc *FileCache) IsExist(key string) bool { + ret, _ := exists(fc.getCacheFileName(key)) + return ret +} + +// ClearAll will clean cached files. +// not implemented. +func (fc *FileCache) ClearAll() error { + return nil +} + +// check file exist. +func exists(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +// FileGetContents Get bytes to file. +// if non-exist, create this file. +func FileGetContents(filename string) (data []byte, e error) { + return ioutil.ReadFile(filename) +} + +// FilePutContents Put bytes to file. +// if non-exist, create this file. +func FilePutContents(filename string, content []byte) error { + return ioutil.WriteFile(filename, content, os.ModePerm) +} + +// GobEncode Gob encodes file cache item. +func GobEncode(data interface{}) ([]byte, error) { + buf := bytes.NewBuffer(nil) + enc := gob.NewEncoder(buf) + err := enc.Encode(data) + if err != nil { + return nil, err + } + return buf.Bytes(), err +} + +// GobDecode Gob decodes file cache item. +func GobDecode(data []byte, to *FileCacheItem) error { + buf := bytes.NewBuffer(data) + dec := gob.NewDecoder(buf) + return dec.Decode(&to) +} + +func init() { + Register("file", NewFileCache) +} diff --git a/app/utils/cachesecond/cache/memory.go b/app/utils/cachesecond/cache/memory.go new file mode 100644 index 0000000..0cc5015 --- /dev/null +++ b/app/utils/cachesecond/cache/memory.go @@ -0,0 +1,239 @@ +package cache + +import ( + "encoding/json" + "errors" + "sync" + "time" +) + +var ( + // DefaultEvery means the clock time of recycling the expired cache items in memory. + DefaultEvery = 60 // 1 minute +) + +// MemoryItem store memory cache item. +type MemoryItem struct { + val interface{} + createdTime time.Time + lifespan time.Duration +} + +func (mi *MemoryItem) isExpire() bool { + // 0 means forever + if mi.lifespan == 0 { + return false + } + return time.Now().Sub(mi.createdTime) > mi.lifespan +} + +// MemoryCache is Memory cache adapter. +// it contains a RW locker for safe map storage. +type MemoryCache struct { + sync.RWMutex + dur time.Duration + items map[string]*MemoryItem + Every int // run an expiration check Every clock time +} + +// NewMemoryCache returns a new MemoryCache. +func NewMemoryCache() Cache { + cache := MemoryCache{items: make(map[string]*MemoryItem)} + return &cache +} + +// Get cache from memory. +// if non-existed or expired, return nil. +func (bc *MemoryCache) Get(name string) interface{} { + bc.RLock() + defer bc.RUnlock() + if itm, ok := bc.items[name]; ok { + if itm.isExpire() { + return nil + } + return itm.val + } + return nil +} + +// GetMulti gets caches from memory. +// if non-existed or expired, return nil. +func (bc *MemoryCache) GetMulti(names []string) []interface{} { + var rc []interface{} + for _, name := range names { + rc = append(rc, bc.Get(name)) + } + return rc +} + +// Put cache to memory. +// if lifespan is 0, it will be forever till restart. +func (bc *MemoryCache) Put(name string, value interface{}, lifespan time.Duration) error { + bc.Lock() + defer bc.Unlock() + bc.items[name] = &MemoryItem{ + val: value, + createdTime: time.Now(), + lifespan: lifespan, + } + return nil +} + +// Delete cache in memory. +func (bc *MemoryCache) Delete(name string) error { + bc.Lock() + defer bc.Unlock() + if _, ok := bc.items[name]; !ok { + return errors.New("key not exist") + } + delete(bc.items, name) + if _, ok := bc.items[name]; ok { + return errors.New("delete key error") + } + return nil +} + +// Incr increase cache counter in memory. +// it supports int,int32,int64,uint,uint32,uint64. +func (bc *MemoryCache) Incr(key string) error { + bc.RLock() + defer bc.RUnlock() + itm, ok := bc.items[key] + if !ok { + return errors.New("key not exist") + } + switch itm.val.(type) { + case int: + itm.val = itm.val.(int) + 1 + case int32: + itm.val = itm.val.(int32) + 1 + case int64: + itm.val = itm.val.(int64) + 1 + case uint: + itm.val = itm.val.(uint) + 1 + case uint32: + itm.val = itm.val.(uint32) + 1 + case uint64: + itm.val = itm.val.(uint64) + 1 + default: + return errors.New("item val is not (u)int (u)int32 (u)int64") + } + return nil +} + +// Decr decrease counter in memory. +func (bc *MemoryCache) Decr(key string) error { + bc.RLock() + defer bc.RUnlock() + itm, ok := bc.items[key] + if !ok { + return errors.New("key not exist") + } + switch itm.val.(type) { + case int: + itm.val = itm.val.(int) - 1 + case int64: + itm.val = itm.val.(int64) - 1 + case int32: + itm.val = itm.val.(int32) - 1 + case uint: + if itm.val.(uint) > 0 { + itm.val = itm.val.(uint) - 1 + } else { + return errors.New("item val is less than 0") + } + case uint32: + if itm.val.(uint32) > 0 { + itm.val = itm.val.(uint32) - 1 + } else { + return errors.New("item val is less than 0") + } + case uint64: + if itm.val.(uint64) > 0 { + itm.val = itm.val.(uint64) - 1 + } else { + return errors.New("item val is less than 0") + } + default: + return errors.New("item val is not int int64 int32") + } + return nil +} + +// IsExist check cache exist in memory. +func (bc *MemoryCache) IsExist(name string) bool { + bc.RLock() + defer bc.RUnlock() + if v, ok := bc.items[name]; ok { + return !v.isExpire() + } + return false +} + +// ClearAll will delete all cache in memory. +func (bc *MemoryCache) ClearAll() error { + bc.Lock() + defer bc.Unlock() + bc.items = make(map[string]*MemoryItem) + return nil +} + +// StartAndGC start memory cache. it will check expiration in every clock time. +func (bc *MemoryCache) StartAndGC(config string) error { + var cf map[string]int + json.Unmarshal([]byte(config), &cf) + if _, ok := cf["interval"]; !ok { + cf = make(map[string]int) + cf["interval"] = DefaultEvery + } + dur := time.Duration(cf["interval"]) * time.Second + bc.Every = cf["interval"] + bc.dur = dur + go bc.vacuum() + return nil +} + +// check expiration. +func (bc *MemoryCache) vacuum() { + bc.RLock() + every := bc.Every + bc.RUnlock() + + if every < 1 { + return + } + for { + <-time.After(bc.dur) + if bc.items == nil { + return + } + if keys := bc.expiredKeys(); len(keys) != 0 { + bc.clearItems(keys) + } + } +} + +// expiredKeys returns key list which are expired. +func (bc *MemoryCache) expiredKeys() (keys []string) { + bc.RLock() + defer bc.RUnlock() + for key, itm := range bc.items { + if itm.isExpire() { + keys = append(keys, key) + } + } + return +} + +// clearItems removes all the items which key in keys. +func (bc *MemoryCache) clearItems(keys []string) { + bc.Lock() + defer bc.Unlock() + for _, key := range keys { + delete(bc.items, key) + } +} + +func init() { + Register("memory", NewMemoryCache) +} diff --git a/app/utils/cachesecond/redis.go b/app/utils/cachesecond/redis.go new file mode 100644 index 0000000..99c5247 --- /dev/null +++ b/app/utils/cachesecond/redis.go @@ -0,0 +1,406 @@ +package cachesecond + +import ( + "encoding/json" + "errors" + "log" + "strings" + "time" + + redigo "github.com/gomodule/redigo/redis" +) + +// configuration +type Config struct { + Server string + Password string + MaxIdle int // Maximum number of idle connections in the pool. + + // Maximum number of connections allocated by the pool at a given time. + // When zero, there is no limit on the number of connections in the pool. + MaxActive int + + // Close connections after remaining idle for this duration. If the value + // is zero, then idle connections are not closed. Applications should set + // the timeout to a value less than the server's timeout. + IdleTimeout time.Duration + + // If Wait is true and the pool is at the MaxActive limit, then Get() waits + // for a connection to be returned to the pool before returning. + Wait bool + KeyPrefix string // prefix to all keys; example is "dev environment name" + KeyDelimiter string // delimiter to be used while appending keys; example is ":" + KeyPlaceholder string // placeholder to be parsed using given arguments to obtain a final key; example is "?" +} + +var pool *redigo.Pool +var conf *Config + +func NewRedis(addr, pwd string) { + if addr == "" { + panic("\nredis connect string cannot be empty\n") + } + pool = &redigo.Pool{ + MaxIdle: redisMaxIdleConn, + IdleTimeout: redisIdleTTL, + MaxActive: redisMaxActive, + // MaxConnLifetime: redisDialTTL, + Wait: true, + Dial: func() (redigo.Conn, error) { + c, err := redigo.Dial("tcp", addr, + redigo.DialConnectTimeout(redisDialTTL), + redigo.DialReadTimeout(redisReadTTL), + redigo.DialWriteTimeout(redisWriteTTL), + ) + if err != nil { + log.Println("Redis Dial failed: ", err) + return nil, err + } + if pwd != "" { + c.Send("auth", pwd) + } + return c, err + }, + TestOnBorrow: func(c redigo.Conn, t time.Time) error { + _, err := c.Do("PING") + if err != nil { + log.Println("Unable to ping to redis server:", err) + } + return err + }, + } + conn := pool.Get() + defer conn.Close() + if conn.Err() != nil { + println("\nredis connect " + addr + " error: " + conn.Err().Error()) + } else { + println("\nredis connect " + addr + " success!\n") + } +} + +func Do(cmd string, args ...interface{}) (reply interface{}, err error) { + conn := pool.Get() + defer conn.Close() + return conn.Do(cmd, args...) +} + +func GetPool() *redigo.Pool { + return pool +} + +func ParseKey(key string, vars []string) (string, error) { + arr := strings.Split(key, conf.KeyPlaceholder) + actualKey := "" + if len(arr) != len(vars)+1 { + return "", errors.New("redis/connection.go: Insufficient arguments to parse key") + } else { + for index, val := range arr { + if index == 0 { + actualKey = arr[index] + } else { + actualKey += vars[index-1] + val + } + } + } + return getPrefixedKey(actualKey), nil +} + +func getPrefixedKey(key string) string { + return conf.KeyPrefix + conf.KeyDelimiter + key +} +func StripEnvKey(key string) string { + return strings.TrimLeft(key, conf.KeyPrefix+conf.KeyDelimiter) +} +func SplitKey(key string) []string { + return strings.Split(key, conf.KeyDelimiter) +} +func Expire(key string, ttl int) (interface{}, error) { + return Do("EXPIRE", key, ttl) +} +func Persist(key string) (interface{}, error) { + return Do("PERSIST", key) +} + +func Del(key string) (interface{}, error) { + return Do("DEL", key) +} +func Set(key string, data interface{}) (interface{}, error) { + // set + return Do("SET", key, data) +} +func SetNX(key string, data interface{}) (interface{}, error) { + return Do("SETNX", key, data) +} +func SetEx(key string, data interface{}, ttl int) (interface{}, error) { + return Do("SETEX", key, ttl, data) +} + +func SetJson(key string, data interface{}, ttl int) bool { + c, err := json.Marshal(data) + if err != nil { + return false + } + if ttl < 1 { + _, err = Set(key, c) + } else { + _, err = SetEx(key, c, ttl) + } + if err != nil { + return false + } + return true +} + +func GetJson(key string, dst interface{}) error { + b, err := GetBytes(key) + if err != nil { + return err + } + if err = json.Unmarshal(b, dst); err != nil { + return err + } + return nil +} + +func Get(key string) (interface{}, error) { + // get + return Do("GET", key) +} +func GetTTL(key string) (time.Duration, error) { + ttl, err := redigo.Int64(Do("TTL", key)) + return time.Duration(ttl) * time.Second, err +} +func GetBytes(key string) ([]byte, error) { + return redigo.Bytes(Do("GET", key)) +} +func GetString(key string) (string, error) { + return redigo.String(Do("GET", key)) +} +func GetStringMap(key string) (map[string]string, error) { + return redigo.StringMap(Do("GET", key)) +} +func GetInt(key string) (int, error) { + return redigo.Int(Do("GET", key)) +} +func GetInt64(key string) (int64, error) { + return redigo.Int64(Do("GET", key)) +} +func GetStringLength(key string) (int, error) { + return redigo.Int(Do("STRLEN", key)) +} +func ZAdd(key string, score float64, data interface{}) (interface{}, error) { + return Do("ZADD", key, score, data) +} +func ZAddNX(key string, score float64, data interface{}) (interface{}, error) { + return Do("ZADD", key, "NX", score, data) +} +func ZRem(key string, data interface{}) (interface{}, error) { + return Do("ZREM", key, data) +} +func ZRange(key string, start int, end int, withScores bool) ([]interface{}, error) { + if withScores { + return redigo.Values(Do("ZRANGE", key, start, end, "WITHSCORES")) + } + return redigo.Values(Do("ZRANGE", key, start, end)) +} +func ZRemRangeByScore(key string, start int64, end int64) ([]interface{}, error) { + return redigo.Values(Do("ZREMRANGEBYSCORE", key, start, end)) +} +func ZCard(setName string) (int64, error) { + return redigo.Int64(Do("ZCARD", setName)) +} +func ZScan(setName string) (int64, error) { + return redigo.Int64(Do("ZCARD", setName)) +} +func SAdd(setName string, data interface{}) (interface{}, error) { + return Do("SADD", setName, data) +} +func SCard(setName string) (int64, error) { + return redigo.Int64(Do("SCARD", setName)) +} +func SIsMember(setName string, data interface{}) (bool, error) { + return redigo.Bool(Do("SISMEMBER", setName, data)) +} +func SMembers(setName string) ([]string, error) { + return redigo.Strings(Do("SMEMBERS", setName)) +} +func SRem(setName string, data interface{}) (interface{}, error) { + return Do("SREM", setName, data) +} +func HSet(key string, HKey string, data interface{}) (interface{}, error) { + return Do("HSET", key, HKey, data) +} + +func HGet(key string, HKey string) (interface{}, error) { + return Do("HGET", key, HKey) +} + +func HMGet(key string, hashKeys ...string) ([]interface{}, error) { + ret, err := Do("HMGET", key, hashKeys) + if err != nil { + return nil, err + } + reta, ok := ret.([]interface{}) + if !ok { + return nil, errors.New("result not an array") + } + return reta, nil +} + +func HMSet(key string, hashKeys []string, vals []interface{}) (interface{}, error) { + if len(hashKeys) == 0 || len(hashKeys) != len(vals) { + var ret interface{} + return ret, errors.New("bad length") + } + input := []interface{}{key} + for i, v := range hashKeys { + input = append(input, v, vals[i]) + } + return Do("HMSET", input...) +} + +func HGetString(key string, HKey string) (string, error) { + return redigo.String(Do("HGET", key, HKey)) +} +func HGetFloat(key string, HKey string) (float64, error) { + f, err := redigo.Float64(Do("HGET", key, HKey)) + return f, err +} +func HGetInt(key string, HKey string) (int, error) { + return redigo.Int(Do("HGET", key, HKey)) +} +func HGetInt64(key string, HKey string) (int64, error) { + return redigo.Int64(Do("HGET", key, HKey)) +} +func HGetBool(key string, HKey string) (bool, error) { + return redigo.Bool(Do("HGET", key, HKey)) +} +func HDel(key string, HKey string) (interface{}, error) { + return Do("HDEL", key, HKey) +} + +func HGetAll(key string) (map[string]interface{}, error) { + vals, err := redigo.Values(Do("HGETALL", key)) + if err != nil { + return nil, err + } + num := len(vals) / 2 + result := make(map[string]interface{}, num) + for i := 0; i < num; i++ { + key, _ := redigo.String(vals[2*i], nil) + result[key] = vals[2*i+1] + } + return result, nil +} + +func FlushAll() bool { + res, _ := redigo.String(Do("FLUSHALL")) + if res == "" { + return false + } + return true +} + +// NOTE: Use this in production environment with extreme care. +// Read more here:https://redigo.io/commands/keys +func Keys(pattern string) ([]string, error) { + return redigo.Strings(Do("KEYS", pattern)) +} + +func HKeys(key string) ([]string, error) { + return redigo.Strings(Do("HKEYS", key)) +} + +func Exists(key string) bool { + count, err := redigo.Int(Do("EXISTS", key)) + if count == 0 || err != nil { + return false + } + return true +} + +func Incr(key string) (int64, error) { + return redigo.Int64(Do("INCR", key)) +} + +func Decr(key string) (int64, error) { + return redigo.Int64(Do("DECR", key)) +} + +func IncrBy(key string, incBy int64) (int64, error) { + return redigo.Int64(Do("INCRBY", key, incBy)) +} + +func DecrBy(key string, decrBy int64) (int64, error) { + return redigo.Int64(Do("DECRBY", key)) +} + +func IncrByFloat(key string, incBy float64) (float64, error) { + return redigo.Float64(Do("INCRBYFLOAT", key, incBy)) +} + +func DecrByFloat(key string, decrBy float64) (float64, error) { + return redigo.Float64(Do("DECRBYFLOAT", key, decrBy)) +} + +// use for message queue +func LPush(key string, data interface{}) (interface{}, error) { + // set + return Do("LPUSH", key, data) +} + +func LPop(key string) (interface{}, error) { + return Do("LPOP", key) +} + +func LPopString(key string) (string, error) { + return redigo.String(Do("LPOP", key)) +} +func LPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("LPOP", key)) + return f, err +} +func LPopInt(key string) (int, error) { + return redigo.Int(Do("LPOP", key)) +} +func LPopInt64(key string) (int64, error) { + return redigo.Int64(Do("LPOP", key)) +} + +func RPush(key string, data interface{}) (interface{}, error) { + // set + return Do("RPUSH", key, data) +} + +func RPop(key string) (interface{}, error) { + return Do("RPOP", key) +} + +func RPopString(key string) (string, error) { + return redigo.String(Do("RPOP", key)) +} +func RPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("RPOP", key)) + return f, err +} +func RPopInt(key string) (int, error) { + return redigo.Int(Do("RPOP", key)) +} +func RPopInt64(key string) (int64, error) { + return redigo.Int64(Do("RPOP", key)) +} + +func Scan(cursor int64, pattern string, count int64) (int64, []string, error) { + var items []string + var newCursor int64 + + values, err := redigo.Values(Do("SCAN", cursor, "MATCH", pattern, "COUNT", count)) + if err != nil { + return 0, nil, err + } + values, err = redigo.Scan(values, &newCursor, &items) + if err != nil { + return 0, nil, err + } + return newCursor, items, nil +} diff --git a/app/utils/cachesecond/redis_cluster.go b/app/utils/cachesecond/redis_cluster.go new file mode 100644 index 0000000..c86bf55 --- /dev/null +++ b/app/utils/cachesecond/redis_cluster.go @@ -0,0 +1,622 @@ +package cachesecond + +import ( + "strconv" + "time" + + "github.com/go-redis/redis" +) + +var pools *redis.ClusterClient + +func NewRedisCluster(addrs []string) error { + opt := &redis.ClusterOptions{ + Addrs: addrs, + PoolSize: redisPoolSize, + PoolTimeout: redisPoolTTL, + IdleTimeout: redisIdleTTL, + DialTimeout: redisDialTTL, + ReadTimeout: redisReadTTL, + WriteTimeout: redisWriteTTL, + } + pools = redis.NewClusterClient(opt) + if err := pools.Ping().Err(); err != nil { + return err + } + return nil +} + +func RCGet(key string) (interface{}, error) { + res, err := pools.Get(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCSet(key string, value interface{}) error { + err := pools.Set(key, value, 0).Err() + return convertError(err) +} +func RCGetSet(key string, value interface{}) (interface{}, error) { + res, err := pools.GetSet(key, value).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCSetNx(key string, value interface{}) (int64, error) { + res, err := pools.SetNX(key, value, 0).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func RCSetEx(key string, value interface{}, timeout int64) error { + _, err := pools.Set(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + return nil +} + +// nil表示成功,ErrNil表示数据库内已经存在这个key,其他表示数据库发生错误 +func RCSetNxEx(key string, value interface{}, timeout int64) error { + res, err := pools.SetNX(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + if res { + return nil + } + return ErrNil +} +func RCMGet(keys ...string) ([]interface{}, error) { + res, err := pools.MGet(keys...).Result() + return res, convertError(err) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func RCMSet(kvs map[string]interface{}) error { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return err + } + pairs = append(pairs, k, val) + } + return convertError(pools.MSet(pairs).Err()) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func RCMSetNX(kvs map[string]interface{}) (bool, error) { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return false, err + } + pairs = append(pairs, k, val) + } + res, err := pools.MSetNX(pairs).Result() + return res, convertError(err) +} +func RCExpireAt(key string, timestamp int64) (int64, error) { + res, err := pools.ExpireAt(key, time.Unix(timestamp, 0)).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func RCDel(keys ...string) (int64, error) { + args := make([]interface{}, 0, len(keys)) + for _, key := range keys { + args = append(args, key) + } + res, err := pools.Del(keys...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCIncr(key string) (int64, error) { + res, err := pools.Incr(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCIncrBy(key string, delta int64) (int64, error) { + res, err := pools.IncrBy(key, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCExpire(key string, duration int64) (int64, error) { + res, err := pools.Expire(key, time.Duration(duration)*time.Second).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func RCExists(key string) (bool, error) { + res, err := pools.Exists(key).Result() + if err != nil { + return false, convertError(err) + } + if res > 0 { + return true, nil + } + return false, nil +} +func RCHGet(key string, field string) (interface{}, error) { + res, err := pools.HGet(key, field).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCHLen(key string) (int64, error) { + res, err := pools.HLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCHSet(key string, field string, val interface{}) error { + value, err := String(val, nil) + if err != nil && err != ErrNil { + return err + } + _, err = pools.HSet(key, field, value).Result() + if err != nil { + return convertError(err) + } + return nil +} +func RCHDel(key string, fields ...string) (int64, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + res, err := pools.HDel(key, fields...).Result() + if err != nil { + return 0, convertError(err) + } + return res, nil +} + +func RCHMGet(key string, fields ...string) (interface{}, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + if len(fields) == 0 { + return nil, ErrNil + } + res, err := pools.HMGet(key, fields...).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCHMSet(key string, kvs ...interface{}) error { + if len(kvs) == 0 { + return nil + } + if len(kvs)%2 != 0 { + return ErrWrongArgsNum + } + var err error + v := map[string]interface{}{} // todo change + v["field"], err = String(kvs[0], nil) + if err != nil && err != ErrNil { + return err + } + v["value"], err = String(kvs[1], nil) + if err != nil && err != ErrNil { + return err + } + pairs := make([]string, 0, len(kvs)-2) + if len(kvs) > 2 { + for _, kv := range kvs[2:] { + kvString, err := String(kv, nil) + if err != nil && err != ErrNil { + return err + } + pairs = append(pairs, kvString) + } + } + v["paris"] = pairs + _, err = pools.HMSet(key, v).Result() + if err != nil { + return convertError(err) + } + return nil +} + +func RCHKeys(key string) ([]string, error) { + res, err := pools.HKeys(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCHVals(key string) ([]interface{}, error) { + res, err := pools.HVals(key).Result() + if err != nil { + return nil, convertError(err) + } + rs := make([]interface{}, 0, len(res)) + for _, res := range res { + rs = append(rs, res) + } + return rs, nil +} +func RCHGetAll(key string) (map[string]string, error) { + vals, err := pools.HGetAll(key).Result() + if err != nil { + return nil, convertError(err) + } + return vals, nil +} +func RCHIncrBy(key, field string, delta int64) (int64, error) { + res, err := pools.HIncrBy(key, field, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCZAdd(key string, kvs ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(kvs)+1) + args = append(args, key) + args = append(args, kvs...) + if len(kvs) == 0 { + return 0, nil + } + if len(kvs)%2 != 0 { + return 0, ErrWrongArgsNum + } + zs := make([]redis.Z, len(kvs)/2) + for i := 0; i < len(kvs); i += 2 { + idx := i / 2 + score, err := Float64(kvs[i], nil) + if err != nil && err != ErrNil { + return 0, err + } + zs[idx].Score = score + zs[idx].Member = kvs[i+1] + } + res, err := pools.ZAdd(key, zs...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCZRem(key string, members ...string) (int64, error) { + args := make([]interface{}, 0, len(members)) + args = append(args, key) + for _, member := range members { + args = append(args, member) + } + res, err := pools.ZRem(key, members).Result() + if err != nil { + return res, convertError(err) + } + return res, err +} + +func RCZRange(key string, min, max int64, withScores bool) (interface{}, error) { + res := make([]interface{}, 0) + if withScores { + zs, err := pools.ZRangeWithScores(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, z := range zs { + res = append(res, z.Member, strconv.FormatFloat(z.Score, 'f', -1, 64)) + } + } else { + ms, err := pools.ZRange(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, m := range ms { + res = append(res, m) + } + } + return res, nil +} +func RCZRangeByScoreWithScore(key string, min, max int64) (map[string]int64, error) { + opt := new(redis.ZRangeBy) + opt.Min = strconv.FormatInt(int64(min), 10) + opt.Max = strconv.FormatInt(int64(max), 10) + opt.Count = -1 + opt.Offset = 0 + vals, err := pools.ZRangeByScoreWithScores(key, *opt).Result() + if err != nil { + return nil, convertError(err) + } + res := make(map[string]int64, len(vals)) + for _, val := range vals { + key, err := String(val.Member, nil) + if err != nil && err != ErrNil { + return nil, err + } + res[key] = int64(val.Score) + } + return res, nil +} +func RCLRange(key string, start, stop int64) (interface{}, error) { + res, err := pools.LRange(key, start, stop).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCLSet(key string, index int, value interface{}) error { + err := pools.LSet(key, int64(index), value).Err() + return convertError(err) +} +func RCLLen(key string) (int64, error) { + res, err := pools.LLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCLRem(key string, count int, value interface{}) (int, error) { + val, _ := value.(string) + res, err := pools.LRem(key, int64(count), val).Result() + if err != nil { + return int(res), convertError(err) + } + return int(res), nil +} +func RCTTl(key string) (int64, error) { + duration, err := pools.TTL(key).Result() + if err != nil { + return int64(duration.Seconds()), convertError(err) + } + return int64(duration.Seconds()), nil +} +func RCLPop(key string) (interface{}, error) { + res, err := pools.LPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCRPop(key string) (interface{}, error) { + res, err := pools.RPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCBLPop(key string, timeout int) (interface{}, error) { + res, err := pools.BLPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, err + } + return res[1], nil +} +func RCBRPop(key string, timeout int) (interface{}, error) { + res, err := pools.BRPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, convertError(err) + } + return res[1], nil +} +func RCLPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + return err + } + vals = append(vals, val) + } + _, err := pools.LPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} +func RCRPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + if err == ErrNil { + continue + } + return err + } + if val == "" { + continue + } + vals = append(vals, val) + } + _, err := pools.RPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func RCBRPopLPush(srcKey string, destKey string, timeout int) (interface{}, error) { + res, err := pools.BRPopLPush(srcKey, destKey, time.Duration(timeout)*time.Second).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func RCRPopLPush(srcKey string, destKey string) (interface{}, error) { + res, err := pools.RPopLPush(srcKey, destKey).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCSAdd(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := pools.SAdd(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSPop(key string) ([]byte, error) { + res, err := pools.SPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func RCSIsMember(key string, member interface{}) (bool, error) { + m, _ := member.(string) + res, err := pools.SIsMember(key, m).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSRem(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := pools.SRem(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSMembers(key string) ([]string, error) { + res, err := pools.SMembers(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCScriptLoad(luaScript string) (interface{}, error) { + res, err := pools.ScriptLoad(luaScript).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCEvalSha(sha1 string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, sha1, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := pools.EvalSha(sha1, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCEval(luaScript string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, luaScript, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := pools.Eval(luaScript, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func RCGetBit(key string, offset int64) (int64, error) { + res, err := pools.GetBit(key, offset).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func RCSetBit(key string, offset uint32, value int) (int, error) { + res, err := pools.SetBit(key, int64(offset), value).Result() + return int(res), convertError(err) +} +func RCGetClient() *redis.ClusterClient { + return pools +} +func convertError(err error) error { + if err == redis.Nil { + // 为了兼容redis 2.x,这里不返回 ErrNil,ErrNil在调用redis_cluster_reply函数时才返回 + return nil + } + return err +} diff --git a/app/utils/cachesecond/redis_pool.go b/app/utils/cachesecond/redis_pool.go new file mode 100644 index 0000000..501aa27 --- /dev/null +++ b/app/utils/cachesecond/redis_pool.go @@ -0,0 +1,324 @@ +package cachesecond + +import ( + "errors" + "log" + "strings" + "time" + + redigo "github.com/gomodule/redigo/redis" +) + +type RedisPool struct { + *redigo.Pool +} + +func NewRedisPool(cfg *Config) *RedisPool { + return &RedisPool{&redigo.Pool{ + MaxIdle: cfg.MaxIdle, + IdleTimeout: cfg.IdleTimeout, + MaxActive: cfg.MaxActive, + Wait: cfg.Wait, + Dial: func() (redigo.Conn, error) { + c, err := redigo.Dial("tcp", cfg.Server) + if err != nil { + log.Println("Redis Dial failed: ", err) + return nil, err + } + if cfg.Password != "" { + if _, err := c.Do("AUTH", cfg.Password); err != nil { + c.Close() + log.Println("Redis AUTH failed: ", err) + return nil, err + } + } + return c, err + }, + TestOnBorrow: func(c redigo.Conn, t time.Time) error { + _, err := c.Do("PING") + if err != nil { + log.Println("Unable to ping to redis server:", err) + } + return err + }, + }} +} + +func (p *RedisPool) Do(cmd string, args ...interface{}) (reply interface{}, err error) { + conn := pool.Get() + defer conn.Close() + return conn.Do(cmd, args...) +} + +func (p *RedisPool) GetPool() *redigo.Pool { + return pool +} + +func (p *RedisPool) ParseKey(key string, vars []string) (string, error) { + arr := strings.Split(key, conf.KeyPlaceholder) + actualKey := "" + if len(arr) != len(vars)+1 { + return "", errors.New("redis/connection.go: Insufficient arguments to parse key") + } else { + for index, val := range arr { + if index == 0 { + actualKey = arr[index] + } else { + actualKey += vars[index-1] + val + } + } + } + return getPrefixedKey(actualKey), nil +} + +func (p *RedisPool) getPrefixedKey(key string) string { + return conf.KeyPrefix + conf.KeyDelimiter + key +} +func (p *RedisPool) StripEnvKey(key string) string { + return strings.TrimLeft(key, conf.KeyPrefix+conf.KeyDelimiter) +} +func (p *RedisPool) SplitKey(key string) []string { + return strings.Split(key, conf.KeyDelimiter) +} +func (p *RedisPool) Expire(key string, ttl int) (interface{}, error) { + return Do("EXPIRE", key, ttl) +} +func (p *RedisPool) Persist(key string) (interface{}, error) { + return Do("PERSIST", key) +} + +func (p *RedisPool) Del(key string) (interface{}, error) { + return Do("DEL", key) +} +func (p *RedisPool) Set(key string, data interface{}) (interface{}, error) { + // set + return Do("SET", key, data) +} +func (p *RedisPool) SetNX(key string, data interface{}) (interface{}, error) { + return Do("SETNX", key, data) +} +func (p *RedisPool) SetEx(key string, data interface{}, ttl int) (interface{}, error) { + return Do("SETEX", key, ttl, data) +} +func (p *RedisPool) Get(key string) (interface{}, error) { + // get + return Do("GET", key) +} +func (p *RedisPool) GetStringMap(key string) (map[string]string, error) { + // get + return redigo.StringMap(Do("GET", key)) +} + +func (p *RedisPool) GetTTL(key string) (time.Duration, error) { + ttl, err := redigo.Int64(Do("TTL", key)) + return time.Duration(ttl) * time.Second, err +} +func (p *RedisPool) GetBytes(key string) ([]byte, error) { + return redigo.Bytes(Do("GET", key)) +} +func (p *RedisPool) GetString(key string) (string, error) { + return redigo.String(Do("GET", key)) +} +func (p *RedisPool) GetInt(key string) (int, error) { + return redigo.Int(Do("GET", key)) +} +func (p *RedisPool) GetStringLength(key string) (int, error) { + return redigo.Int(Do("STRLEN", key)) +} +func (p *RedisPool) ZAdd(key string, score float64, data interface{}) (interface{}, error) { + return Do("ZADD", key, score, data) +} +func (p *RedisPool) ZRem(key string, data interface{}) (interface{}, error) { + return Do("ZREM", key, data) +} +func (p *RedisPool) ZRange(key string, start int, end int, withScores bool) ([]interface{}, error) { + if withScores { + return redigo.Values(Do("ZRANGE", key, start, end, "WITHSCORES")) + } + return redigo.Values(Do("ZRANGE", key, start, end)) +} +func (p *RedisPool) SAdd(setName string, data interface{}) (interface{}, error) { + return Do("SADD", setName, data) +} +func (p *RedisPool) SCard(setName string) (int64, error) { + return redigo.Int64(Do("SCARD", setName)) +} +func (p *RedisPool) SIsMember(setName string, data interface{}) (bool, error) { + return redigo.Bool(Do("SISMEMBER", setName, data)) +} +func (p *RedisPool) SMembers(setName string) ([]string, error) { + return redigo.Strings(Do("SMEMBERS", setName)) +} +func (p *RedisPool) SRem(setName string, data interface{}) (interface{}, error) { + return Do("SREM", setName, data) +} +func (p *RedisPool) HSet(key string, HKey string, data interface{}) (interface{}, error) { + return Do("HSET", key, HKey, data) +} + +func (p *RedisPool) HGet(key string, HKey string) (interface{}, error) { + return Do("HGET", key, HKey) +} + +func (p *RedisPool) HMGet(key string, hashKeys ...string) ([]interface{}, error) { + ret, err := Do("HMGET", key, hashKeys) + if err != nil { + return nil, err + } + reta, ok := ret.([]interface{}) + if !ok { + return nil, errors.New("result not an array") + } + return reta, nil +} + +func (p *RedisPool) HMSet(key string, hashKeys []string, vals []interface{}) (interface{}, error) { + if len(hashKeys) == 0 || len(hashKeys) != len(vals) { + var ret interface{} + return ret, errors.New("bad length") + } + input := []interface{}{key} + for i, v := range hashKeys { + input = append(input, v, vals[i]) + } + return Do("HMSET", input...) +} + +func (p *RedisPool) HGetString(key string, HKey string) (string, error) { + return redigo.String(Do("HGET", key, HKey)) +} +func (p *RedisPool) HGetFloat(key string, HKey string) (float64, error) { + f, err := redigo.Float64(Do("HGET", key, HKey)) + return float64(f), err +} +func (p *RedisPool) HGetInt(key string, HKey string) (int, error) { + return redigo.Int(Do("HGET", key, HKey)) +} +func (p *RedisPool) HGetInt64(key string, HKey string) (int64, error) { + return redigo.Int64(Do("HGET", key, HKey)) +} +func (p *RedisPool) HGetBool(key string, HKey string) (bool, error) { + return redigo.Bool(Do("HGET", key, HKey)) +} +func (p *RedisPool) HDel(key string, HKey string) (interface{}, error) { + return Do("HDEL", key, HKey) +} +func (p *RedisPool) HGetAll(key string) (map[string]interface{}, error) { + vals, err := redigo.Values(Do("HGETALL", key)) + if err != nil { + return nil, err + } + num := len(vals) / 2 + result := make(map[string]interface{}, num) + for i := 0; i < num; i++ { + key, _ := redigo.String(vals[2*i], nil) + result[key] = vals[2*i+1] + } + return result, nil +} + +// NOTE: Use this in production environment with extreme care. +// Read more here:https://redigo.io/commands/keys +func (p *RedisPool) Keys(pattern string) ([]string, error) { + return redigo.Strings(Do("KEYS", pattern)) +} + +func (p *RedisPool) HKeys(key string) ([]string, error) { + return redigo.Strings(Do("HKEYS", key)) +} + +func (p *RedisPool) Exists(key string) (bool, error) { + count, err := redigo.Int(Do("EXISTS", key)) + if count == 0 { + return false, err + } else { + return true, err + } +} + +func (p *RedisPool) Incr(key string) (int64, error) { + return redigo.Int64(Do("INCR", key)) +} + +func (p *RedisPool) Decr(key string) (int64, error) { + return redigo.Int64(Do("DECR", key)) +} + +func (p *RedisPool) IncrBy(key string, incBy int64) (int64, error) { + return redigo.Int64(Do("INCRBY", key, incBy)) +} + +func (p *RedisPool) DecrBy(key string, decrBy int64) (int64, error) { + return redigo.Int64(Do("DECRBY", key)) +} + +func (p *RedisPool) IncrByFloat(key string, incBy float64) (float64, error) { + return redigo.Float64(Do("INCRBYFLOAT", key, incBy)) +} + +func (p *RedisPool) DecrByFloat(key string, decrBy float64) (float64, error) { + return redigo.Float64(Do("DECRBYFLOAT", key, decrBy)) +} + +// use for message queue +func (p *RedisPool) LPush(key string, data interface{}) (interface{}, error) { + // set + return Do("LPUSH", key, data) +} + +func (p *RedisPool) LPop(key string) (interface{}, error) { + return Do("LPOP", key) +} + +func (p *RedisPool) LPopString(key string) (string, error) { + return redigo.String(Do("LPOP", key)) +} +func (p *RedisPool) LPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("LPOP", key)) + return float64(f), err +} +func (p *RedisPool) LPopInt(key string) (int, error) { + return redigo.Int(Do("LPOP", key)) +} +func (p *RedisPool) LPopInt64(key string) (int64, error) { + return redigo.Int64(Do("LPOP", key)) +} + +func (p *RedisPool) RPush(key string, data interface{}) (interface{}, error) { + // set + return Do("RPUSH", key, data) +} + +func (p *RedisPool) RPop(key string) (interface{}, error) { + return Do("RPOP", key) +} + +func (p *RedisPool) RPopString(key string) (string, error) { + return redigo.String(Do("RPOP", key)) +} +func (p *RedisPool) RPopFloat(key string) (float64, error) { + f, err := redigo.Float64(Do("RPOP", key)) + return float64(f), err +} +func (p *RedisPool) RPopInt(key string) (int, error) { + return redigo.Int(Do("RPOP", key)) +} +func (p *RedisPool) RPopInt64(key string) (int64, error) { + return redigo.Int64(Do("RPOP", key)) +} + +func (p *RedisPool) Scan(cursor int64, pattern string, count int64) (int64, []string, error) { + var items []string + var newCursor int64 + + values, err := redigo.Values(Do("SCAN", cursor, "MATCH", pattern, "COUNT", count)) + if err != nil { + return 0, nil, err + } + values, err = redigo.Scan(values, &newCursor, &items) + if err != nil { + return 0, nil, err + } + + return newCursor, items, nil +} diff --git a/app/utils/cachesecond/redis_pool_cluster.go b/app/utils/cachesecond/redis_pool_cluster.go new file mode 100644 index 0000000..30ea8ac --- /dev/null +++ b/app/utils/cachesecond/redis_pool_cluster.go @@ -0,0 +1,617 @@ +package cachesecond + +import ( + "strconv" + "time" + + "github.com/go-redis/redis" +) + +type RedisClusterPool struct { + client *redis.ClusterClient +} + +func NewRedisClusterPool(addrs []string) (*RedisClusterPool, error) { + opt := &redis.ClusterOptions{ + Addrs: addrs, + PoolSize: 512, + PoolTimeout: 10 * time.Second, + IdleTimeout: 10 * time.Second, + DialTimeout: 10 * time.Second, + ReadTimeout: 3 * time.Second, + WriteTimeout: 3 * time.Second, + } + c := redis.NewClusterClient(opt) + if err := c.Ping().Err(); err != nil { + return nil, err + } + return &RedisClusterPool{client: c}, nil +} + +func (p *RedisClusterPool) Get(key string) (interface{}, error) { + res, err := p.client.Get(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) Set(key string, value interface{}) error { + err := p.client.Set(key, value, 0).Err() + return convertError(err) +} +func (p *RedisClusterPool) GetSet(key string, value interface{}) (interface{}, error) { + res, err := p.client.GetSet(key, value).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) SetNx(key string, value interface{}) (int64, error) { + res, err := p.client.SetNX(key, value, 0).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func (p *RedisClusterPool) SetEx(key string, value interface{}, timeout int64) error { + _, err := p.client.Set(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + return nil +} + +// nil表示成功,ErrNil表示数据库内已经存在这个key,其他表示数据库发生错误 +func (p *RedisClusterPool) SetNxEx(key string, value interface{}, timeout int64) error { + res, err := p.client.SetNX(key, value, time.Duration(timeout)*time.Second).Result() + if err != nil { + return convertError(err) + } + if res { + return nil + } + return ErrNil +} +func (p *RedisClusterPool) MGet(keys ...string) ([]interface{}, error) { + res, err := p.client.MGet(keys...).Result() + return res, convertError(err) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func (p *RedisClusterPool) MSet(kvs map[string]interface{}) error { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return err + } + pairs = append(pairs, k, val) + } + return convertError(p.client.MSet(pairs).Err()) +} + +// 为确保多个key映射到同一个slot,每个key最好加上hash tag,如:{test} +func (p *RedisClusterPool) MSetNX(kvs map[string]interface{}) (bool, error) { + pairs := make([]string, 0, len(kvs)*2) + for k, v := range kvs { + val, err := String(v, nil) + if err != nil { + return false, err + } + pairs = append(pairs, k, val) + } + res, err := p.client.MSetNX(pairs).Result() + return res, convertError(err) +} +func (p *RedisClusterPool) ExpireAt(key string, timestamp int64) (int64, error) { + res, err := p.client.ExpireAt(key, time.Unix(timestamp, 0)).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func (p *RedisClusterPool) Del(keys ...string) (int64, error) { + args := make([]interface{}, 0, len(keys)) + for _, key := range keys { + args = append(args, key) + } + res, err := p.client.Del(keys...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) Incr(key string) (int64, error) { + res, err := p.client.Incr(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) IncrBy(key string, delta int64) (int64, error) { + res, err := p.client.IncrBy(key, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) Expire(key string, duration int64) (int64, error) { + res, err := p.client.Expire(key, time.Duration(duration)*time.Second).Result() + if err != nil { + return 0, convertError(err) + } + if res { + return 1, nil + } + return 0, nil +} +func (p *RedisClusterPool) Exists(key string) (bool, error) { // todo (bool, error) + res, err := p.client.Exists(key).Result() + if err != nil { + return false, convertError(err) + } + if res > 0 { + return true, nil + } + return false, nil +} +func (p *RedisClusterPool) HGet(key string, field string) (interface{}, error) { + res, err := p.client.HGet(key, field).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) HLen(key string) (int64, error) { + res, err := p.client.HLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) HSet(key string, field string, val interface{}) error { + value, err := String(val, nil) + if err != nil && err != ErrNil { + return err + } + _, err = p.client.HSet(key, field, value).Result() + if err != nil { + return convertError(err) + } + return nil +} +func (p *RedisClusterPool) HDel(key string, fields ...string) (int64, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + res, err := p.client.HDel(key, fields...).Result() + if err != nil { + return 0, convertError(err) + } + return res, nil +} + +func (p *RedisClusterPool) HMGet(key string, fields ...string) (interface{}, error) { + args := make([]interface{}, 0, len(fields)+1) + args = append(args, key) + for _, field := range fields { + args = append(args, field) + } + if len(fields) == 0 { + return nil, ErrNil + } + res, err := p.client.HMGet(key, fields...).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) HMSet(key string, kvs ...interface{}) error { + if len(kvs) == 0 { + return nil + } + if len(kvs)%2 != 0 { + return ErrWrongArgsNum + } + var err error + v := map[string]interface{}{} // todo change + v["field"], err = String(kvs[0], nil) + if err != nil && err != ErrNil { + return err + } + v["value"], err = String(kvs[1], nil) + if err != nil && err != ErrNil { + return err + } + pairs := make([]string, 0, len(kvs)-2) + if len(kvs) > 2 { + for _, kv := range kvs[2:] { + kvString, err := String(kv, nil) + if err != nil && err != ErrNil { + return err + } + pairs = append(pairs, kvString) + } + } + v["paris"] = pairs + _, err = p.client.HMSet(key, v).Result() + if err != nil { + return convertError(err) + } + return nil +} + +func (p *RedisClusterPool) HKeys(key string) ([]string, error) { + res, err := p.client.HKeys(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) HVals(key string) ([]interface{}, error) { + res, err := p.client.HVals(key).Result() + if err != nil { + return nil, convertError(err) + } + rs := make([]interface{}, 0, len(res)) + for _, res := range res { + rs = append(rs, res) + } + return rs, nil +} +func (p *RedisClusterPool) HGetAll(key string) (map[string]string, error) { + vals, err := p.client.HGetAll(key).Result() + if err != nil { + return nil, convertError(err) + } + return vals, nil +} +func (p *RedisClusterPool) HIncrBy(key, field string, delta int64) (int64, error) { + res, err := p.client.HIncrBy(key, field, delta).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) ZAdd(key string, kvs ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(kvs)+1) + args = append(args, key) + args = append(args, kvs...) + if len(kvs) == 0 { + return 0, nil + } + if len(kvs)%2 != 0 { + return 0, ErrWrongArgsNum + } + zs := make([]redis.Z, len(kvs)/2) + for i := 0; i < len(kvs); i += 2 { + idx := i / 2 + score, err := Float64(kvs[i], nil) + if err != nil && err != ErrNil { + return 0, err + } + zs[idx].Score = score + zs[idx].Member = kvs[i+1] + } + res, err := p.client.ZAdd(key, zs...).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) ZRem(key string, members ...string) (int64, error) { + args := make([]interface{}, 0, len(members)) + args = append(args, key) + for _, member := range members { + args = append(args, member) + } + res, err := p.client.ZRem(key, members).Result() + if err != nil { + return res, convertError(err) + } + return res, err +} + +func (p *RedisClusterPool) ZRange(key string, min, max int64, withScores bool) (interface{}, error) { + res := make([]interface{}, 0) + if withScores { + zs, err := p.client.ZRangeWithScores(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, z := range zs { + res = append(res, z.Member, strconv.FormatFloat(z.Score, 'f', -1, 64)) + } + } else { + ms, err := p.client.ZRange(key, min, max).Result() + if err != nil { + return nil, convertError(err) + } + for _, m := range ms { + res = append(res, m) + } + } + return res, nil +} +func (p *RedisClusterPool) ZRangeByScoreWithScore(key string, min, max int64) (map[string]int64, error) { + opt := new(redis.ZRangeBy) + opt.Min = strconv.FormatInt(int64(min), 10) + opt.Max = strconv.FormatInt(int64(max), 10) + opt.Count = -1 + opt.Offset = 0 + vals, err := p.client.ZRangeByScoreWithScores(key, *opt).Result() + if err != nil { + return nil, convertError(err) + } + res := make(map[string]int64, len(vals)) + for _, val := range vals { + key, err := String(val.Member, nil) + if err != nil && err != ErrNil { + return nil, err + } + res[key] = int64(val.Score) + } + return res, nil +} +func (p *RedisClusterPool) LRange(key string, start, stop int64) (interface{}, error) { + res, err := p.client.LRange(key, start, stop).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) LSet(key string, index int, value interface{}) error { + err := p.client.LSet(key, int64(index), value).Err() + return convertError(err) +} +func (p *RedisClusterPool) LLen(key string) (int64, error) { + res, err := p.client.LLen(key).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) LRem(key string, count int, value interface{}) (int, error) { + val, _ := value.(string) + res, err := p.client.LRem(key, int64(count), val).Result() + if err != nil { + return int(res), convertError(err) + } + return int(res), nil +} +func (p *RedisClusterPool) TTl(key string) (int64, error) { + duration, err := p.client.TTL(key).Result() + if err != nil { + return int64(duration.Seconds()), convertError(err) + } + return int64(duration.Seconds()), nil +} +func (p *RedisClusterPool) LPop(key string) (interface{}, error) { + res, err := p.client.LPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) RPop(key string) (interface{}, error) { + res, err := p.client.RPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) BLPop(key string, timeout int) (interface{}, error) { + res, err := p.client.BLPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, err + } + return res[1], nil +} +func (p *RedisClusterPool) BRPop(key string, timeout int) (interface{}, error) { + res, err := p.client.BRPop(time.Duration(timeout)*time.Second, key).Result() + if err != nil { + // 兼容redis 2.x + if err == redis.Nil { + return nil, ErrNil + } + return nil, convertError(err) + } + return res[1], nil +} +func (p *RedisClusterPool) LPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + return err + } + vals = append(vals, val) + } + _, err := p.client.LPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} +func (p *RedisClusterPool) RPush(key string, value ...interface{}) error { + args := make([]interface{}, 0, len(value)+1) + args = append(args, key) + args = append(args, value...) + vals := make([]string, 0, len(value)) + for _, v := range value { + val, err := String(v, nil) + if err != nil && err != ErrNil { + if err == ErrNil { + continue + } + return err + } + if val == "" { + continue + } + vals = append(vals, val) + } + _, err := p.client.RPush(key, vals).Result() // todo ... + if err != nil { + return convertError(err) + } + return nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func (p *RedisClusterPool) BRPopLPush(srcKey string, destKey string, timeout int) (interface{}, error) { + res, err := p.client.BRPopLPush(srcKey, destKey, time.Duration(timeout)*time.Second).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} + +// 为确保srcKey跟destKey映射到同一个slot,srcKey和destKey需要加上hash tag,如:{test} +func (p *RedisClusterPool) RPopLPush(srcKey string, destKey string) (interface{}, error) { + res, err := p.client.RPopLPush(srcKey, destKey).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SAdd(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := p.client.SAdd(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SPop(key string) ([]byte, error) { + res, err := p.client.SPop(key).Result() + if err != nil { + return nil, convertError(err) + } + return []byte(res), nil +} +func (p *RedisClusterPool) SIsMember(key string, member interface{}) (bool, error) { + m, _ := member.(string) + res, err := p.client.SIsMember(key, m).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SRem(key string, members ...interface{}) (int64, error) { + args := make([]interface{}, 0, len(members)+1) + args = append(args, key) + args = append(args, members...) + ms := make([]string, 0, len(members)) + for _, member := range members { + m, err := String(member, nil) + if err != nil && err != ErrNil { + return 0, err + } + ms = append(ms, m) + } + res, err := p.client.SRem(key, ms).Result() // todo ... + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SMembers(key string) ([]string, error) { + res, err := p.client.SMembers(key).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) ScriptLoad(luaScript string) (interface{}, error) { + res, err := p.client.ScriptLoad(luaScript).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) EvalSha(sha1 string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, sha1, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := p.client.EvalSha(sha1, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) Eval(luaScript string, numberKeys int, keysArgs ...interface{}) (interface{}, error) { + vals := make([]interface{}, 0, len(keysArgs)+2) + vals = append(vals, luaScript, numberKeys) + vals = append(vals, keysArgs...) + keys := make([]string, 0, numberKeys) + args := make([]string, 0, len(keysArgs)-numberKeys) + for i, value := range keysArgs { + val, err := String(value, nil) + if err != nil && err != ErrNil { + return nil, err + } + if i < numberKeys { + keys = append(keys, val) + } else { + args = append(args, val) + } + } + res, err := p.client.Eval(luaScript, keys, args).Result() + if err != nil { + return nil, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) GetBit(key string, offset int64) (int64, error) { + res, err := p.client.GetBit(key, offset).Result() + if err != nil { + return res, convertError(err) + } + return res, nil +} +func (p *RedisClusterPool) SetBit(key string, offset uint32, value int) (int, error) { + res, err := p.client.SetBit(key, int64(offset), value).Result() + return int(res), convertError(err) +} +func (p *RedisClusterPool) GetClient() *redis.ClusterClient { + return pools +} diff --git a/app/utils/convert.go b/app/utils/convert.go new file mode 100644 index 0000000..4b88b99 --- /dev/null +++ b/app/utils/convert.go @@ -0,0 +1,434 @@ +package utils + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git/utils" + "encoding/binary" + "encoding/json" + "fmt" + "github.com/gin-gonic/gin" + "math" + "strconv" + "strings" +) + +func ToString(raw interface{}, e error) (res string) { + if e != nil { + return "" + } + return AnyToString(raw) +} + +func ToInt64(raw interface{}, e error) int64 { + if e != nil { + return 0 + } + return AnyToInt64(raw) +} + +func Float64ToStrPrec4(f float64) string { + return strconv.FormatFloat(f, 'f', 4, 64) +} +func AnyToBool(raw interface{}) bool { + switch i := raw.(type) { + case float32, float64, int, int64, uint, uint8, uint16, uint32, uint64, int8, int16, int32: + return i != 0 + case []byte: + return i != nil + case string: + if i == "false" { + return false + } + return i != "" + case error: + return false + case nil: + return true + } + val := fmt.Sprint(raw) + val = strings.TrimLeft(val, "&") + if strings.TrimLeft(val, "{}") == "" { + return false + } + if strings.TrimLeft(val, "[]") == "" { + return false + } + // ptr type + b, err := json.Marshal(raw) + if err != nil { + return false + } + if strings.TrimLeft(string(b), "\"\"") == "" { + return false + } + if strings.TrimLeft(string(b), "{}") == "" { + return false + } + return true +} + +func AnyToInt64(raw interface{}) int64 { + switch i := raw.(type) { + case string: + res, _ := strconv.ParseInt(i, 10, 64) + return res + case []byte: + return BytesToInt64(i) + case int: + return int64(i) + case int64: + return i + case uint: + return int64(i) + case uint8: + return int64(i) + case uint16: + return int64(i) + case uint32: + return int64(i) + case uint64: + return int64(i) + case int8: + return int64(i) + case int16: + return int64(i) + case int32: + return int64(i) + case float32: + return int64(i) + case float64: + return int64(i) + case error: + return 0 + case bool: + if i { + return 1 + } + return 0 + } + return 0 +} + +func AnyToString(raw interface{}) string { + switch i := raw.(type) { + case []byte: + return string(i) + case int: + return strconv.FormatInt(int64(i), 10) + case int64: + return strconv.FormatInt(i, 10) + case float32: + return Float64ToStr(float64(i)) + case float64: + return Float64ToStr(i) + case uint: + return strconv.FormatInt(int64(i), 10) + case uint8: + return strconv.FormatInt(int64(i), 10) + case uint16: + return strconv.FormatInt(int64(i), 10) + case uint32: + return strconv.FormatInt(int64(i), 10) + case uint64: + return strconv.FormatInt(int64(i), 10) + case int8: + return strconv.FormatInt(int64(i), 10) + case int16: + return strconv.FormatInt(int64(i), 10) + case int32: + return strconv.FormatInt(int64(i), 10) + case string: + return i + case error: + return i.Error() + case bool: + return strconv.FormatBool(i) + } + return fmt.Sprintf("%#v", raw) +} + +func AnyToFloat64(raw interface{}) float64 { + switch i := raw.(type) { + case []byte: + f, _ := strconv.ParseFloat(string(i), 64) + return f + case int: + return float64(i) + case int64: + return float64(i) + case float32: + return float64(i) + case float64: + return i + case uint: + return float64(i) + case uint8: + return float64(i) + case uint16: + return float64(i) + case uint32: + return float64(i) + case uint64: + return float64(i) + case int8: + return float64(i) + case int16: + return float64(i) + case int32: + return float64(i) + case string: + f, _ := strconv.ParseFloat(i, 64) + return f + case bool: + if i { + return 1 + } + } + return 0 +} + +func ToByte(raw interface{}, e error) []byte { + if e != nil { + return []byte{} + } + switch i := raw.(type) { + case string: + return []byte(i) + case int: + return Int64ToBytes(int64(i)) + case int64: + return Int64ToBytes(i) + case float32: + return Float32ToByte(i) + case float64: + return Float64ToByte(i) + case uint: + return Int64ToBytes(int64(i)) + case uint8: + return Int64ToBytes(int64(i)) + case uint16: + return Int64ToBytes(int64(i)) + case uint32: + return Int64ToBytes(int64(i)) + case uint64: + return Int64ToBytes(int64(i)) + case int8: + return Int64ToBytes(int64(i)) + case int16: + return Int64ToBytes(int64(i)) + case int32: + return Int64ToBytes(int64(i)) + case []byte: + return i + case error: + return []byte(i.Error()) + case bool: + if i { + return []byte("true") + } + return []byte("false") + } + return []byte(fmt.Sprintf("%#v", raw)) +} + +func Int64ToBytes(i int64) []byte { + var buf = make([]byte, 8) + binary.BigEndian.PutUint64(buf, uint64(i)) + return buf +} + +func BytesToInt64(buf []byte) int64 { + return int64(binary.BigEndian.Uint64(buf)) +} + +func StrToInt(s string) int { + res, _ := strconv.Atoi(s) + return res +} + +func StrToInt64(s string) int64 { + res, _ := strconv.ParseInt(s, 10, 64) + return res +} + +func Float32ToByte(float float32) []byte { + bits := math.Float32bits(float) + bytes := make([]byte, 4) + binary.LittleEndian.PutUint32(bytes, bits) + + return bytes +} + +func ByteToFloat32(bytes []byte) float32 { + bits := binary.LittleEndian.Uint32(bytes) + return math.Float32frombits(bits) +} + +func Float64ToByte(float float64) []byte { + bits := math.Float64bits(float) + bytes := make([]byte, 8) + binary.LittleEndian.PutUint64(bytes, bits) + return bytes +} + +func ByteToFloat64(bytes []byte) float64 { + bits := binary.LittleEndian.Uint64(bytes) + return math.Float64frombits(bits) +} + +func Float64ToStr(f float64) string { + return strconv.FormatFloat(f, 'f', 2, 64) +} +func Float64ToStrPrec1(f float64) string { + return strconv.FormatFloat(f, 'f', 1, 64) +} +func Float64ToStrByPrec(f float64, prec int) string { + return strconv.FormatFloat(f, 'f', prec, 64) +} +func Float32ToStrByPrec(f float32, prec int) string { + return Float64ToStrByPrec(float64(f), prec) +} +func GetFloatByOne(count, num, mul float64, prec int) string { + + return Float64ToStrByPrec(float64(int(float64(count)/num*mul))/mul, prec) +} + +func Float32ToStr(f float32) string { + return Float64ToStr(float64(f)) +} + +func StrToFloat64(s string) float64 { + res, err := strconv.ParseFloat(s, 64) + if err != nil { + return 0 + } + return res +} +func StrToFormatByType(c *gin.Context, s string, types string) string { + commPrec := "2" + if types == "commission" { + commPrec = c.GetString("commission_prec") + } + if types == "integral" { + commPrec = c.GetString("integral_prec") + } + if s == "" { + s = "0" + } + s = StrToFormat(c, s, utils.StrToInt(commPrec)) + ex := strings.Split(s, ".") + if len(ex) == 2 && c.GetString("is_show_point") != "1" { + if utils.StrToFloat64(ex[1]) == 0 { + s = ex[0] + } else { + val := utils.Float64ToStrByPrec(utils.StrToFloat64(ex[1]), 0) + keyMax := 0 + for i := 0; i < len(val); i++ { + ch := string(val[i]) + fmt.Println(utils.StrToInt(ch)) + if utils.StrToInt(ch) > 0 { + keyMax = i + } + } + valNew := val[0 : keyMax+1] + s = ex[0] + "." + strings.ReplaceAll(ex[1], val, valNew) + } + } + return s +} +func StrToFormat(c *gin.Context, s string, prec int) string { + ex := strings.Split(s, ".") + if len(ex) == 2 { + if StrToFloat64(ex[1]) == 0 && c.GetString("is_show_point") != "1" { //小数点后面为空就是不要小数点了 + return ex[0] + } + //看取多少位 + str := ex[1] + str1 := str + if prec < len(str) { + str1 = str[0:prec] + } else { + for i := 0; i < prec-len(str); i++ { + str1 += "0" + } + } + if prec > 0 { + return ex[0] + "." + str1 + } else { + return ex[0] + } + } + return s +} +func StrToFormatEg(s string, prec int, is_show_point string) string { + ex := strings.Split(s, ".") + if len(ex) == 2 { + if StrToFloat64(ex[1]) == 0 && is_show_point != "1" { //小数点后面为空就是不要小数点了 + return ex[0] + } + //看取多少位 + str := ex[1] + str1 := str + if prec < len(str) { + str1 = str[0:prec] + } else { + for i := 0; i < prec-len(str); i++ { + str1 += "0" + } + } + if prec > 0 { + return ex[0] + "." + str1 + } else { + return ex[0] + } + } + return s +} + +func StrToFloat32(s string) float32 { + res, err := strconv.ParseFloat(s, 32) + if err != nil { + return 0 + } + return float32(res) +} + +func StrToBool(s string) bool { + b, _ := strconv.ParseBool(s) + return b +} + +func BoolToStr(b bool) string { + if b { + return "true" + } + return "false" +} + +func FloatToInt64(f float64) int64 { + return int64(f) +} + +func IntToStr(i int) string { + return strconv.Itoa(i) +} + +func Int64ToStr(i int64) string { + return strconv.FormatInt(i, 10) +} + +func IntToFloat64(i int) float64 { + s := strconv.Itoa(i) + res, err := strconv.ParseFloat(s, 64) + if err != nil { + return 0 + } + return res +} +func Int64ToFloat64(i int64) float64 { + s := strconv.FormatInt(i, 10) + res, err := strconv.ParseFloat(s, 64) + if err != nil { + return 0 + } + return res +} diff --git a/app/utils/crypto.go b/app/utils/crypto.go new file mode 100644 index 0000000..56289c5 --- /dev/null +++ b/app/utils/crypto.go @@ -0,0 +1,19 @@ +package utils + +import ( + "crypto/md5" + "encoding/base64" + "fmt" +) + +func GetMd5(raw []byte) string { + h := md5.New() + h.Write(raw) + return fmt.Sprintf("%x", h.Sum(nil)) +} + +func GetBase64Md5(raw []byte) string { + h := md5.New() + h.Write(raw) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} diff --git a/app/utils/curl.go b/app/utils/curl.go new file mode 100644 index 0000000..0a45607 --- /dev/null +++ b/app/utils/curl.go @@ -0,0 +1,209 @@ +package utils + +import ( + "bytes" + "crypto/tls" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "sort" + "strings" + "time" +) + +var CurlDebug bool + +func CurlGet(router string, header map[string]string) ([]byte, error) { + return curl(http.MethodGet, router, nil, header) +} +func CurlGetJson(router string, body interface{}, header map[string]string) ([]byte, error) { + return curl_new(http.MethodGet, router, body, header) +} + +// 只支持form 与json 提交, 请留意body的类型, 支持string, []byte, map[string]string +func CurlPost(router string, body interface{}, header map[string]string) ([]byte, error) { + return curl(http.MethodPost, router, body, header) +} + +func CurlPut(router string, body interface{}, header map[string]string) ([]byte, error) { + return curl(http.MethodPut, router, body, header) +} + +// 只支持form 与json 提交, 请留意body的类型, 支持string, []byte, map[string]string +func CurlPatch(router string, body interface{}, header map[string]string) ([]byte, error) { + return curl(http.MethodPatch, router, body, header) +} + +// CurlDelete is curl delete +func CurlDelete(router string, body interface{}, header map[string]string) ([]byte, error) { + return curl(http.MethodDelete, router, body, header) +} + +func curl(method, router string, body interface{}, header map[string]string) ([]byte, error) { + var reqBody io.Reader + contentType := "application/json" + switch v := body.(type) { + case string: + reqBody = strings.NewReader(v) + case []byte: + reqBody = bytes.NewReader(v) + case map[string]string: + val := url.Values{} + for k, v := range v { + val.Set(k, v) + } + reqBody = strings.NewReader(val.Encode()) + contentType = "application/x-www-form-urlencoded" + case map[string]interface{}: + val := url.Values{} + for k, v := range v { + val.Set(k, v.(string)) + } + reqBody = strings.NewReader(val.Encode()) + contentType = "application/x-www-form-urlencoded" + } + if header == nil { + header = map[string]string{"Content-Type": contentType} + } + if _, ok := header["Content-Type"]; !ok { + header["Content-Type"] = contentType + } + resp, er := CurlReq(method, router, reqBody, header) + if er != nil { + return nil, er + } + res, err := ioutil.ReadAll(resp.Body) + if CurlDebug { + blob := SerializeStr(body) + if contentType != "application/json" { + blob = HttpBuild(body) + } + fmt.Printf("\n\n=====================\n[url]: %s\n[time]: %s\n[method]: %s\n[content-type]: %v\n[req_header]: %s\n[req_body]: %#v\n[resp_err]: %v\n[resp_header]: %v\n[resp_body]: %v\n=====================\n\n", + router, + time.Now().Format("2006-01-02 15:04:05.000"), + method, + contentType, + HttpBuildQuery(header), + blob, + err, + SerializeStr(resp.Header), + string(res), + ) + } + resp.Body.Close() + return res, err +} + +func curl_new(method, router string, body interface{}, header map[string]string) ([]byte, error) { + var reqBody io.Reader + contentType := "application/json" + + if header == nil { + header = map[string]string{"Content-Type": contentType} + } + if _, ok := header["Content-Type"]; !ok { + header["Content-Type"] = contentType + } + resp, er := CurlReq(method, router, reqBody, header) + if er != nil { + return nil, er + } + res, err := ioutil.ReadAll(resp.Body) + if CurlDebug { + blob := SerializeStr(body) + if contentType != "application/json" { + blob = HttpBuild(body) + } + fmt.Printf("\n\n=====================\n[url]: %s\n[time]: %s\n[method]: %s\n[content-type]: %v\n[req_header]: %s\n[req_body]: %#v\n[resp_err]: %v\n[resp_header]: %v\n[resp_body]: %v\n=====================\n\n", + router, + time.Now().Format("2006-01-02 15:04:05.000"), + method, + contentType, + HttpBuildQuery(header), + blob, + err, + SerializeStr(resp.Header), + string(res), + ) + } + resp.Body.Close() + return res, err +} + +func CurlReq(method, router string, reqBody io.Reader, header map[string]string) (*http.Response, error) { + req, _ := http.NewRequest(method, router, reqBody) + if header != nil { + for k, v := range header { + req.Header.Set(k, v) + } + } + // 绕过github等可能因为特征码返回503问题 + // https://www.imwzk.com/posts/2021-03-14-why-i-always-get-503-with-golang/ + defaultCipherSuites := []uint16{0xc02f, 0xc030, 0xc02b, 0xc02c, 0xcca8, 0xcca9, 0xc013, 0xc009, + 0xc014, 0xc00a, 0x009c, 0x009d, 0x002f, 0x0035, 0xc012, 0x000a} + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + CipherSuites: append(defaultCipherSuites[8:], defaultCipherSuites[:8]...), + }, + }, + // 获取301重定向 + CheckRedirect: func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + }, + } + return client.Do(req) +} + +// 组建get请求参数,sortAsc true为小到大,false为大到小,nil不排序 a=123&b=321 +func HttpBuildQuery(args map[string]string, sortAsc ...bool) string { + str := "" + if len(args) == 0 { + return str + } + if len(sortAsc) > 0 { + keys := make([]string, 0, len(args)) + for k := range args { + keys = append(keys, k) + } + if sortAsc[0] { + sort.Strings(keys) + } else { + sort.Sort(sort.Reverse(sort.StringSlice(keys))) + } + for _, k := range keys { + str += "&" + k + "=" + args[k] + } + } else { + for k, v := range args { + str += "&" + k + "=" + v + } + } + return str[1:] +} + +func HttpBuild(body interface{}, sortAsc ...bool) string { + params := map[string]string{} + if args, ok := body.(map[string]interface{}); ok { + for k, v := range args { + params[k] = AnyToString(v) + } + return HttpBuildQuery(params, sortAsc...) + } + if args, ok := body.(map[string]string); ok { + for k, v := range args { + params[k] = AnyToString(v) + } + return HttpBuildQuery(params, sortAsc...) + } + if args, ok := body.(map[string]int); ok { + for k, v := range args { + params[k] = AnyToString(v) + } + return HttpBuildQuery(params, sortAsc...) + } + return AnyToString(body) +} diff --git a/app/utils/debug.go b/app/utils/debug.go new file mode 100644 index 0000000..bb2e9d3 --- /dev/null +++ b/app/utils/debug.go @@ -0,0 +1,25 @@ +package utils + +import ( + "fmt" + "os" + "strconv" + "time" +) + +func Debug(args ...interface{}) { + s := "" + l := len(args) + if l < 1 { + fmt.Println("please input some data") + os.Exit(0) + } + i := 1 + for _, v := range args { + s += fmt.Sprintf("【"+strconv.Itoa(i)+"】: %#v\n", v) + i++ + } + s = "******************** 【DEBUG - " + time.Now().Format("2006-01-02 15:04:05") + "】 ********************\n" + s + "******************** 【DEBUG - END】 ********************\n" + fmt.Println(s) + os.Exit(0) +} diff --git a/app/utils/distance.go b/app/utils/distance.go new file mode 100644 index 0000000..2a6923b --- /dev/null +++ b/app/utils/distance.go @@ -0,0 +1,16 @@ +package utils + +import "math" + +//返回单位为:千米 +func GetDistance(lat1, lat2, lng1, lng2 float64) float64 { + radius := 6371000.0 //6378137.0 + rad := math.Pi / 180.0 + lat1 = lat1 * rad + lng1 = lng1 * rad + lat2 = lat2 * rad + lng2 = lng2 * rad + theta := lng2 - lng1 + dist := math.Acos(math.Sin(lat1)*math.Sin(lat2) + math.Cos(lat1)*math.Cos(lat2)*math.Cos(theta)) + return dist * radius / 1000 +} diff --git a/app/utils/duplicate.go b/app/utils/duplicate.go new file mode 100644 index 0000000..17cea88 --- /dev/null +++ b/app/utils/duplicate.go @@ -0,0 +1,37 @@ +package utils + +func RemoveDuplicateString(elms []string) []string { + res := make([]string, 0, len(elms)) + temp := map[string]struct{}{} + for _, item := range elms { + if _, ok := temp[item]; !ok { + temp[item] = struct{}{} + res = append(res, item) + } + } + return res +} + +func RemoveDuplicateInt(elms []int) []int { + res := make([]int, 0, len(elms)) + temp := map[int]struct{}{} + for _, item := range elms { + if _, ok := temp[item]; !ok { + temp[item] = struct{}{} + res = append(res, item) + } + } + return res +} + +func RemoveDuplicateInt64(elms []int64) []int64 { + res := make([]int64, 0, len(elms)) + temp := map[int64]struct{}{} + for _, item := range elms { + if _, ok := temp[item]; !ok { + temp[item] = struct{}{} + res = append(res, item) + } + } + return res +} diff --git a/app/utils/file.go b/app/utils/file.go new file mode 100644 index 0000000..93ed08f --- /dev/null +++ b/app/utils/file.go @@ -0,0 +1,22 @@ +package utils + +import ( + "os" + "path" + "strings" + "time" +) + +// 获取文件后缀 +func FileExt(fname string) string { + return strings.ToLower(strings.TrimLeft(path.Ext(fname), ".")) +} + +func FilePutContents(fileName string, content string) { + fd, _ := os.OpenFile("./tmp/"+fileName+".log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) + fd_time := time.Now().Format("2006-01-02 15:04:05") + fd_content := strings.Join([]string{"[", fd_time, "] ", content, "\n"}, "") + buf := []byte(fd_content) + fd.Write(buf) + fd.Close() +} diff --git a/app/utils/file_and_dir.go b/app/utils/file_and_dir.go new file mode 100644 index 0000000..93141f9 --- /dev/null +++ b/app/utils/file_and_dir.go @@ -0,0 +1,29 @@ +package utils + +import "os" + +// 判断所给路径文件、文件夹是否存在 +func Exists(path string) bool { + _, err := os.Stat(path) //os.Stat获取文件信息 + if err != nil { + if os.IsExist(err) { + return true + } + return false + } + return true +} + +// 判断所给路径是否为文件夹 +func IsDir(path string) bool { + s, err := os.Stat(path) + if err != nil { + return false + } + return s.IsDir() +} + +// 判断所给路径是否为文件 +func IsFile(path string) bool { + return !IsDir(path) +} diff --git a/app/utils/format.go b/app/utils/format.go new file mode 100644 index 0000000..55fa4ac --- /dev/null +++ b/app/utils/format.go @@ -0,0 +1,197 @@ +package utils + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git/utils" + "fmt" + "github.com/gin-gonic/gin" + "math" + "strings" +) + +func CouponFormat(c *gin.Context, data string) string { + switch data { + case "0.00", "0", "": + return "" + default: + return GetPrec(c, data, "2") + } +} +func GetPrec(c *gin.Context, sum, commPrec string) string { + if sum == "" { + sum = "0" + } + sum = StrToFormat(c, sum, utils.StrToInt(commPrec)) + ex := strings.Split(sum, ".") + if len(ex) == 2 && c.GetString("is_show_point") != "1" { + if utils.StrToFloat64(ex[1]) == 0 { + sum = ex[0] + } else { + val := utils.Float64ToStrByPrec(utils.StrToFloat64(ex[1]), 0) + keyMax := 0 + for i := 0; i < len(val); i++ { + ch := string(val[i]) + fmt.Println(utils.StrToInt(ch)) + if utils.StrToInt(ch) > 0 { + keyMax = i + } + } + valNew := val[0 : keyMax+1] + sum = ex[0] + "." + strings.ReplaceAll(ex[1], val, valNew) + } + } + return sum +} + +func CommissionFormat(data string) string { + if StrToFloat64(data) > 0 { + return data + } + + return "" +} + +func HideString(src string, hLen int) string { + str := []rune(src) + if hLen == 0 { + hLen = 4 + } + hideStr := "" + for i := 0; i < hLen; i++ { + hideStr += "*" + } + hideLen := len(str) / 2 + showLen := len(str) - hideLen + if hideLen == 0 || showLen == 0 { + return hideStr + } + subLen := showLen / 2 + if subLen == 0 { + return string(str[:showLen]) + hideStr + } + s := string(str[:subLen]) + s += hideStr + s += string(str[len(str)-subLen:]) + return s +} + +// SaleCountFormat is 格式化销量 +func SaleCountFormat(s string) string { + s = strings.ReplaceAll(s, "+", "") + if strings.Contains(s, "万") { + s = strings.ReplaceAll(s, "万", "") + s = Float64ToStrByPrec(StrToFloat64(s)*10000, 0) + } + ex := strings.Split(s, ".") + if len(ex) == 2 && StrToInt(ex[1]) == 0 { + s = ex[0] + } + if utils.StrToInt(s) > 0 { + s = Comm(s) + return "已售" + s + } + return "已售0" +} +func SaleCountFormat2(s string) string { + s = strings.ReplaceAll(s, "+", "") + if strings.Contains(s, "万") { + s = strings.ReplaceAll(s, "万", "") + s = Float64ToStrByPrec(StrToFloat64(s)*10000, 0) + } + ex := strings.Split(s, ".") + if len(ex) == 2 && StrToInt(ex[1]) == 0 { + s = ex[0] + } + if utils.StrToInt(s) > 0 { + s = Comm(s) + + return s + } + return "0" +} +func SaleCountFormat1(s string) string { + s = strings.ReplaceAll(s, "+", "") + if strings.Contains(s, "万") { + s = strings.ReplaceAll(s, "万", "") + s = Float64ToStrByPrec(StrToFloat64(s)*10000, 0) + } + ex := strings.Split(s, ".") + if len(ex) == 2 && StrToInt(ex[1]) == 0 { + s = ex[0] + } + if utils.StrToInt(s) > 0 { + s = Comm(s) + return s + } + return "0" +} +func Comm(s string) string { + ex := strings.Split(s, ".") + if len(ex) == 2 && StrToInt(ex[1]) == 0 { + s = ex[0] + } + if utils.StrToInt(s) >= 10000 { + num := FloatFormat(StrToFloat64(s)/10000, 2) + numStr := Float64ToStr(num) + ex := strings.Split(numStr, ".") + if len(ex) == 2 { + if utils.StrToFloat64(ex[1]) == 0 { + numStr = ex[0] + } else { + val := utils.Float64ToStrByPrec(utils.StrToFloat64(ex[1]), 0) + keyMax := 0 + for i := 0; i < len(val); i++ { + ch := string(val[i]) + fmt.Println(utils.StrToInt(ch)) + if utils.StrToInt(ch) > 0 { + keyMax = i + } + } + valNew := val[0 : keyMax+1] + numStr = ex[0] + "." + strings.ReplaceAll(ex[1], val, valNew) + } + } + s = numStr + "万" + } + //if StrToInt(s) >= 10000000 { + // num := FloatFormat(StrToFloat64(s)/10000000, 2) + // numStr := Float64ToStr(num) + // ex := strings.Split(numStr, ".") + // if len(ex) == 2 { + // if utils.StrToFloat64(ex[1]) == 0 { + // numStr = ex[0] + // } else { + // val := utils.Float64ToStrByPrec(utils.StrToFloat64(ex[1]), 0) + // keyMax := 0 + // for i := 0; i < len(val); i++ { + // ch := string(val[i]) + // fmt.Println(utils.StrToInt(ch)) + // if utils.StrToInt(ch) > 0 { + // keyMax = i + // } + // } + // valNew := val[0 : keyMax+1] + // numStr = ex[0] + "." + strings.ReplaceAll(ex[1], val, valNew) + // } + // } + // s = numStr + "千万" + //} + return s +} +func CommissionFormat1(numStr string) string { + split := strings.Split(numStr, ".") + if len(split) == 2 { + if split[1] == "00" { + numStr = strings.ReplaceAll(numStr, ".00", "") + } + } + return numStr +} + +// 小数格式化 +func FloatFormat(f float64, i int) float64 { + if i > 14 { + return f + } + p := math.Pow10(i) + return float64(int64((f+0.000000000000009)*p)) / p +} diff --git a/app/utils/json.go b/app/utils/json.go new file mode 100644 index 0000000..2905833 --- /dev/null +++ b/app/utils/json.go @@ -0,0 +1,37 @@ +package utils + +import ( + "bytes" + "encoding/json" + "regexp" +) + +func JsonMarshal(interface{}) { + +} + +// 不科学计数法 +func JsonDecode(data []byte, v interface{}) error { + d := json.NewDecoder(bytes.NewReader(data)) + d.UseNumber() + return d.Decode(v) +} + +// json字符串驼峰命名格式 转为 下划线命名格式 +// c :json字符串 +func MarshalJSONCamelCase2JsonSnakeCase(c string) []byte { + // Regexp definitions + var keyMatchRegex = regexp.MustCompile(`\"(\w+)\":`) + var wordBarrierRegex = regexp.MustCompile(`(\w)([A-Z])`) + marshalled := []byte(c) + converted := keyMatchRegex.ReplaceAllFunc( + marshalled, + func(match []byte) []byte { + return bytes.ToLower(wordBarrierRegex.ReplaceAll( + match, + []byte(`${1}_${2}`), + )) + }, + ) + return converted +} diff --git a/app/utils/logx/log.go b/app/utils/logx/log.go new file mode 100644 index 0000000..ca11223 --- /dev/null +++ b/app/utils/logx/log.go @@ -0,0 +1,245 @@ +package logx + +import ( + "os" + "strings" + "time" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +type LogConfig struct { + AppName string `yaml:"app_name" json:"app_name" toml:"app_name"` + Level string `yaml:"level" json:"level" toml:"level"` + StacktraceLevel string `yaml:"stacktrace_level" json:"stacktrace_level" toml:"stacktrace_level"` + IsStdOut bool `yaml:"is_stdout" json:"is_stdout" toml:"is_stdout"` + TimeFormat string `yaml:"time_format" json:"time_format" toml:"time_format"` // second, milli, nano, standard, iso, + Encoding string `yaml:"encoding" json:"encoding" toml:"encoding"` // console, json + Skip int `yaml:"skip" json:"skip" toml:"skip"` + + IsFileOut bool `yaml:"is_file_out" json:"is_file_out" toml:"is_file_out"` + FileDir string `yaml:"file_dir" json:"file_dir" toml:"file_dir"` + FileName string `yaml:"file_name" json:"file_name" toml:"file_name"` + FileMaxSize int `yaml:"file_max_size" json:"file_max_size" toml:"file_max_size"` + FileMaxAge int `yaml:"file_max_age" json:"file_max_age" toml:"file_max_age"` +} + +var ( + l *LogX = defaultLogger() + conf *LogConfig +) + +// default logger setting +func defaultLogger() *LogX { + conf = &LogConfig{ + Level: "debug", + StacktraceLevel: "error", + IsStdOut: true, + TimeFormat: "standard", + Encoding: "console", + Skip: 2, + } + writers := []zapcore.WriteSyncer{os.Stdout} + lg, lv := newZapLogger(setLogLevel(conf.Level), setLogLevel(conf.StacktraceLevel), conf.Encoding, conf.TimeFormat, conf.Skip, zapcore.NewMultiWriteSyncer(writers...)) + zap.RedirectStdLog(lg) + return &LogX{logger: lg, atomLevel: lv} +} + +// initial standard log, if you don't init, it will use default logger setting +func InitDefaultLogger(cfg *LogConfig) { + var writers []zapcore.WriteSyncer + if cfg.IsStdOut || (!cfg.IsStdOut && !cfg.IsFileOut) { + writers = append(writers, os.Stdout) + } + if cfg.IsFileOut { + writers = append(writers, NewRollingFile(cfg.FileDir, cfg.FileName, cfg.FileMaxSize, cfg.FileMaxAge)) + } + + lg, lv := newZapLogger(setLogLevel(cfg.Level), setLogLevel(cfg.StacktraceLevel), cfg.Encoding, cfg.TimeFormat, cfg.Skip, zapcore.NewMultiWriteSyncer(writers...)) + zap.RedirectStdLog(lg) + if cfg.AppName != "" { + lg = lg.With(zap.String("app", cfg.AppName)) // 加上应用名称 + } + l = &LogX{logger: lg, atomLevel: lv} +} + +// create a new logger +func NewLogger(cfg *LogConfig) *LogX { + var writers []zapcore.WriteSyncer + if cfg.IsStdOut || (!cfg.IsStdOut && !cfg.IsFileOut) { + writers = append(writers, os.Stdout) + } + if cfg.IsFileOut { + writers = append(writers, NewRollingFile(cfg.FileDir, cfg.FileName, cfg.FileMaxSize, cfg.FileMaxAge)) + } + + lg, lv := newZapLogger(setLogLevel(cfg.Level), setLogLevel(cfg.StacktraceLevel), cfg.Encoding, cfg.TimeFormat, cfg.Skip, zapcore.NewMultiWriteSyncer(writers...)) + zap.RedirectStdLog(lg) + if cfg.AppName != "" { + lg = lg.With(zap.String("app", cfg.AppName)) // 加上应用名称 + } + return &LogX{logger: lg, atomLevel: lv} +} + +// create a new zaplog logger +func newZapLogger(level, stacktrace zapcore.Level, encoding, timeType string, skip int, output zapcore.WriteSyncer) (*zap.Logger, *zap.AtomicLevel) { + encCfg := zapcore.EncoderConfig{ + TimeKey: "T", + LevelKey: "L", + NameKey: "N", + CallerKey: "C", + MessageKey: "M", + StacktraceKey: "S", + LineEnding: zapcore.DefaultLineEnding, + EncodeCaller: zapcore.ShortCallerEncoder, + EncodeDuration: zapcore.NanosDurationEncoder, + EncodeLevel: zapcore.LowercaseLevelEncoder, + } + setTimeFormat(timeType, &encCfg) // set time type + atmLvl := zap.NewAtomicLevel() // set level + atmLvl.SetLevel(level) + encoder := zapcore.NewJSONEncoder(encCfg) // 确定encoder格式 + if encoding == "console" { + encoder = zapcore.NewConsoleEncoder(encCfg) + } + return zap.New(zapcore.NewCore(encoder, output, atmLvl), zap.AddCaller(), zap.AddStacktrace(stacktrace), zap.AddCallerSkip(skip)), &atmLvl +} + +// set log level +func setLogLevel(lvl string) zapcore.Level { + switch strings.ToLower(lvl) { + case "panic": + return zapcore.PanicLevel + case "fatal": + return zapcore.FatalLevel + case "error": + return zapcore.ErrorLevel + case "warn", "warning": + return zapcore.WarnLevel + case "info": + return zapcore.InfoLevel + default: + return zapcore.DebugLevel + } +} + +// set time format +func setTimeFormat(timeType string, z *zapcore.EncoderConfig) { + switch strings.ToLower(timeType) { + case "iso": // iso8601 standard + z.EncodeTime = zapcore.ISO8601TimeEncoder + case "sec": // only for unix second, without millisecond + z.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendInt64(t.Unix()) + } + case "second": // unix second, with millisecond + z.EncodeTime = zapcore.EpochTimeEncoder + case "milli", "millisecond": // millisecond + z.EncodeTime = zapcore.EpochMillisTimeEncoder + case "nano", "nanosecond": // nanosecond + z.EncodeTime = zapcore.EpochNanosTimeEncoder + default: // standard format + z.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString(t.Format("2006-01-02 15:04:05.000")) + } + } +} + +func GetLevel() string { + switch l.atomLevel.Level() { + case zapcore.PanicLevel: + return "panic" + case zapcore.FatalLevel: + return "fatal" + case zapcore.ErrorLevel: + return "error" + case zapcore.WarnLevel: + return "warn" + case zapcore.InfoLevel: + return "info" + default: + return "debug" + } +} + +func SetLevel(lvl string) { + l.atomLevel.SetLevel(setLogLevel(lvl)) +} + +// temporary add call skip +func AddCallerSkip(skip int) *LogX { + l.logger.WithOptions(zap.AddCallerSkip(skip)) + return l +} + +// permanent add call skip +func AddDepth(skip int) *LogX { + l.logger = l.logger.WithOptions(zap.AddCallerSkip(skip)) + return l +} + +// permanent add options +func AddOptions(opts ...zap.Option) *LogX { + l.logger = l.logger.WithOptions(opts...) + return l +} + +func AddField(k string, v interface{}) { + l.logger.With(zap.Any(k, v)) +} + +func AddFields(fields map[string]interface{}) *LogX { + for k, v := range fields { + l.logger.With(zap.Any(k, v)) + } + return l +} + +// Normal log +func Debug(e interface{}, args ...interface{}) error { + return l.Debug(e, args...) +} +func Info(e interface{}, args ...interface{}) error { + return l.Info(e, args...) +} +func Warn(e interface{}, args ...interface{}) error { + return l.Warn(e, args...) +} +func Error(e interface{}, args ...interface{}) error { + return l.Error(e, args...) +} +func Panic(e interface{}, args ...interface{}) error { + return l.Panic(e, args...) +} +func Fatal(e interface{}, args ...interface{}) error { + return l.Fatal(e, args...) +} + +// Format logs +func Debugf(format string, args ...interface{}) error { + return l.Debugf(format, args...) +} +func Infof(format string, args ...interface{}) error { + return l.Infof(format, args...) +} +func Warnf(format string, args ...interface{}) error { + return l.Warnf(format, args...) +} +func Errorf(format string, args ...interface{}) error { + return l.Errorf(format, args...) +} +func Panicf(format string, args ...interface{}) error { + return l.Panicf(format, args...) +} +func Fatalf(format string, args ...interface{}) error { + return l.Fatalf(format, args...) +} + +func formatFieldMap(m FieldMap) []Field { + var res []Field + for k, v := range m { + res = append(res, zap.Any(k, v)) + } + return res +} diff --git a/app/utils/logx/output.go b/app/utils/logx/output.go new file mode 100644 index 0000000..ef33f0b --- /dev/null +++ b/app/utils/logx/output.go @@ -0,0 +1,105 @@ +package logx + +import ( + "bytes" + "io" + "os" + "path/filepath" + "time" + + "gopkg.in/natefinch/lumberjack.v2" +) + +// output interface +type WriteSyncer interface { + io.Writer + Sync() error +} + +// split writer +func NewRollingFile(dir, filename string, maxSize, MaxAge int) WriteSyncer { + s, err := os.Stat(dir) + if err != nil || !s.IsDir() { + os.RemoveAll(dir) + if err := os.MkdirAll(dir, 0766); err != nil { + panic(err) + } + } + return newLumberjackWriteSyncer(&lumberjack.Logger{ + Filename: filepath.Join(dir, filename), + MaxSize: maxSize, // megabytes, MB + MaxAge: MaxAge, // days + LocalTime: true, + Compress: false, + }) +} + +type lumberjackWriteSyncer struct { + *lumberjack.Logger + buf *bytes.Buffer + logChan chan []byte + closeChan chan interface{} + maxSize int +} + +func newLumberjackWriteSyncer(l *lumberjack.Logger) *lumberjackWriteSyncer { + ws := &lumberjackWriteSyncer{ + Logger: l, + buf: bytes.NewBuffer([]byte{}), + logChan: make(chan []byte, 5000), + closeChan: make(chan interface{}), + maxSize: 1024, + } + go ws.run() + return ws +} + +func (l *lumberjackWriteSyncer) run() { + ticker := time.NewTicker(1 * time.Second) + + for { + select { + case <-ticker.C: + if l.buf.Len() > 0 { + l.sync() + } + case bs := <-l.logChan: + _, err := l.buf.Write(bs) + if err != nil { + continue + } + if l.buf.Len() > l.maxSize { + l.sync() + } + case <-l.closeChan: + l.sync() + return + } + } +} + +func (l *lumberjackWriteSyncer) Stop() { + close(l.closeChan) +} + +func (l *lumberjackWriteSyncer) Write(bs []byte) (int, error) { + b := make([]byte, len(bs)) + for i, c := range bs { + b[i] = c + } + l.logChan <- b + return 0, nil +} + +func (l *lumberjackWriteSyncer) Sync() error { + return nil +} + +func (l *lumberjackWriteSyncer) sync() error { + defer l.buf.Reset() + _, err := l.Logger.Write(l.buf.Bytes()) + if err != nil { + return err + } + return nil +} diff --git a/app/utils/logx/sugar.go b/app/utils/logx/sugar.go new file mode 100644 index 0000000..ab380fc --- /dev/null +++ b/app/utils/logx/sugar.go @@ -0,0 +1,192 @@ +package logx + +import ( + "errors" + "fmt" + "strconv" + + "go.uber.org/zap" +) + +type LogX struct { + logger *zap.Logger + atomLevel *zap.AtomicLevel +} + +type Field = zap.Field +type FieldMap map[string]interface{} + +// 判断其他类型--start +func getFields(msg string, format bool, args ...interface{}) (string, []Field) { + var str []interface{} + var fields []zap.Field + if len(args) > 0 { + for _, v := range args { + if f, ok := v.(Field); ok { + fields = append(fields, f) + } else if f, ok := v.(FieldMap); ok { + fields = append(fields, formatFieldMap(f)...) + } else { + str = append(str, AnyToString(v)) + } + } + if format { + return fmt.Sprintf(msg, str...), fields + } + str = append([]interface{}{msg}, str...) + return fmt.Sprintln(str...), fields + } + return msg, []Field{} +} + +func (l *LogX) Debug(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.Debug(msg, field...) + } + return e +} +func (l *LogX) Info(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.Info(msg, field...) + } + return e +} +func (l *LogX) Warn(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.Warn(msg, field...) + } + return e +} +func (l *LogX) Error(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.Error(msg, field...) + } + return e +} +func (l *LogX) DPanic(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.DPanic(msg, field...) + } + return e +} +func (l *LogX) Panic(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.Panic(msg, field...) + } + return e +} +func (l *LogX) Fatal(s interface{}, args ...interface{}) error { + es, e := checkErr(s) + if es != "" { + msg, field := getFields(es, false, args...) + l.logger.Fatal(msg, field...) + } + return e +} + +func checkErr(s interface{}) (string, error) { + switch e := s.(type) { + case error: + return e.Error(), e + case string: + return e, errors.New(e) + case []byte: + return string(e), nil + default: + return "", nil + } +} + +func (l *LogX) LogError(err error) error { + return l.Error(err.Error()) +} + +func (l *LogX) Debugf(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.Debug(s, f...) + return errors.New(s) +} + +func (l *LogX) Infof(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.Info(s, f...) + return errors.New(s) +} + +func (l *LogX) Warnf(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.Warn(s, f...) + return errors.New(s) +} + +func (l *LogX) Errorf(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.Error(s, f...) + return errors.New(s) +} + +func (l *LogX) DPanicf(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.DPanic(s, f...) + return errors.New(s) +} + +func (l *LogX) Panicf(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.Panic(s, f...) + return errors.New(s) +} + +func (l *LogX) Fatalf(msg string, args ...interface{}) error { + s, f := getFields(msg, true, args...) + l.logger.Fatal(s, f...) + return errors.New(s) +} + +func AnyToString(raw interface{}) string { + switch i := raw.(type) { + case []byte: + return string(i) + case int: + return strconv.FormatInt(int64(i), 10) + case int64: + return strconv.FormatInt(i, 10) + case float32: + return strconv.FormatFloat(float64(i), 'f', 2, 64) + case float64: + return strconv.FormatFloat(i, 'f', 2, 64) + case uint: + return strconv.FormatInt(int64(i), 10) + case uint8: + return strconv.FormatInt(int64(i), 10) + case uint16: + return strconv.FormatInt(int64(i), 10) + case uint32: + return strconv.FormatInt(int64(i), 10) + case uint64: + return strconv.FormatInt(int64(i), 10) + case int8: + return strconv.FormatInt(int64(i), 10) + case int16: + return strconv.FormatInt(int64(i), 10) + case int32: + return strconv.FormatInt(int64(i), 10) + case string: + return i + case error: + return i.Error() + } + return fmt.Sprintf("%#v", raw) +} diff --git a/app/utils/map_and_struct.go b/app/utils/map_and_struct.go new file mode 100644 index 0000000..34904ce --- /dev/null +++ b/app/utils/map_and_struct.go @@ -0,0 +1,341 @@ +package utils + +import ( + "encoding/json" + "fmt" + "reflect" + "strconv" + "strings" +) + +func Map2Struct(vals map[string]interface{}, dst interface{}) (err error) { + return Map2StructByTag(vals, dst, "json") +} + +func Map2StructByTag(vals map[string]interface{}, dst interface{}, structTag string) (err error) { + defer func() { + e := recover() + if e != nil { + if v, ok := e.(error); ok { + err = fmt.Errorf("Panic: %v", v.Error()) + } else { + err = fmt.Errorf("Panic: %v", e) + } + } + }() + + pt := reflect.TypeOf(dst) + pv := reflect.ValueOf(dst) + + if pv.Kind() != reflect.Ptr || pv.Elem().Kind() != reflect.Struct { + return fmt.Errorf("not a pointer of struct") + } + + var f reflect.StructField + var ft reflect.Type + var fv reflect.Value + + for i := 0; i < pt.Elem().NumField(); i++ { + f = pt.Elem().Field(i) + fv = pv.Elem().Field(i) + ft = f.Type + + if f.Anonymous || !fv.CanSet() { + continue + } + + tag := f.Tag.Get(structTag) + + name, option := parseTag(tag) + + if name == "-" { + continue + } + + if name == "" { + name = strings.ToLower(f.Name) + } + val, ok := vals[name] + + if !ok { + if option == "required" { + return fmt.Errorf("'%v' not found", name) + } + if len(option) != 0 { + val = option // default value + } else { + //fv.Set(reflect.Zero(ft)) // TODO set zero value or just ignore it? + continue + } + } + + // convert or set value to field + vv := reflect.ValueOf(val) + vt := reflect.TypeOf(val) + + if vt.Kind() != reflect.String { + // try to assign and convert + if vt.AssignableTo(ft) { + fv.Set(vv) + continue + } + + if vt.ConvertibleTo(ft) { + fv.Set(vv.Convert(ft)) + continue + } + + return fmt.Errorf("value type not match: field=%v(%v) value=%v(%v)", f.Name, ft.Kind(), val, vt.Kind()) + } + s := strings.TrimSpace(vv.String()) + if len(s) == 0 && option == "required" { + return fmt.Errorf("value of required argument can't not be empty") + } + fk := ft.Kind() + + // convert string to value + if fk == reflect.Ptr && ft.Elem().Kind() == reflect.String { + fv.Set(reflect.ValueOf(&s)) + continue + } + if fk == reflect.Ptr || fk == reflect.Struct { + err = convertJsonValue(s, name, fv) + } else if fk == reflect.Slice { + err = convertSlice(s, f.Name, ft, fv) + } else { + err = convertValue(fk, s, f.Name, fv) + } + + if err != nil { + return err + } + continue + } + + return nil +} + +func Struct2Map(s interface{}) map[string]interface{} { + return Struct2MapByTag(s, "json") +} +func Struct2MapByTag(s interface{}, tagName string) map[string]interface{} { + t := reflect.TypeOf(s) + v := reflect.ValueOf(s) + + if v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Struct { + t = t.Elem() + v = v.Elem() + } + + if v.Kind() != reflect.Struct { + return nil + } + + m := make(map[string]interface{}) + + for i := 0; i < t.NumField(); i++ { + fv := v.Field(i) + ft := t.Field(i) + + if !fv.CanInterface() { + continue + } + + if ft.PkgPath != "" { // unexported + continue + } + + var name string + var option string + tag := ft.Tag.Get(tagName) + if tag != "" { + ts := strings.Split(tag, ",") + if len(ts) == 1 { + name = ts[0] + } else if len(ts) > 1 { + name = ts[0] + option = ts[1] + } + if name == "-" { + continue // skip this field + } + if name == "" { + name = strings.ToLower(ft.Name) + } + if option == "omitempty" { + if isEmpty(&fv) { + continue // skip empty field + } + } + } else { + name = strings.ToLower(ft.Name) + } + + if ft.Anonymous && fv.Kind() == reflect.Ptr && fv.IsNil() { + continue + } + if (ft.Anonymous && fv.Kind() == reflect.Struct) || + (ft.Anonymous && fv.Kind() == reflect.Ptr && fv.Elem().Kind() == reflect.Struct) { + + // embedded struct + embedded := Struct2MapByTag(fv.Interface(), tagName) + for embName, embValue := range embedded { + m[embName] = embValue + } + } else if option == "string" { + kind := fv.Kind() + if kind == reflect.Int || kind == reflect.Int8 || kind == reflect.Int16 || kind == reflect.Int32 || kind == reflect.Int64 { + m[name] = strconv.FormatInt(fv.Int(), 10) + } else if kind == reflect.Uint || kind == reflect.Uint8 || kind == reflect.Uint16 || kind == reflect.Uint32 || kind == reflect.Uint64 { + m[name] = strconv.FormatUint(fv.Uint(), 10) + } else if kind == reflect.Float32 || kind == reflect.Float64 { + m[name] = strconv.FormatFloat(fv.Float(), 'f', 2, 64) + } else { + m[name] = fv.Interface() + } + } else { + m[name] = fv.Interface() + } + } + + return m +} + +func isEmpty(v *reflect.Value) bool { + k := v.Kind() + if k == reflect.Bool { + return v.Bool() == false + } else if reflect.Int < k && k < reflect.Int64 { + return v.Int() == 0 + } else if reflect.Uint < k && k < reflect.Uintptr { + return v.Uint() == 0 + } else if k == reflect.Float32 || k == reflect.Float64 { + return v.Float() == 0 + } else if k == reflect.Array || k == reflect.Map || k == reflect.Slice || k == reflect.String { + return v.Len() == 0 + } else if k == reflect.Interface || k == reflect.Ptr { + return v.IsNil() + } + return false +} + +func convertSlice(s string, name string, ft reflect.Type, fv reflect.Value) error { + var err error + et := ft.Elem() + + if et.Kind() == reflect.Ptr || et.Kind() == reflect.Struct { + return convertJsonValue(s, name, fv) + } + + ss := strings.Split(s, ",") + + if len(s) == 0 || len(ss) == 0 { + return nil + } + + fs := reflect.MakeSlice(ft, 0, len(ss)) + + for _, si := range ss { + ev := reflect.New(et).Elem() + + err = convertValue(et.Kind(), si, name, ev) + if err != nil { + return err + } + fs = reflect.Append(fs, ev) + } + + fv.Set(fs) + + return nil +} + +func convertJsonValue(s string, name string, fv reflect.Value) error { + var err error + d := StringToSlice(s) + + if fv.Kind() == reflect.Ptr { + if fv.IsNil() { + fv.Set(reflect.New(fv.Type().Elem())) + } + } else { + fv = fv.Addr() + } + + err = json.Unmarshal(d, fv.Interface()) + + if err != nil { + return fmt.Errorf("invalid json '%v': %v, %v", name, err.Error(), s) + } + + return nil +} + +func convertValue(kind reflect.Kind, s string, name string, fv reflect.Value) error { + if !fv.CanAddr() { + return fmt.Errorf("can not addr: %v", name) + } + + if kind == reflect.String { + fv.SetString(s) + return nil + } + + if kind == reflect.Bool { + switch s { + case "true": + fv.SetBool(true) + case "false": + fv.SetBool(false) + case "1": + fv.SetBool(true) + case "0": + fv.SetBool(false) + default: + return fmt.Errorf("invalid bool: %v value=%v", name, s) + } + return nil + } + + if reflect.Int <= kind && kind <= reflect.Int64 { + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return fmt.Errorf("invalid int: %v value=%v", name, s) + } + fv.SetInt(i) + + } else if reflect.Uint <= kind && kind <= reflect.Uint64 { + i, err := strconv.ParseUint(s, 10, 64) + if err != nil { + return fmt.Errorf("invalid int: %v value=%v", name, s) + } + fv.SetUint(i) + + } else if reflect.Float32 == kind || kind == reflect.Float64 { + i, err := strconv.ParseFloat(s, 64) + + if err != nil { + return fmt.Errorf("invalid float: %v value=%v", name, s) + } + + fv.SetFloat(i) + } else { + // not support or just ignore it? + // return fmt.Errorf("type not support: field=%v(%v) value=%v(%v)", name, ft.Kind(), val, vt.Kind()) + } + return nil +} + +func parseTag(tag string) (string, string) { + tags := strings.Split(tag, ",") + + if len(tags) <= 0 { + return "", "" + } + + if len(tags) == 1 { + return tags[0], "" + } + + return tags[0], tags[1] +} diff --git a/app/utils/map_to_map.go b/app/utils/map_to_map.go new file mode 100644 index 0000000..3a68bad --- /dev/null +++ b/app/utils/map_to_map.go @@ -0,0 +1,112 @@ +package utils + +import ( + "math" +) + +// WGS84坐标系:即地球坐标系,国际上通用的坐标系。 +// GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。Google Maps,高德在用。 +// BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。 + +const ( + X_PI = math.Pi * 3000.0 / 180.0 + OFFSET = 0.00669342162296594323 + AXIS = 6378245.0 +) + +//BD09toGCJ02 百度坐标系->火星坐标系 +func BD09toGCJ02(lon, lat float64) (float64, float64) { + x := lon - 0.0065 + y := lat - 0.006 + + z := math.Sqrt(x*x+y*y) - 0.00002*math.Sin(y*X_PI) + theta := math.Atan2(y, x) - 0.000003*math.Cos(x*X_PI) + + gLon := z * math.Cos(theta) + gLat := z * math.Sin(theta) + + return gLon, gLat +} + +//GCJ02toBD09 火星坐标系->百度坐标系 +func GCJ02toBD09(lon, lat float64) (float64, float64) { + z := math.Sqrt(lon*lon+lat*lat) + 0.00002*math.Sin(lat*X_PI) + theta := math.Atan2(lat, lon) + 0.000003*math.Cos(lon*X_PI) + + bdLon := z*math.Cos(theta) + 0.0065 + bdLat := z*math.Sin(theta) + 0.006 + + return bdLon, bdLat +} + +//WGS84toGCJ02 WGS84坐标系->火星坐标系 +func WGS84toGCJ02(lon, lat float64) (float64, float64) { + if isOutOFChina(lon, lat) { + return lon, lat + } + + mgLon, mgLat := delta(lon, lat) + + return mgLon, mgLat +} + +//GCJ02toWGS84 火星坐标系->WGS84坐标系 +func GCJ02toWGS84(lon, lat float64) (float64, float64) { + if isOutOFChina(lon, lat) { + return lon, lat + } + + mgLon, mgLat := delta(lon, lat) + + return lon*2 - mgLon, lat*2 - mgLat +} + +//BD09toWGS84 百度坐标系->WGS84坐标系 +func BD09toWGS84(lon, lat float64) (float64, float64) { + lon, lat = BD09toGCJ02(lon, lat) + return GCJ02toWGS84(lon, lat) +} + +//WGS84toBD09 WGS84坐标系->百度坐标系 +func WGS84toBD09(lon, lat float64) (float64, float64) { + lon, lat = WGS84toGCJ02(lon, lat) + return GCJ02toBD09(lon, lat) +} + +func delta(lon, lat float64) (float64, float64) { + dlat := transformlat(lon-105.0, lat-35.0) + dlon := transformlng(lon-105.0, lat-35.0) + + radlat := lat / 180.0 * math.Pi + magic := math.Sin(radlat) + magic = 1 - OFFSET*magic*magic + sqrtmagic := math.Sqrt(magic) + + dlat = (dlat * 180.0) / ((AXIS * (1 - OFFSET)) / (magic * sqrtmagic) * math.Pi) + dlon = (dlon * 180.0) / (AXIS / sqrtmagic * math.Cos(radlat) * math.Pi) + + mgLat := lat + dlat + mgLon := lon + dlon + + return mgLon, mgLat +} + +func transformlat(lon, lat float64) float64 { + var ret = -100.0 + 2.0*lon + 3.0*lat + 0.2*lat*lat + 0.1*lon*lat + 0.2*math.Sqrt(math.Abs(lon)) + ret += (20.0*math.Sin(6.0*lon*math.Pi) + 20.0*math.Sin(2.0*lon*math.Pi)) * 2.0 / 3.0 + ret += (20.0*math.Sin(lat*math.Pi) + 40.0*math.Sin(lat/3.0*math.Pi)) * 2.0 / 3.0 + ret += (160.0*math.Sin(lat/12.0*math.Pi) + 320*math.Sin(lat*math.Pi/30.0)) * 2.0 / 3.0 + return ret +} + +func transformlng(lon, lat float64) float64 { + var ret = 300.0 + lon + 2.0*lat + 0.1*lon*lon + 0.1*lon*lat + 0.1*math.Sqrt(math.Abs(lon)) + ret += (20.0*math.Sin(6.0*lon*math.Pi) + 20.0*math.Sin(2.0*lon*math.Pi)) * 2.0 / 3.0 + ret += (20.0*math.Sin(lon*math.Pi) + 40.0*math.Sin(lon/3.0*math.Pi)) * 2.0 / 3.0 + ret += (150.0*math.Sin(lon/12.0*math.Pi) + 300.0*math.Sin(lon/30.0*math.Pi)) * 2.0 / 3.0 + return ret +} + +func isOutOFChina(lon, lat float64) bool { + return !(lon > 73.66 && lon < 135.05 && lat > 3.86 && lat < 53.55) +} diff --git a/app/utils/md5.go b/app/utils/md5.go new file mode 100644 index 0000000..52c108d --- /dev/null +++ b/app/utils/md5.go @@ -0,0 +1,12 @@ +package utils + +import ( + "crypto/md5" + "encoding/hex" +) + +func Md5(str string) string { + h := md5.New() + h.Write([]byte(str)) + return hex.EncodeToString(h.Sum(nil)) +} diff --git a/app/utils/open_platform.go b/app/utils/open_platform.go new file mode 100644 index 0000000..b4f79da --- /dev/null +++ b/app/utils/open_platform.go @@ -0,0 +1,135 @@ +package utils + +import ( + "applet/app/cfg" + "encoding/json" + "errors" + "fmt" + "sort" + "time" +) + +// 调用开放平台的封装 +type OpenPlatformReqClient struct { + AppKey string + AppSecret string + Method string + Version string + Timestamp string + Nonce string + Sign string + BizData map[string]interface{} + params map[string]string + ReturnData ReturnDataResp +} + +type ReturnDataResp struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data interface{} `json:"data"` +} + +func NewOpenPlatformReqClient(appKey, method, version, appSecret string, bizData map[string]interface{}) (*OpenPlatformReqClient, error) { + if appKey == "" || appSecret == "" || method == "" || version == "" { + return nil, errors.New("appKey,method,version not allow empty") + } + nowStr := AnyToString(time.Now().Unix()) + nonce := UUIDString() + return &OpenPlatformReqClient{ + AppKey: appKey, + AppSecret: appSecret, + Method: method, + Version: version, + Nonce: nonce, + Timestamp: nowStr, + params: map[string]string{"app_key": appKey, "method": method, "version": version, "timestamp": nowStr, "nonce": nonce}, + BizData: bizData, + }, nil +} + +func (client *OpenPlatformReqClient) CurlOpen() error { + if client.params == nil { + return errors.New("params not allow empty") + } + url := cfg.ZhiosOpen.URL + "/api/open/gw" + fmt.Printf("%#v\n", string(Serialize(client.params))) + resp, err := CurlPost(url, Serialize(client.params), nil) + if err != nil { + return err + } + err = json.Unmarshal(resp, &client.ReturnData) + if err != nil { + return err + } + return nil +} + +/*func (client *OpenPlatformReqClient) CreateParams() *OpenPlatformReqClient { + client.params["timestamp"] = client.Timestamp + client.params["nonce"] = client.Nonce + //client.params["biz_data"] = SerializeStr(client.BizData) + return client +}*/ + +func (client *OpenPlatformReqClient) SetBizDataToParams() *OpenPlatformReqClient { + client.params["biz_data"] = SerializeStr(client.BizData) + return client +} + +func (client *OpenPlatformReqClient) SetParams(key, value string) *OpenPlatformReqClient { + client.params[key] = value + return client +} + +func (client *OpenPlatformReqClient) GetParams(key string) string { + return client.params[key] +} + +func (client *OpenPlatformReqClient) CreateSign() *OpenPlatformReqClient { + /*if client.BizData != nil { + for key := range client.BizData { + client.params[key] = AnyToString2(client.BizData[key]) + } + }*/ + var keys []string + for key := range client.params { + keys = append(keys, key) + } + sort.Strings(keys) + str := "" + for _, key := range keys { + str += fmt.Sprintf("%v=%v&", key, client.params[key]) + } + str = client.AppSecret + str[:len(str)-1] + client.AppSecret + fmt.Printf("sign: %s\n", str) + client.Sign = Md5(str) + client.params["sign"] = client.Sign + if client.BizData != nil { + for key := range client.BizData { + if _, ok := client.params[key]; ok { + delete(client.params, key) + } + } + } + return client +} + +func (client *OpenPlatformReqClient) VerifySign(sign string) bool { + if sign == "" || client.Sign == "" { + return false + } + if client.Sign == sign { + return true + } + return false +} + +func (client *OpenPlatformReqClient) ResetNonce() *OpenPlatformReqClient { + client.Nonce = UUIDString() + return client +} + +func (client *OpenPlatformReqClient) ResetTimestamp() *OpenPlatformReqClient { + client.Timestamp = AnyToString(time.Now().Unix()) + return client +} diff --git a/app/utils/qrcode/decodeFile.go b/app/utils/qrcode/decodeFile.go new file mode 100644 index 0000000..f50fb28 --- /dev/null +++ b/app/utils/qrcode/decodeFile.go @@ -0,0 +1,33 @@ +package qrcode + +import ( + "image" + _ "image/jpeg" + _ "image/png" + "os" + + "github.com/makiuchi-d/gozxing" + "github.com/makiuchi-d/gozxing/qrcode" +) + +func DecodeFile(fi string) (string, error) { + file, err := os.Open(fi) + if err != nil { + return "", err + } + img, _, err := image.Decode(file) + if err != nil { + return "", err + } + // prepare BinaryBitmap + bmp, err := gozxing.NewBinaryBitmapFromImage(img) + if err != nil { + return "", err + } + // decode image + result, err := qrcode.NewQRCodeReader().Decode(bmp, nil) + if err != nil { + return "", err + } + return result.String(), nil +} diff --git a/app/utils/qrcode/getBase64.go b/app/utils/qrcode/getBase64.go new file mode 100644 index 0000000..2d0fe75 --- /dev/null +++ b/app/utils/qrcode/getBase64.go @@ -0,0 +1,55 @@ +package qrcode + +// 生成登录二维码图片, 方便在网页上显示 + +import ( + "bytes" + "encoding/base64" + "image/jpeg" + "image/png" + "io/ioutil" + "net/http" + + "github.com/boombuler/barcode" + "github.com/boombuler/barcode/qr" +) + +func GetJPGBase64(content string, edges ...int) string { + edgeLen := 300 + if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { + edgeLen = edges[0] + } + img, _ := qr.Encode(content, qr.L, qr.Unicode) + img, _ = barcode.Scale(img, edgeLen, edgeLen) + + emptyBuff := bytes.NewBuffer(nil) // 开辟一个新的空buff缓冲区 + jpeg.Encode(emptyBuff, img, nil) + dist := make([]byte, 50000) // 开辟存储空间 + base64.StdEncoding.Encode(dist, emptyBuff.Bytes()) // buff转成base64 + return "data:image/png;base64," + string(dist) // 输出图片base64(type = []byte) +} + +func GetPNGBase64(content string, edges ...int) string { + edgeLen := 300 + if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { + edgeLen = edges[0] + } + img, _ := qr.Encode(content, qr.L, qr.Unicode) + img, _ = barcode.Scale(img, edgeLen, edgeLen) + + emptyBuff := bytes.NewBuffer(nil) // 开辟一个新的空buff缓冲区 + png.Encode(emptyBuff, img) + dist := make([]byte, 50000) // 开辟存储空间 + base64.StdEncoding.Encode(dist, emptyBuff.Bytes()) // buff转成base64 + return string(dist) // 输出图片base64(type = []byte) +} +func GetFileBase64(content string) string { + res, err := http.Get(content) + if err != nil { + return "" + } + defer res.Body.Close() + data, _ := ioutil.ReadAll(res.Body) + imageBase64 := base64.StdEncoding.EncodeToString(data) + return imageBase64 +} diff --git a/app/utils/qrcode/saveFile.go b/app/utils/qrcode/saveFile.go new file mode 100644 index 0000000..4854783 --- /dev/null +++ b/app/utils/qrcode/saveFile.go @@ -0,0 +1,85 @@ +package qrcode + +// 生成登录二维码图片 + +import ( + "errors" + "image" + "image/jpeg" + "image/png" + "os" + "path/filepath" + "strings" + + "github.com/boombuler/barcode" + "github.com/boombuler/barcode/qr" +) + +func SaveJpegFile(filePath, content string, edges ...int) error { + edgeLen := 300 + if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { + edgeLen = edges[0] + } + img, _ := qr.Encode(content, qr.L, qr.Unicode) + img, _ = barcode.Scale(img, edgeLen, edgeLen) + + return writeFile(filePath, img, "jpg") +} + +func SavePngFile(filePath, content string, edges ...int) error { + edgeLen := 300 + if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { + edgeLen = edges[0] + } + img, _ := qr.Encode(content, qr.L, qr.Unicode) + img, _ = barcode.Scale(img, edgeLen, edgeLen) + + return writeFile(filePath, img, "png") +} + +func writeFile(filePath string, img image.Image, format string) error { + if err := createDir(filePath); err != nil { + return err + } + file, err := os.Create(filePath) + defer file.Close() + if err != nil { + return err + } + switch strings.ToLower(format) { + case "png": + err = png.Encode(file, img) + break + case "jpg": + err = jpeg.Encode(file, img, nil) + default: + return errors.New("format not accept") + } + if err != nil { + return err + } + return nil +} + +func createDir(filePath string) error { + var err error + // filePath, _ = filepath.Abs(filePath) + dirPath := filepath.Dir(filePath) + dirInfo, err := os.Stat(dirPath) + if err != nil { + if !os.IsExist(err) { + err = os.MkdirAll(dirPath, 0777) + if err != nil { + return err + } + } else { + return err + } + } else { + if dirInfo.IsDir() { + return nil + } + return errors.New("directory is a file") + } + return nil +} diff --git a/app/utils/qrcode/writeWeb.go b/app/utils/qrcode/writeWeb.go new file mode 100644 index 0000000..57e1e92 --- /dev/null +++ b/app/utils/qrcode/writeWeb.go @@ -0,0 +1,39 @@ +package qrcode + +import ( + "bytes" + "image/jpeg" + "image/png" + "net/http" + + "github.com/boombuler/barcode" + "github.com/boombuler/barcode/qr" +) + +func WritePng(w http.ResponseWriter, content string, edges ...int) error { + edgeLen := 300 + if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { + edgeLen = edges[0] + } + img, _ := qr.Encode(content, qr.L, qr.Unicode) + img, _ = barcode.Scale(img, edgeLen, edgeLen) + buff := bytes.NewBuffer(nil) + png.Encode(buff, img) + w.Header().Set("Content-Type", "image/png") + _, err := w.Write(buff.Bytes()) + return err +} + +func WriteJpg(w http.ResponseWriter, content string, edges ...int) error { + edgeLen := 300 + if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { + edgeLen = edges[0] + } + img, _ := qr.Encode(content, qr.L, qr.Unicode) + img, _ = barcode.Scale(img, edgeLen, edgeLen) + buff := bytes.NewBuffer(nil) + jpeg.Encode(buff, img, nil) + w.Header().Set("Content-Type", "image/jpg") + _, err := w.Write(buff.Bytes()) + return err +} diff --git a/app/utils/rand.go b/app/utils/rand.go new file mode 100644 index 0000000..fd4bf25 --- /dev/null +++ b/app/utils/rand.go @@ -0,0 +1,77 @@ +package utils + +import ( + crand "crypto/rand" + "fmt" + "math" + "math/big" + "math/rand" + "time" +) + +func RandString(l int, c ...string) string { + var ( + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + str string + num *big.Int + ) + if len(c) > 0 { + chars = c[0] + } + chrLen := int64(len(chars)) + for len(str) < l { + num, _ = crand.Int(crand.Reader, big.NewInt(chrLen)) + str += string(chars[num.Int64()]) + } + return str +} + +func RandNum() string { + seed := time.Now().UnixNano() + rand.Int63() + return fmt.Sprintf("%05v", rand.New(rand.NewSource(seed)).Int31n(1000000)) +} + +// x的y次方 +func RandPow(l int) string { + var i = "1" + for j := 0; j < l; j++ { + i += "0" + } + k := StrToInt64(i) + n := rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(k) + ls := "%0" + IntToStr(l) + "v" + str := fmt.Sprintf(ls, n) + //min := int(math.Pow10(l - 1)) + //max := int(math.Pow10(l) - 1) + return str +} +func RandInt(min, max int) int { + if min >= max || min == 0 || max == 0 { + if max == 0 { + max = min + } + return max + } + return rand.Intn(max-min) + min +} +func RandInt1(min, max int) int { + rand.Seed(time.Now().UnixNano()) + return rand.Intn(max-min+1) + min +} + +func CalculateDistance(lat1, lng1, lat2, lng2 float64) float64 { + radius := 6371.0 // 地球半径(单位:公里) + dLat := DegToRad(lat2 - lat1) + dLng := DegToRad(lng2 - lng1) + a := math.Sin(dLat/2)*math.Sin(dLat/2) + math.Cos(DegToRad(lat1))*math.Cos(DegToRad(lat2))*math.Sin(dLng/2)*math.Sin(dLng/2) + c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a)) + distance := radius * c + + return distance +} + +// 将角度转换为弧度 +func DegToRad(deg float64) float64 { + return deg * (math.Pi / 180) + +} diff --git a/app/utils/redis.go b/app/utils/redis.go new file mode 100644 index 0000000..6080e6e --- /dev/null +++ b/app/utils/redis.go @@ -0,0 +1,32 @@ +package utils + +import ( + "applet/app/utils/cache" + "fmt" + "github.com/gin-gonic/gin" +) + +func ClearRedis(c *gin.Context) { + var str = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"} + key := fmt.Sprintf("%s:cfg_cache", c.GetString("mid")) + cache.Del(key) + key2 := fmt.Sprintf("%s:virtual_coin_cfg", c.GetString("mid")) + cache.Del(key2) + for _, v := range str { + key1 := fmt.Sprintf("%s:cfg_cache:%s", c.GetString("mid"), v) + cache.Del(key1) + } + +} +func ClearRedisDb(dbname string) { + var str = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"} + key := fmt.Sprintf("%s:cfg_cache", dbname) + cache.Del(key) + key2 := fmt.Sprintf("%s:virtual_coin_cfg", dbname) + cache.Del(key2) + for _, v := range str { + key1 := fmt.Sprintf("%s:cfg_cache:%s", dbname, v) + cache.Del(key1) + } + +} diff --git a/app/utils/rpc_client.go b/app/utils/rpc_client.go new file mode 100644 index 0000000..4fc392a --- /dev/null +++ b/app/utils/rpc_client.go @@ -0,0 +1,60 @@ +package utils + +import ( + "applet/pkg/pb" + "context" + "fmt" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "strconv" + "time" +) + +func GetBusinessIntClient(url, port string) pb.BusinessIntClient { + target := fmt.Sprintf("%s:%s", url, port) + conn, err := grpc.Dial(target, grpc.WithInsecure()) + if err != nil { + fmt.Println(err) + return nil + } + return pb.NewBusinessIntClient(conn) +} + +func GetBusinessExtClient(url, port string) pb.BusinessExtClient { + target := fmt.Sprintf("%s:%s", url, port) + conn, err := grpc.Dial(target, grpc.WithInsecure()) + //defer conn.Close() + if err != nil { + fmt.Println(err) + return nil + } + return pb.NewBusinessExtClient(conn) +} + +func GetLogicExtClient(url, port string) pb.LogicExtClient { + target := fmt.Sprintf("%s:%s", url, port) + conn, err := grpc.Dial(target, grpc.WithInsecure()) + if err != nil { + fmt.Println(err) + return nil + } + return pb.NewLogicExtClient(conn) +} + +func GetCtx(token, userId, deviceId, masterId string) context.Context { + if userId == "" { + userId = "1" + } + if deviceId == "" { + deviceId = "1" + } + if token == "" { + token = "0" + } + return metadata.NewOutgoingContext(context.TODO(), metadata.Pairs( + "user_id", userId, + "device_id", deviceId, + "token", token, + "master_id", masterId, + "request_id", strconv.FormatInt(time.Now().UnixNano(), 10))) +} diff --git a/app/utils/rsa.go b/app/utils/rsa.go new file mode 100644 index 0000000..02f0386 --- /dev/null +++ b/app/utils/rsa.go @@ -0,0 +1,231 @@ +package utils + +import ( + "bytes" + "crypto" + "crypto/rand" + "crypto/rsa" + "crypto/sha256" + "crypto/x509" + "encoding/base64" + "encoding/pem" + "errors" + "fmt" + "io/ioutil" + "log" + "os" + "strings" +) + +// 生成私钥文件 TODO 未指定路径 +func RsaKeyGen(bits int) error { + privateKey, err := rsa.GenerateKey(rand.Reader, bits) + if err != nil { + return err + } + derStream := x509.MarshalPKCS1PrivateKey(privateKey) + block := &pem.Block{ + Type: "RSA PRIVATE KEY", + Bytes: derStream, + } + priFile, err := os.Create("private.pem") + if err != nil { + return err + } + err = pem.Encode(priFile, block) + priFile.Close() + if err != nil { + return err + } + // 生成公钥文件 + publicKey := &privateKey.PublicKey + derPkix, err := x509.MarshalPKIXPublicKey(publicKey) + if err != nil { + return err + } + block = &pem.Block{ + Type: "PUBLIC KEY", + Bytes: derPkix, + } + pubFile, err := os.Create("public.pem") + if err != nil { + return err + } + err = pem.Encode(pubFile, block) + pubFile.Close() + if err != nil { + return err + } + return nil +} + +// 生成私钥文件, 返回 privateKey , publicKey, error +func RsaKeyGenText(bits int) (string, string, error) { // bits 字节位 1024/2048 + privateKey, err := rsa.GenerateKey(rand.Reader, bits) + if err != nil { + return "", "", err + } + derStream := x509.MarshalPKCS1PrivateKey(privateKey) + block := &pem.Block{ + Type: "RSA PRIVATE KEY", + Bytes: derStream, + } + priBuff := bytes.NewBuffer(nil) + err = pem.Encode(priBuff, block) + if err != nil { + return "", "", err + } + // 生成公钥文件 + publicKey := &privateKey.PublicKey + derPkix, err := x509.MarshalPKIXPublicKey(publicKey) + if err != nil { + return "", "", err + } + block = &pem.Block{ + Type: "PUBLIC KEY", + Bytes: derPkix, + } + pubBuff := bytes.NewBuffer(nil) + err = pem.Encode(pubBuff, block) + if err != nil { + return "", "", err + } + return priBuff.String(), pubBuff.String(), nil +} + +// 加密 +func RsaEncrypt(rawData, publicKey []byte) ([]byte, error) { + block, _ := pem.Decode(publicKey) + if block == nil { + return nil, errors.New("public key error") + } + pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + return nil, err + } + pub := pubInterface.(*rsa.PublicKey) + return rsa.EncryptPKCS1v15(rand.Reader, pub, rawData) +} + +// 公钥加密 +func RsaEncrypts(data, keyBytes []byte) []byte { + //解密pem格式的公钥 + block, _ := pem.Decode(keyBytes) + if block == nil { + panic(errors.New("public key error")) + } + // 解析公钥 + pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + panic(err) + } + // 类型断言 + pub := pubInterface.(*rsa.PublicKey) + //加密 + ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, pub, data) + if err != nil { + panic(err) + } + return ciphertext +} + +// 解密 +func RsaDecrypt(cipherText, privateKey []byte) ([]byte, error) { + block, _ := pem.Decode(privateKey) + if block == nil { + return nil, errors.New("private key error") + } + priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) + if err != nil { + return nil, err + } + return rsa.DecryptPKCS1v15(rand.Reader, priv, cipherText) +} +func SyRsaEncrypt(signStr, signature, privateKeyBytes string) error { + h := sha256.New() + h.Write([]byte(signStr)) + d := h.Sum(nil) + sign, _ := base64.StdEncoding.DecodeString(signature) + pub, err := ParsePKIXPublicKey(privateKeyBytes) + err = rsa.VerifyPKCS1v15(pub, crypto.SHA256, d, sign) + if err != nil { + return err + } + + return nil +} +func FormatPublicKey(publicKey string) (pKey string) { + var buffer strings.Builder + buffer.WriteString("-----BEGIN PUBLIC KEY-----\n") + rawLen := 64 + keyLen := len(publicKey) + raws := keyLen / rawLen + temp := keyLen % rawLen + if temp > 0 { + raws++ + } + start := 0 + end := start + rawLen + for i := 0; i < raws; i++ { + if i == raws-1 { + buffer.WriteString(publicKey[start:]) + } else { + buffer.WriteString(publicKey[start:end]) + } + buffer.WriteByte('\n') + start += rawLen + end = start + rawLen + } + buffer.WriteString("-----END PUBLIC KEY-----\n") + pKey = buffer.String() + return +} + +func ParsePKIXPublicKey(privateKey string) (*rsa.PublicKey, error) { + + privateKey = FormatPublicKey(privateKey) + // 2、解码私钥字节,生成加密对象 + block, _ := pem.Decode([]byte(privateKey)) + if block == nil { + + return nil, errors.New("私钥信息错误!") + } + // 3、解析DER编码的私钥,生成私钥对象 + priKey, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + + return nil, err + } + return priKey.(*rsa.PublicKey), nil +} + +// 从证书获取公钥 +func OpensslPemGetPublic(pathOrString string) (interface{}, error) { + var certPem []byte + var err error + if IsFile(pathOrString) && Exists(pathOrString) { + certPem, err = ioutil.ReadFile(pathOrString) + if err != nil { + return nil, err + } + if string(certPem) == "" { + return nil, errors.New("empty pem file") + } + } else { + if pathOrString == "" { + return nil, errors.New("empty pem string") + } + certPem = StringToSlice(pathOrString) + } + block, rest := pem.Decode(certPem) + if block == nil || block.Type != "PUBLIC KEY" { + //log.Fatal("failed to decode PEM block containing public key") + return nil, errors.New("failed to decode PEM block containing public key") + } + pub, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + log.Fatal(err) + } + fmt.Printf("Got a %T, with remaining data: %q", pub, rest) + return pub, nil +} diff --git a/app/utils/serialize.go b/app/utils/serialize.go new file mode 100644 index 0000000..1ac4d80 --- /dev/null +++ b/app/utils/serialize.go @@ -0,0 +1,23 @@ +package utils + +import ( + "encoding/json" +) + +func Serialize(data interface{}) []byte { + res, err := json.Marshal(data) + if err != nil { + return []byte{} + } + return res +} + +func Unserialize(b []byte, dst interface{}) { + if err := json.Unmarshal(b, dst); err != nil { + dst = nil + } +} + +func SerializeStr(data interface{}, arg ...interface{}) string { + return string(Serialize(data)) +} diff --git a/app/utils/shuffle.go b/app/utils/shuffle.go new file mode 100644 index 0000000..2c845a8 --- /dev/null +++ b/app/utils/shuffle.go @@ -0,0 +1,48 @@ +package utils + +import ( + "math/rand" + "time" +) + +// 打乱随机字符串 +func ShuffleString(s *string) { + if len(*s) > 1 { + b := []byte(*s) + rand.Seed(time.Now().UnixNano()) + rand.Shuffle(len(b), func(x, y int) { + b[x], b[y] = b[y], b[x] + }) + *s = string(b) + } +} + +// 打乱随机slice +func ShuffleSliceBytes(b []byte) { + if len(b) > 1 { + rand.Seed(time.Now().UnixNano()) + rand.Shuffle(len(b), func(x, y int) { + b[x], b[y] = b[y], b[x] + }) + } +} + +// 打乱slice int +func ShuffleSliceInt(i []int) { + if len(i) > 1 { + rand.Seed(time.Now().UnixNano()) + rand.Shuffle(len(i), func(x, y int) { + i[x], i[y] = i[y], i[x] + }) + } +} + +// 打乱slice interface +func ShuffleSliceInterface(i []interface{}) { + if len(i) > 1 { + rand.Seed(time.Now().UnixNano()) + rand.Shuffle(len(i), func(x, y int) { + i[x], i[y] = i[y], i[x] + }) + } +} diff --git a/app/utils/sign_check.go b/app/utils/sign_check.go new file mode 100644 index 0000000..5c80ab1 --- /dev/null +++ b/app/utils/sign_check.go @@ -0,0 +1,216 @@ +package utils + +import ( + "applet/app/cfg" + "applet/app/utils/logx" + "fmt" + "github.com/forgoer/openssl" + "github.com/gin-gonic/gin" + "github.com/syyongx/php2go" + "strings" + "time" +) + +var publicKey = []byte(`-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFQD7RL2tDNuwdg0jTfV0zjAzh +WoCWfGrcNiucy2XUHZZU2oGhHv1N10qu3XayTDD4pu4sJ73biKwqR6ZN7IS4Sfon +vrzaXGvrTG4kmdo3XrbrkzmyBHDLTsJvv6pyS2HPl9QPSvKDN0iJ66+KN8QjBpw1 +FNIGe7xbDaJPY733/QIDAQAB +-----END PUBLIC KEY-----`) + +var privateKey = []byte(`-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCFQD7RL2tDNuwdg0jTfV0zjAzhWoCWfGrcNiucy2XUHZZU2oGh +Hv1N10qu3XayTDD4pu4sJ73biKwqR6ZN7IS4SfonvrzaXGvrTG4kmdo3Xrbrkzmy +BHDLTsJvv6pyS2HPl9QPSvKDN0iJ66+KN8QjBpw1FNIGe7xbDaJPY733/QIDAQAB +AoGADi14wY8XDY7Bbp5yWDZFfV+QW0Xi2qAgSo/k8gjeK8R+I0cgdcEzWF3oz1Q2 +9d+PclVokAAmfj47e0AmXLImqMCSEzi1jDBUFIRoJk9WE1YstE94mrCgV0FW+N/u ++L6OgZcjmF+9dHKprnpaUGQuUV5fF8j0qp8S2Jfs3Sw+dOECQQCQnHALzFjmXXIR +Ez3VSK4ZoYgDIrrpzNst5Hh6AMDNZcG3CrCxlQrgqjgTzBSr3ZSavvkfYRj42STk +TqyX1tQFAkEA6+O6UENoUTk2lG7iO/ta7cdIULnkTGwQqvkgLIUjk6w8E3sBTIfw +rerTEmquw5F42HHE+FMrRat06ZN57lENmQJAYgUHlZevcoZIePZ35Qfcqpbo4Gc8 +Fpm6vwKr/tZf2Vlt0qo2VkhWFS6L0C92m4AX6EQmDHT+Pj7BWNdS+aCuGQJBAOkq +NKPZvWdr8jNOV3mKvxqB/U0uMigIOYGGtvLKt5vkh42J7ILFbHW8w95UbWMKjDUG +X/hF3WQEUo//Imsa2yECQHSZIpJxiTRueoDiyRt0LH+jdbYFUu/6D0UIYXhFvP/p +EZX+hfCfUnNYX59UVpRjSZ66g0CbCjuBPOhmOD+hDeQ= +-----END RSA PRIVATE KEY-----`) + +func GetApiVersion(c *gin.Context) int { + var apiVersion = c.GetHeader("apiVersion") + if StrToInt(apiVersion) == 0 { //没有版本号先不校验 + apiVersion = c.GetHeader("Apiversion") + } + if StrToInt(apiVersion) == 0 { //没有版本号先不校验 + apiVersion = c.GetHeader("api_version") + } + if StrToInt(apiVersion) == 0 { //没有版本号先不校验 + apiVersion = c.GetString("apiVersion") + } + if StrToInt(apiVersion) == 0 { + platform := c.GetHeader("platform") + if InArr(platform, []string{"ios", "android"}) == false && c.GetString("h5_applet_must_sign") == "1" { + apiVersion = "1" + } + if InArr(platform, []string{"android"}) && c.GetString("android_must_sign") == "1" { + apiVersion = "1" + } + if InArr(platform, []string{"ios"}) && c.GetString("ios_must_sign") == "1" { + apiVersion = "1" + } + } + if c.GetString("api_version") == "1" && cfg.Prd { + apiVersion = "1" + } + if (strings.Contains(c.Request.Host, "zhios-app") || strings.Contains(c.Request.Host, "api.zhios.cn")) && apiVersion == "1" { + apiVersion = "0" + c.Set("api_version", "0") + } + + //if InArr(c.GetHeader("platform"), []string{"ios", "android"}) { + // apiVersion = "0" + //} + var uri = c.Request.RequestURI + if InArr(c.GetHeader("platform"), []string{"ios", "android", "pc"}) { //不用签名的接口 + var filterList = []string{ + "/api/v1/appcheck", + "/api/v1/app/guide", + "/api/v1/new/config.json", + "pub.flutter.web_download_page", + } + for _, v := range filterList { + if strings.Contains(uri, v) { + apiVersion = "0" + } + } + } + return StrToInt(apiVersion) +} +func CheckUri(c *gin.Context) int { + apiVersion := "1" + //var uri = c.Request.RequestURI + if InArr(c.GetHeader("platform"), []string{"ios", "android"}) { //不用签名的接口 + //var filterList = []string{ + // "/api/v1/appcheck", + // "/api/v1/app/guide", + // "/api/v1/new/config.json", + // "api/v1/rec", + // "api/v1/custom/mod/", + // "api/v1/mod/", + // "api/v1/s/", + //} + //for _, v := range filterList { + // if strings.Contains(uri, v) { + // apiVersion = "0" + // } + //} + apiVersion = "0" + } + return StrToInt(apiVersion) +} + +// 签名校验 +func SignCheck(c *gin.Context) bool { + var apiVersion = GetApiVersion(c) + if apiVersion == 0 { //没有版本号先不校验 + return true + } + //1.通过rsa 解析出 aes + var key = c.GetHeader("key") + + //拼接对应参数 + var uri = c.Request.RequestURI + var query = GetQueryParam(uri) + fmt.Println(query) + query["timestamp"] = c.GetHeader("timestamp") + query["nonce"] = c.GetHeader("nonce") + query["key"] = key + token := c.GetHeader("Authorization") + if token != "" { + // 按空格分割 + parts := strings.SplitN(token, " ", 2) + if len(parts) == 2 && parts[0] == "Bearer" { + token = parts[1] + } + } + query["token"] = token + //2.query参数按照 ASCII 码从小到大排序 + str := JoinStringsInASCII(query, "&", false, false, "") + //3.拼上密钥 + secret := "" + if InArr(c.GetHeader("platform"), []string{"android", "ios"}) { + secret = c.GetString("app_api_secret_key") + } else if c.GetHeader("platform") == "wap" { + secret = c.GetString("h5_api_secret_key") + } else { + secret = c.GetString("applet_api_secret_key") + } + + str = fmt.Sprintf("%s&secret=%s", str, secret) + fmt.Println(str) + //4.md5加密 转小写 + sign := strings.ToLower(Md5(str)) + //5.判断跟前端传来的sign是否一致 + if sign != c.GetHeader("sign") { + return false + } + + if StrToInt64(query["timestamp"])/1000 < time.Now().Unix()-300 { + fmt.Println("============" + query["timestamp"]) + return false + } + //if query["nonce"] != "" { + // //TODO s + // getString, err := cache.GetString(query["nonce"]) + // if err != nil { + // fmt.Println("nonce", err) + // } + // if getString != "" { + // fmt.Println("nonce", "============"+getString) + // return false + // } else { + // cache.SetEx(query["nonce"], "1", 300) + // } + //} + return true +} + +func ResultAes(c *gin.Context, raw []byte) string { + var key = c.GetHeader("key") + base, _ := php2go.Base64Decode(key) + aes, err := RsaDecrypt([]byte(base), privateKey) + if err != nil { + logx.Info(err) + return "" + } + fmt.Println("============aes============") + fmt.Println(string(aes)) + fmt.Println(string(raw)) + str, _ := openssl.AesECBEncrypt(raw, aes, openssl.PKCS7_PADDING) + value := php2go.Base64Encode(string(str)) + fmt.Println(value) + + return value +} + +func ResultAesDecrypt(c *gin.Context, raw string) string { + var key = c.GetHeader("key") + if key == "" { + key = c.GetHeader("Key") + } + fmt.Println("验签", key) + base, _ := php2go.Base64Decode(key) + aes, err := RsaDecrypt([]byte(base), privateKey) + if err != nil { + logx.Info(err) + return "" + } + raw = strings.ReplaceAll(raw, "\"", "") + fmt.Println(raw) + value1, _ := php2go.Base64Decode(raw) + if value1 == "" { + return "" + } + str1, _ := openssl.AesECBDecrypt([]byte(value1), aes, openssl.PKCS7_PADDING) + fmt.Println("==========解码=========") + fmt.Println(string(str1)) + return string(str1) +} diff --git a/app/utils/slice.go b/app/utils/slice.go new file mode 100644 index 0000000..fd86081 --- /dev/null +++ b/app/utils/slice.go @@ -0,0 +1,13 @@ +package utils + +// ContainsString is 字符串是否包含在字符串切片里 +func ContainsString(array []string, val string) (index int) { + index = -1 + for i := 0; i < len(array); i++ { + if array[i] == val { + index = i + return + } + } + return +} diff --git a/app/utils/slice_and_string.go b/app/utils/slice_and_string.go new file mode 100644 index 0000000..3ae6946 --- /dev/null +++ b/app/utils/slice_and_string.go @@ -0,0 +1,47 @@ +package utils + +import ( + "fmt" + "reflect" + "strings" + "unsafe" +) + +// string与slice互转,零copy省内存 + +// zero copy to change slice to string +func Slice2String(b []byte) (s string) { + pBytes := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + pString := (*reflect.StringHeader)(unsafe.Pointer(&s)) + pString.Data = pBytes.Data + pString.Len = pBytes.Len + return +} + +// no copy to change string to slice +func StringToSlice(s string) (b []byte) { + pBytes := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + pString := (*reflect.StringHeader)(unsafe.Pointer(&s)) + pBytes.Data = pString.Data + pBytes.Len = pString.Len + pBytes.Cap = pString.Len + return +} + +// 任意slice合并 +func SliceJoin(sep string, elems ...interface{}) string { + l := len(elems) + if l == 0 { + return "" + } + if l == 1 { + s := fmt.Sprint(elems[0]) + sLen := len(s) - 1 + if s[0] == '[' && s[sLen] == ']' { + return strings.Replace(s[1:sLen], " ", sep, -1) + } + return s + } + sep = strings.Replace(fmt.Sprint(elems), " ", sep, -1) + return sep[1 : len(sep)-1] +} diff --git a/app/utils/string.go b/app/utils/string.go new file mode 100644 index 0000000..adae62e --- /dev/null +++ b/app/utils/string.go @@ -0,0 +1,223 @@ +package utils + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/lib/comm_plan" + "fmt" + "github.com/syyongx/php2go" + "math/rand" + "reflect" + "regexp" + "sort" + "strings" + "unicode" +) + +func Implode(glue string, args ...interface{}) string { + data := make([]string, len(args)) + for i, s := range args { + data[i] = fmt.Sprint(s) + } + return strings.Join(data, glue) +} +func RremoveChinese(s string) string { + // 正则表达式匹配中文字符 + re := regexp.MustCompile("[\u4e00-\u9fa5]") + // 将所有中文字符替换为空字符串 + s = re.ReplaceAllString(s, "") + return s +} + +// 字符串是否在数组里 +func InArr(target string, strArray []string) bool { + for _, element := range strArray { + if target == element { + return true + } + } + return false +} +func ContainsDigitOrLetter(s string) bool { + reg, err := regexp.Compile("[0-9a-zA-Z]") + if err != nil { + // 处理正则表达式编译错误 + return false + } + return reg.MatchString(s) +} + +// 生成指定长度的字符串 +func RandStringBytes(n int) string { + const letterBytes = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + b := make([]byte, n) + for i := range b { + b[i] = letterBytes[rand.Intn(len(letterBytes))] + } + return string(b) +} + +// 把数组的值放到key里 +func ArrayColumn(array interface{}, key string) (result map[string]interface{}, err error) { + result = make(map[string]interface{}) + t := reflect.TypeOf(array) + v := reflect.ValueOf(array) + if t.Kind() != reflect.Slice { + return nil, nil + } + if v.Len() == 0 { + return nil, nil + } + for i := 0; i < v.Len(); i++ { + indexv := v.Index(i) + if indexv.Type().Kind() != reflect.Struct { + return nil, nil + } + mapKeyInterface := indexv.FieldByName(key) + if mapKeyInterface.Kind() == reflect.Invalid { + return nil, nil + } + mapKeyString, err := InterfaceToString(mapKeyInterface.Interface()) + if err != nil { + return nil, err + } + result[mapKeyString] = indexv.Interface() + } + return result, err +} + +// 转string +func InterfaceToString(v interface{}) (result string, err error) { + switch reflect.TypeOf(v).Kind() { + case reflect.Int64, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32: + result = fmt.Sprintf("%v", v) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + result = fmt.Sprintf("%v", v) + case reflect.String: + result = v.(string) + default: + err = nil + } + return result, err +} + +func HideTrueName(name string) string { + res := "**" + if name != "" { + runs := []rune(name) + leng := len(runs) + if leng <= 3 { + res = string(runs[0:1]) + res + } else if leng < 5 { + res = string(runs[0:2]) + res + } else if leng < 10 { + res = string(runs[0:2]) + "***" + string(runs[leng-2:leng]) + } else if leng < 16 { + res = string(runs[0:3]) + "****" + string(runs[leng-3:leng]) + } else { + res = string(runs[0:4]) + "*****" + string(runs[leng-4:leng]) + } + } + return res +} + +// 是否有中文 +func IsChineseChar(str string) bool { + for _, r := range str { + if unicode.Is(unicode.Scripts["Han"], r) || (regexp.MustCompile("[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]").MatchString(string(r))) { + return true + } + } + return false +} + +// 清空前面是0的 +func LeadZeros(str string) string { + bytes := []byte(str) + var index int + for i, b := range bytes { + if b != byte(48) { + index = i + break + } + } + i := bytes[index:len(bytes)] + return string(i) +} +func GetQueryParam(uri string) map[string]string { + //根据问号分割路由还是query参数 + uriList := strings.Split(uri, "?") + var query = make(map[string]string, 0) + //有参数才处理 + if len(uriList) == 2 { + //分割query参数 + var queryList = strings.Split(uriList[1], "&") + if len(queryList) > 0 { + //key value 分别赋值 + for _, v := range queryList { + var valueList = strings.Split(v, "=") + if len(valueList) == 2 { + value, _ := php2go.URLDecode(valueList[1]) + if value == "" { + value = valueList[1] + } + query[valueList[0]] = value + } + } + } + } + return query +} + +// JoinStringsInASCII 按照规则,参数名ASCII码从小到大排序后拼接 +// data 待拼接的数据 +// sep 连接符 +// onlyValues 是否只包含参数值,true则不包含参数名,否则参数名和参数值均有 +// includeEmpty 是否包含空值,true则包含空值,否则不包含,注意此参数不影响参数名的存在 +// exceptKeys 被排除的参数名,不参与排序及拼接 +func JoinStringsInASCII(data map[string]string, sep string, onlyValues, includeEmpty bool, exceptKeys ...string) string { + var list []string + var keyList []string + m := make(map[string]int) + if len(exceptKeys) > 0 { + for _, except := range exceptKeys { + m[except] = 1 + } + } + for k := range data { + if _, ok := m[k]; ok { + continue + } + value := data[k] + if !includeEmpty && value == "" { + continue + } + if onlyValues { + keyList = append(keyList, k) + } else { + list = append(list, fmt.Sprintf("%s=%s", k, value)) + } + } + if onlyValues { + sort.Strings(keyList) + for _, v := range keyList { + list = append(list, AnyToString(data[v])) + } + } else { + sort.Strings(list) + } + return strings.Join(list, sep) +} + +// 手机号中间4位替换为*号 +func FormatMobileStar(mobile string) string { + if len(mobile) <= 10 { + return mobile + } + return mobile[:3] + "****" + mobile[7:] +} +func ConvertList2Map(a []*comm_plan.VirtualCoinCommission) (b map[string]float64) { + b = make(map[string]float64) + for _, i := range a { + b[i.Cid] = i.Val + } + return b +} diff --git a/app/utils/struct2UrlParams.go b/app/utils/struct2UrlParams.go new file mode 100644 index 0000000..7f8ac05 --- /dev/null +++ b/app/utils/struct2UrlParams.go @@ -0,0 +1,43 @@ +package utils + +import "sort" + +func Struct2UrlParams(obj interface{}) string { + var str = "" + mapVal := Struct2Map(obj) + var keys []string + for key := range mapVal { + keys = append(keys, key) + } + sort.Strings(keys) + for _, key := range keys { + str += key + "=" + AnyToString(mapVal[key]) + "&" + } + /*t := reflect.TypeOf(origin) + v := reflect.ValueOf(origin) + + for i := 0; i < t.NumField(); i++ { + tag := strings.ToLower(t.Field(i).Tag.Get("json")) + if tag != "sign" { + switch v.Field(i).Kind(){ + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + str += tag + "=" + utils.Int64ToStr(v.Field(i).Int()) + "&" + break + case reflect.String: + str += tag + "=" + v.Field(i).String() + "&" + break + case reflect.Bool: + str += tag + "=" + utils.BoolToStr(v.Field(i).Bool()) + "&" + break + case reflect.Float32, reflect.Float64: + str += tag + "=" + utils.Float64ToStr(v.Field(i).Float()) + break + case reflect.Array, reflect.Struct, reflect.Slice: + str += ToUrlKeyValue(v.Field(i).Interface()) + default: + break + } + } + }*/ + return str +} diff --git a/app/utils/time.go b/app/utils/time.go new file mode 100644 index 0000000..9c0f6f8 --- /dev/null +++ b/app/utils/time.go @@ -0,0 +1,239 @@ +package utils + +import ( + "errors" + "fmt" + "strconv" + "strings" + "time" +) + +func StrToTime(s string) (int64, error) { + // delete all not int characters + if s == "" { + return time.Now().Unix(), nil + } + r := make([]rune, 14) + l := 0 + // 过滤除数字以外的字符 + for _, v := range s { + if '0' <= v && v <= '9' { + r[l] = v + l++ + if l == 14 { + break + } + } + } + for l < 14 { + r[l] = '0' // 补0 + l++ + } + t, err := time.Parse("20060102150405", string(r)) + if err != nil { + return 0, err + } + return t.Unix(), nil +} + +func TimeToStr(unixSecTime interface{}, layout ...string) string { + i := AnyToInt64(unixSecTime) + if i == 0 { + return "" + } + f := "2006-01-02 15:04:05" + if len(layout) > 0 { + f = layout[0] + } + return time.Unix(i, 0).Format(f) +} + +func FormatNanoUnix() string { + return strings.Replace(time.Now().Format("20060102150405.0000000"), ".", "", 1) +} + +func TimeParse(format, src string) (time.Time, error) { + return time.ParseInLocation(format, src, time.Local) +} + +func TimeParseStd(src string) time.Time { + t, _ := TimeParse("2006-01-02 15:04:05", src) + return t +} + +func TimeStdParseUnix(src string) int64 { + t, err := TimeParse("2006-01-02 15:04:05", src) + if err != nil { + return 0 + } + return t.Unix() +} + +// 获取一个当前时间 时间间隔 时间戳 +func GetTimeInterval(unit string, amount int) (startTime, endTime int64) { + t := time.Now() + nowTime := t.Unix() + tmpTime := int64(0) + switch unit { + case "years": + tmpTime = time.Date(t.Year()+amount, t.Month(), t.Day(), t.Hour(), 0, 0, 0, t.Location()).Unix() + case "months": + tmpTime = time.Date(t.Year(), t.Month()+time.Month(amount), t.Day(), t.Hour(), 0, 0, 0, t.Location()).Unix() + case "days": + tmpTime = time.Date(t.Year(), t.Month(), t.Day()+amount, t.Hour(), 0, 0, 0, t.Location()).Unix() + case "hours": + tmpTime = time.Date(t.Year(), t.Month(), t.Day(), t.Hour()+amount, 0, 0, 0, t.Location()).Unix() + } + if amount > 0 { + startTime = nowTime + endTime = tmpTime + } else { + startTime = tmpTime + endTime = nowTime + } + return +} + +// 几天前 +func TimeInterval(newTime int) string { + now := time.Now().Unix() + newTime64 := AnyToInt64(newTime) + if newTime64 >= now { + return "刚刚" + } + interval := now - newTime64 + switch { + case interval < 60: + return AnyToString(interval) + "秒前" + case interval < 60*60: + return AnyToString(interval/60) + "分前" + case interval < 60*60*24: + return AnyToString(interval/60/60) + "小时前" + case interval < 60*60*24*30: + return AnyToString(interval/60/60/24) + "天前" + case interval < 60*60*24*30*12: + return AnyToString(interval/60/60/24/30) + "月前" + default: + return AnyToString(interval/60/60/24/30/12) + "年前" + } +} + +// 时分秒字符串转时间戳,传入示例:8:40 or 8:40:10 +func HmsToUnix(str string) (int64, error) { + t := time.Now() + arr := strings.Split(str, ":") + if len(arr) < 2 { + return 0, errors.New("Time format error") + } + h, _ := strconv.Atoi(arr[0]) + m, _ := strconv.Atoi(arr[1]) + s := 0 + if len(arr) == 3 { + s, _ = strconv.Atoi(arr[3]) + } + formatted1 := fmt.Sprintf("%d%02d%02d%02d%02d%02d", t.Year(), t.Month(), t.Day(), h, m, s) + res, err := time.ParseInLocation("20060102150405", formatted1, time.Local) + if err != nil { + return 0, err + } else { + return res.Unix(), nil + } +} + +// 获取特定时间范围 +func GetTimeRange(s string) map[string]int64 { + t := time.Now() + var stime, etime time.Time + switch s { + case "today": + stime = time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) + etime = time.Date(t.Year(), t.Month(), t.Day()+1, 0, 0, 0, 0, t.Location()) + case "yesterday": + stime = time.Date(t.Year(), t.Month(), t.Day()-1, 0, 0, 0, 0, t.Location()) + etime = time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) + case "within_seven_days": + // 明天 0点 + etime = time.Date(t.Year(), t.Month(), t.Day()+1, 0, 0, 0, 0, t.Location()) + stime = time.Unix(etime.Unix()-7*86400, 0) + + case "within_fifteen_days": + // 明天 0点 + etime = time.Date(t.Year(), t.Month(), t.Day()+1, 0, 0, 0, 0, t.Location()) + // 前14天0点 + stime = time.Unix(etime.Unix()-15*86400, 0) + case "current_month": + stime = GetFirstDateOfMonth(t) + etime = time.Now() + case "last_month": + etime = GetFirstDateOfMonth(t) + monthTimes := TimeStdParseUnix(etime.Format("2006-01-02 15:04:05")) - 86400 + times, _ := UnixToTime(Int64ToStr(monthTimes)) + stime = GetFirstDateOfMonth(times) + } + + return map[string]int64{ + "start": stime.Unix(), + "end": etime.Unix(), + } +} + +/** +获取本周周一的日期 +*/ +func GetFirstDateOfWeek() (weekMonday string) { + now := time.Now() + + offset := int(time.Monday - now.Weekday()) + if offset > 0 { + offset = -6 + } + + weekStartDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset) + weekMonday = weekStartDate.Format("2006-01-02") + return +} + +/** +获取上周的周一日期 +*/ +func GetLastWeekFirstDate() (weekMonday string) { + thisWeekMonday := GetFirstDateOfWeek() + TimeMonday, _ := time.Parse("2006-01-02", thisWeekMonday) + lastWeekMonday := TimeMonday.AddDate(0, 0, -7) + weekMonday = lastWeekMonday.Format("2006-01-02") + return +} + +//时间戳转时间格式 +func UnixToTime(e string) (datatime time.Time, err error) { + data, err := strconv.ParseInt(e, 10, 64) + datatime = time.Unix(data, 0) + return +} + +//获取传入的时间所在月份的第一天,即某月第一天的0点。如传入time.Now(), 返回当前月份的第一天0点时间。 +func GetFirstDateOfMonth(d time.Time) time.Time { + d = d.AddDate(0, 0, -d.Day()+1) + return GetZeroTime(d) +} + +//获取传入的时间所在月份的最后一天,即某月最后一天的0点。如传入time.Now(), 返回当前月份的最后一天0点时间。 +func GetLastDateOfMonth(d time.Time) time.Time { + return GetFirstDateOfMonth(d).AddDate(0, 1, -1) +} + +//获取某一天的0点时间 +func GetZeroTime(d time.Time) time.Time { + return time.Date(d.Year(), d.Month(), d.Day(), 0, 0, 0, 0, d.Location()) +} + +//获取当月某天的某个时间的时间 +func GetDayToTime(day, timeStr string) string { + if timeStr == "" { + timeStr = "00:00:00" + } + year := time.Now().Year() + month := time.Now().Format("01") + times := fmt.Sprintf("%s-%s-%s %s", IntToStr(year), month, day, timeStr) + return times +} diff --git a/app/utils/translate.go b/app/utils/translate.go new file mode 100644 index 0000000..dbcb00d --- /dev/null +++ b/app/utils/translate.go @@ -0,0 +1,110 @@ +package utils + +import ( + "applet/app/cfg" + "applet/app/utils/cache" + "encoding/json" + "github.com/gin-gonic/gin" + "github.com/go-creed/sat" + "strings" +) + +func ReadReverse(c *gin.Context, str string) string { + if c.GetString("translate_open") == "zh_Hant_" { //繁体先不改 + sat.InitDefaultDict(sat.SetPath(cfg.WxappletFilepath.URL + "/" + "sat.txt")) //使用自定义词库 + sat := sat.DefaultDict() + res := sat.ReadReverse(str) + list := strings.Split(res, "http") + imgList := []string{".png", ".jpg", ".jpeg", ".gif"} + for _, v := range list { + for _, v1 := range imgList { + if strings.Contains(v, v1) { //判断是不是有图片 有图片就截取 替换简繁体 + strs := strings.Split(v, v1) + if len(strs) > 0 { + oldStr := strs[0] + newStr := sat.Read(oldStr) + res = strings.ReplaceAll(res, oldStr, newStr) + } + } + } + } + return res + } + if c.GetString("translate_open") != "zh_Hant_" { //除了繁体,其他都走这里 + //简体---其他语言 + cTouString, err := cache.GetString("multi_language_c_to_" + c.GetString("translate_open")) + if err != nil { + return str + } + var cTou = make(map[string]string) + json.Unmarshal([]byte(cTouString), &cTou) + if len(cTou) == 0 { + return str + } + //其他语言--简体 + getString1, err1 := cache.GetString("multi_language_" + c.GetString("translate_open") + "_to_c") + if err1 != nil { + return str + } + var uToc = make(map[string]string) + json.Unmarshal([]byte(getString1), &uToc) + if len(uToc) == 0 { + return str + } + res := str + for k, v := range cTou { + res = strings.ReplaceAll(res, k, v) + } + list := strings.Split(res, "http") + imgList := []string{".png", ".jpg", ".jpeg", ".gif"} + for _, v := range list { + for _, v1 := range imgList { + if strings.Contains(v, v1) { //判断是不是有图片 有图片就截取 替换简繁体 + strs := strings.Split(v, v1) + if len(strs) > 0 { + oldStr := strs[0] + newStr := oldStr + for k2, v2 := range uToc { + newStr = strings.ReplaceAll(oldStr, k2, v2) + } + res = strings.ReplaceAll(res, oldStr, newStr) + } + } + } + } + return res + } + return str + +} + +func ReadReverse1(str, types string) string { + res := map[string]map[string]string{} + err := cache.GetJson("multi_language", &res) + if err != nil { + return str + } + for k, v := range res { + str = strings.ReplaceAll(str, k, v[types]) + } + resStr := str + list := strings.Split(resStr, "http") + imgList := []string{".png", ".jpg", ".jpeg", ".gif"} + for _, v := range list { + for _, v1 := range imgList { + if strings.Contains(v, v1) { //判断是不是有图片 有图片就截取 替换简繁体 + strs := strings.Split(v, v1) + if len(strs) > 0 { + oldStr := strs[0] + for k2, v2 := range res { + if v2[types] == oldStr { + resStr = strings.ReplaceAll(resStr, oldStr, k2) + } + } + //res = strings.ReplaceAll(res, oldStr, newStr) + } + } + } + } + return resStr +} diff --git a/app/utils/trim_html.go b/app/utils/trim_html.go new file mode 100644 index 0000000..f796f32 --- /dev/null +++ b/app/utils/trim_html.go @@ -0,0 +1,38 @@ +package utils + +import ( + "regexp" + "strings" +) + +func TrimHtml(src string) string { + re, _ := regexp.Compile("<[\\S\\s]+?>") + src = re.ReplaceAllStringFunc(src, strings.ToLower) + + re, _ = regexp.Compile("") + src = re.ReplaceAllString(src, "") + + re, _ = regexp.Compile("") + src = re.ReplaceAllString(src, "") + + re, _ = regexp.Compile("<[\\S\\s]+?>") + src = re.ReplaceAllString(src, "\n") + + re, _ = regexp.Compile("\\s{2,}") + src = re.ReplaceAllString(src, "\n") + + return strings.TrimSpace(src) +} + +func TrimScript(src string) string { + re, _ := regexp.Compile("<[\\S\\s]+?>") + src = re.ReplaceAllStringFunc(src, strings.ToLower) + re, _ = regexp.Compile("") + src = re.ReplaceAllString(src, "") + + re, _ = regexp.Compile("") + + src = re.ReplaceAllString(src, "") + + return src +} diff --git a/app/utils/uuid.go b/app/utils/uuid.go new file mode 100644 index 0000000..346b7b2 --- /dev/null +++ b/app/utils/uuid.go @@ -0,0 +1,61 @@ +package utils + +import ( + "fmt" + "math/rand" + "time" +) + +const ( + KC_RAND_KIND_NUM = 0 // 纯数字 + KC_RAND_KIND_LOWER = 1 // 小写字母 + KC_RAND_KIND_UPPER = 2 // 大写字母 + KC_RAND_KIND_ALL = 3 // 数字、大小写字母 +) + +func newUUID() *[16]byte { + u := &[16]byte{} + rand.Read(u[:16]) + u[8] = (u[8] | 0x80) & 0xBf + u[6] = (u[6] | 0x40) & 0x4f + return u +} + +func UUIDString() string { + u := newUUID() + return fmt.Sprintf("%x-%x-%x-%x-%x", u[:4], u[4:6], u[6:8], u[8:10], u[10:]) +} + +func UUIDHexString() string { + u := newUUID() + return fmt.Sprintf("%x%x%x%x%x", u[:4], u[4:6], u[6:8], u[8:10], u[10:]) +} +func UUIDBinString() string { + u := newUUID() + return fmt.Sprintf("%s", [16]byte(*u)) +} + +func Krand(size int, kind int) []byte { + ikind, kinds, result := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size) + isAll := kind > 2 || kind < 0 + rand.Seed(time.Now().UnixNano()) + for i := 0; i < size; i++ { + if isAll { // random ikind + ikind = rand.Intn(3) + } + scope, base := kinds[ikind][0], kinds[ikind][1] + result[i] = uint8(base + rand.Intn(scope)) + } + return result +} + +// OrderUUID is only num for uuid +func OrderUUID(uid int) string { + ustr := IntToStr(uid) + tstr := Int64ToStr(time.Now().Unix()) + ulen := len(ustr) + tlen := len(tstr) + rlen := 18 - ulen - tlen + krb := Krand(rlen, KC_RAND_KIND_NUM) + return ustr + tstr + string(krb) +} diff --git a/applet.sql b/applet.sql new file mode 100644 index 0000000..24b077e --- /dev/null +++ b/applet.sql @@ -0,0 +1,133 @@ +/* +SQLyog Ultimate +MySQL - 5.7.25-28 : Database - applet +********************************************************************* +*/ + +/*!40101 SET NAMES utf8 */; + +/*!40101 SET SQL_MODE=''*/; + +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +/*Table structure for table `adm_profile` */ + +DROP TABLE IF EXISTS `adm_profile`; + +CREATE TABLE `adm_profile` ( + `adm_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `adm_name` varchar(64) NOT NULL COMMENT '姓名', + `adm_psw` char(32) NOT NULL COMMENT '密码', + `salt` char(6) NOT NULL DEFAULT '' COMMENT '加密盐', + `state` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0关闭,1正常', + `is_super` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否超管', + `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`adm_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员信息'; + +/*Data for the table `adm_profile` */ + +/*Table structure for table `log_api` */ + +DROP TABLE IF EXISTS `log_api`; + +CREATE TABLE `log_api` ( + `req_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '请求ID', + `req_ip` varchar(15) NOT NULL DEFAULT '' COMMENT '请求用户IP', + `req_header` varchar(2047) NOT NULL DEFAULT '', + `req_body` varchar(2047) NOT NULL DEFAULT '', + `resp_body` text, + `req_time` bigint(20) DEFAULT '0' COMMENT '请求时间,ms', + `resp_time` bigint(20) DEFAULT '0' COMMENT '响应时间,ms', + `duration` bigint(20) DEFAULT '0' COMMENT '处理时长,ms', + PRIMARY KEY (`req_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='api请求记录'; + +/*Data for the table `log_api` */ + +/*Table structure for table `sys_cfg` */ + +DROP TABLE IF EXISTS `sys_cfg`; + +CREATE TABLE `sys_cfg` ( + `key` varchar(255) NOT NULL COMMENT '键', + `value` text NOT NULL COMMENT '值', + `memo` varchar(127) NOT NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统设置'; + +/*Data for the table `sys_cfg` */ + +insert into `sys_cfg`(`key`,`value`,`memo`) values +('site_name','这只是个小程序','网站名称'), +('tb_access_key','123123',''); + +/*Table structure for table `sys_module` */ + +DROP TABLE IF EXISTS `sys_module`; + +CREATE TABLE `sys_module` ( + `mod_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `mod_pid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父级模块ID', + `mod_name` varchar(255) NOT NULL DEFAULT '' COMMENT '模块名称', + `position` varchar(512) NOT NULL DEFAULT '' COMMENT '位置', + `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题', + `subtitle` varchar(255) NOT NULL DEFAULT '' COMMENT '副标题', + `icon` varchar(512) NOT NULL DEFAULT '' COMMENT '图标', + `img` varchar(512) NOT NULL DEFAULT '' COMMENT '图片', + `font-color` varchar(128) NOT NULL DEFAULT '' COMMENT '文字颜色', + `bg_img` varchar(512) NOT NULL DEFAULT '' COMMENT '背景图片', + `bg_color` varchar(512) NOT NULL DEFAULT '' COMMENT '背景颜色', + `badge` varchar(512) NOT NULL DEFAULT '' COMMENT 'badge图片', + `path` varchar(255) NOT NULL DEFAULT '' COMMENT '跳转路径', + `data` text COMMENT '内容', + `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', + `state` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '0不显示,1显示', + `is_global` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否全局显示', + `device` varchar(255) NOT NULL DEFAULT 'wx_applet' COMMENT '使用设备,wx_applet,toutiao_applet,baidu_,toutiao_applet,tiktok_,toutiao_applet,baidu_applet,wap,android,ios', + `create_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', + `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`mod_id`) +) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='系统模块'; + +/*Data for the table `sys_module` */ + +insert into `sys_module`(`mod_id`,`mod_pid`,`mod_name`,`position`,`title`,`subtitle`,`icon`,`img`,`font-color`,`bg_img`,`bg_color`,`badge`,`path`,`data`,`sort`,`state`,`is_global`,`device`,`create_at`,`update_at`) values +(1,0,'index','','首页','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:18:44'), +(2,0,'nav','','底部导航','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:18:42'), +(3,0,'genre','','分类','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:16:34'), +(4,0,'person','','个人中心','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:17:44'), +(5,2,'nav_home','nav','首页','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:21:07'), +(6,2,'nav_channel','nav','分类','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:25:06'), +(7,2,'nav_person','nav','个人','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:28:36'), +(8,0,'index_title','index','嗨如意','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:29:04'), +(9,0,'index_search','index','','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:31:13'), +(10,0,'index_search_placeholder','search','','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:32:07'), +(11,0,'index_search_icon','search','','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:32:07'), +(12,0,'index_search_button','search','搜索','','','','','','','','',NULL,0,1,0,'wx_applet',0,'2020-08-15 16:32:16'); + +/*Table structure for table `user_profile` */ + +DROP TABLE IF EXISTS `user_profile`; + +CREATE TABLE `user_profile` ( + `uid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `username` varchar(32) NOT NULL COMMENT '用户名', + `password` char(32) NOT NULL COMMENT '密码', + `avatar` varchar(255) DEFAULT NULL COMMENT '头像', + `phone` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号码', + `level` tinyint(1) NOT NULL, + `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +/*Data for the table `user_profile` */ + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..bafcb6e --- /dev/null +++ b/build.sh @@ -0,0 +1,18 @@ +echo "update -> repo" +git fetch +git reset --hard origin/master +echo "update repo -> Success" + +id="git rev-parse --short HEAD" +export ZYOS_APP_COMMIT_ID=`eval $id` +echo "GET the Commit ID for git -> $ZYOS_APP_COMMIT_ID" + +echo "Start build image " + +image_name=registry-vpc.cn-shenzhen.aliyuncs.com/fnuoos-prd/zyos_community_team:${ZYOS_APP_COMMIT_ID} +#final_image_name=registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/zyos:${ZYOS_APP_COMMIT_ID} +docker build -t ${image_name} . + +docker push ${image_name} +echo "Push image -> $image_name Success" +export ZYOS_APP_LATEST_VERSION=${image_name} \ No newline at end of file diff --git a/cmd/task/main.go b/cmd/task/main.go new file mode 100644 index 0000000..c4b4113 --- /dev/null +++ b/cmd/task/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + "os" + "os/signal" + "syscall" + + "applet/app/cfg" + "applet/app/db" + "applet/app/task" + "applet/app/utils/logx" +) + +func init() { + cfg.InitTaskCfg() + cfg.InitLog() + cfg.InitCache() + cfg.InitCacheSecond() + cfg.InitEs() //ElasticSearch初始化 + cfg.InitMq() + baseDb := *cfg.DB + baseDb.Path = fmt.Sprintf(cfg.DB.Path, cfg.DB.Name) + if err := db.InitDB(&baseDb); err != nil { + panic(err) + } + if err := db.InitZhimengDB(cfg.ZhimengDB); err != nil { + panic(err) + } + //utils.CurlDebug = true + cfg.InitMemCache() +} + +func main() { + go func() { + task.Init() + task.Run() + }() + // graceful shutdown + quit := make(chan os.Signal) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + _ = logx.Info("Server exiting...") +} diff --git a/cmd_db.bat b/cmd_db.bat new file mode 100644 index 0000000..7a9e8d5 --- /dev/null +++ b/cmd_db.bat @@ -0,0 +1,25 @@ +@echo off + +set Table=* +set TName="" +set one=%1 + +if "%one%" NEQ "" ( + set Table=%one% + set TName="^%one%$" +) + +set BasePath="./" +set DBUSER="root" +set DBPSW="Fnuo123com@" +set DBNAME="fnuoos_test1" +set DBHOST="119.23.182.117" +set DBPORT="3306" + +del "app\db\model\%Table%.go" + +echo start reverse table %Table% + +xorm reverse mysql "%DBUSER%:%DBPSW%@tcp(%DBHOST%:%DBPORT%)/%DBNAME%?charset=utf8" %BasePath%/etc/db_tpl %BasePath%/app/db/model/ %TName% + +echo end \ No newline at end of file diff --git a/cmd_db.sh b/cmd_db.sh new file mode 100644 index 0000000..ab769e2 --- /dev/null +++ b/cmd_db.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# 使用方法, 直接执行该脚本更新所有表, cmd_db.sh 表名, 如 ./cmd_db.sh tableName + +Table=* +TName="" +if [ "$1" ] ;then + Table=$1 + TName="^$1$" +fi + +BasePath="./" +DBUSER="root" +DBPSW="Fnuo123com@" +DBNAME="fnuoos_test1" +DBHOST="119.23.182.117" +DBPORT="3306" + +rm -rf $BasePath/app/db/model/$Table.go && \ + +xorm reverse mysql "$DBUSER:$DBPSW@tcp($DBHOST:$DBPORT)/$DBNAME?charset=utf8" $BasePath/etc/db_tpl $BasePath/app/db/model/ $TName \ No newline at end of file diff --git a/cmd_run.bat b/cmd_run.bat new file mode 100644 index 0000000..51d7b81 --- /dev/null +++ b/cmd_run.bat @@ -0,0 +1,12 @@ +@echo off + +set BasePath=%~dp0 +set APP=applet.exe +set CfgPath=%BasePath%\etc\cfg.yml + +del %BasePath%\bin\%APP% + +go build -o %BasePath%\bin\%APP% %BasePath%\cmd\main.go && %BasePath%\bin\%APP% -c=%CfgPath% + + +pause diff --git a/cmd_run.sh b/cmd_run.sh new file mode 100644 index 0000000..6758f1b --- /dev/null +++ b/cmd_run.sh @@ -0,0 +1,8 @@ +#!/bin/bash +APP=applet +BasePath=$(dirname $(readlink -f $0)) +CfgPath=$BasePath/etc/cfg.yml +cd $BasePath +rm -rf $BasePath/bin/$APP +go build -o $BasePath/bin/$APP $BasePath/main.go \ +&& $BasePath/bin/$APP -c=$CfgPath \ No newline at end of file diff --git a/cmd_task.bat b/cmd_task.bat new file mode 100644 index 0000000..f70eabc --- /dev/null +++ b/cmd_task.bat @@ -0,0 +1,13 @@ +@echo off + +set Name=task +set BasePath=%~dp0 +set APP=%Name%.exe +set CfgPath=%BasePath%etc\%Name%.yml + +del %BasePath%\bin\%APP% + +go build -o %BasePath%\bin\%APP% %BasePath%\cmd\%Name%\main.go && %BasePath%\bin\%APP% -c=%CfgPath% + + +pause diff --git a/cmd_task.sh b/cmd_task.sh new file mode 100644 index 0000000..8f7da10 --- /dev/null +++ b/cmd_task.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +APP=task +BasePath=$(dirname $(readlink -f $0)) +CfgPath=$BasePath/etc/task.yml +cd $BasePath +rm -rf $BasePath/bin/$APP +go build -o $BasePath/bin/$APP $BasePath/cmd/$APP/main.go \ +&& $BasePath/bin/$APP -c=$CfgPath \ No newline at end of file diff --git a/docs/docs.go b/docs/docs.go new file mode 100644 index 0000000..3e7d945 --- /dev/null +++ b/docs/docs.go @@ -0,0 +1,1708 @@ +// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// This file was generated by swaggo/swag + +package docs + +import ( + "bytes" + "encoding/json" + "strings" + + "github.com/alecthomas/template" + "github.com/swaggo/swag" +) + +var doc = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{.Description}}", + "title": "{{.Title}}", + "termsOfService": "智莺生活后端组", + "contact": { + "name": "sherlockwhite" + }, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/api/v1/acq/fix": { + "get": { + "description": "拉新活动--fix", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新活动--fix", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/home": { + "post": { + "description": "本期榜单/上期榜单/我的邀请人数和奖励/任务列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新--首页数据", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/qrcode": { + "get": { + "description": "二维码", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新--邀请二维码", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/reward/detail": { + "post": { + "description": "拉新活动--我的奖励明细", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新活动--我的奖励明细", + "parameters": [ + { + "description": "1为以发放,2为待发放,3为失效", + "name": "state", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/reward_receive": { + "post": { + "description": "拉新活动--领取奖励", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新活动--领取奖励", + "parameters": [ + { + "description": "任务ID", + "name": "job_id", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/credit/card/config": { + "get": { + "description": "获取信用卡配置", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "信用卡" + ], + "summary": "获取信用卡配置", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/detail": { + "post": { + "description": "多麦商城--商城详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--商城详情", + "parameters": [ + { + "description": "商城id", + "name": "brand_id", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/home": { + "get": { + "description": "多麦商城--首页数据", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--首页数据", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/search": { + "post": { + "description": "多麦商城--搜索", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--搜索", + "parameters": [ + { + "description": "搜索关键词", + "name": "key", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/update": { + "get": { + "description": "多麦商城--更新数据", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--更新数据", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/logistic/query": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "物流" + ], + "summary": "快递100物流查询", + "parameters": [ + { + "description": "logisticQueryReq", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.logisticQueryReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"该快递公司不支持查询\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/mod/pub.flutter.duomai.mall.detail.page": { + "get": { + "description": "多麦商城详情页样式", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城详情页样式", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/mod/pub.flutter.duomai.mall.home.page": { + "get": { + "description": "多麦商城首页样式", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城首页样式", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/mod/pub.flutter.duomai.mall.search.page": { + "get": { + "description": "多麦商城搜索页样式", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城搜索页样式", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/card/activation": { + "post": { + "description": "权益卡激活", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡激活", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.privilegeOpenCardCheckReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/open_card/check": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡卡号卡密检测", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.privilegeOpenCardCheckReq" + } + } + ], + "responses": { + "200": { + "description": "0:不存在 1:已经被使用 2:可用", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/open_card/order_query": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡开卡订单查询页面", + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/hdl.PrivilegeOpenCardOrdQueryPageResp" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"验证码错误\"}", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡开卡订单查询", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.PrivilegeOpenCardOrdQueryReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/model.PrivilegeOpenCardOrd" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"验证码错误\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/open_card/order_suc": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "订单支付成功页面", + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/model.PrivilegeOpenCardOrd" + } + } + } + } + }, + "/api/v1/privilege/open_card/pay_page": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡开卡支付页面", + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/hdl.privilegeOpenCardPayPageResp" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"权益卡配置缺失\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/shake_ticket/:goods_id/:type": { + "get": { + "description": "收藏/领券买/分享赚", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "抖券" + ], + "summary": "抖券商品收藏/领券买/分享赚", + "parameters": [ + { + "type": "string", + "description": "商品id", + "name": "goods_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "类型(0取消收藏,1收藏,2点击 领券买,3点击分享赚)", + "name": "type", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/shake_ticket_list": { + "get": { + "description": "定向计划/高佣专场/精选低价包邮/偏远地区包邮/抖货商品/各大榜单商品/今日值得买", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "抖券" + ], + "summary": "抖券商品推荐列表", + "parameters": [ + { + "type": "string", + "description": "页码", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page_size", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "分类id(3定向计划/4高佣专场/5精选低价包邮/6偏远地区包邮/7抖货商品/8各大榜单商品/9今日值得买)", + "name": "category_id", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "渠道", + "name": "pvd", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/md.IndexRecommendList" + } + } + } + } + }, + "/api/v1/sign/fast/in": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "登录、注册" + ], + "summary": "用户手机快速登录", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/md.FastLoginRequestBody" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/md.LoginResponse" + } + }, + "400": { + "description": "{\"code\":400001,\"data\":[],\"msg\":\"请求参数错误\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/sub_region_list": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "获取区域id下的区域", + "parameters": [ + { + "type": "string", + "description": "上级地区类型:root(查询省级列表)、province(省级ID下的城市)、city(市级id下的区域)", + "name": "parent", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "上级地区id", + "name": "id", + "in": "query" + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/hdl.resultItem" + } + } + }, + "400": { + "description": "{\"code\":400001,\"data\":[],\"msg\":\"请求参数错误\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/address/:id": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址详情", + "parameters": [ + { + "type": "string", + "description": "地址id", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/model.UserAddress" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"地址不存在\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/address/delete/:id": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址删除", + "parameters": [ + { + "type": "string", + "description": "ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"地址不存在\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/address/update": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址新增、编辑", + "parameters": [ + { + "description": "json参数,Id不传为新增", + "name": "\"\"", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.updateAddressReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"地址不存在\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/addresses": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址列表", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/model.UserAddress" + } + } + }, + "500": { + "description": "{\"code\":500000,\"data\":[],\"msg\":\"数据库操作失败\"}", + "schema": { + "type": "string" + } + } + } + } + } + }, + "definitions": { + "hdl.PrivilegeOpenCardOrdQueryPageResp": { + "type": "object", + "properties": { + "btn_bg_color_1": { + "type": "string" + }, + "btn_bg_color_2": { + "type": "string" + }, + "btn_text": { + "type": "string" + }, + "btn_text_color": { + "type": "string" + }, + "header_img": { + "type": "string" + }, + "logistic_company": { + "type": "array", + "items": { + "$ref": "#/definitions/model.LogisticCompany" + } + } + } + }, + "hdl.PrivilegeOpenCardOrdQueryReq": { + "type": "object", + "required": [ + "com", + "num" + ], + "properties": { + "com": { + "description": "快递公司名称", + "type": "string" + }, + "num": { + "description": "快递单号", + "type": "string" + } + } + }, + "hdl.logisticQueryReq": { + "type": "object", + "required": [ + "com", + "num" + ], + "properties": { + "com": { + "description": "快递公司名称", + "type": "string" + }, + "num": { + "description": "快递单号", + "type": "string" + } + } + }, + "hdl.privilegeOpenCardCheckReq": { + "type": "object", + "required": [ + "key", + "num" + ], + "properties": { + "key": { + "description": "卡密", + "type": "string" + }, + "num": { + "description": "卡号", + "type": "string" + } + } + }, + "hdl.privilegeOpenCardPayPageResp": { + "type": "object", + "properties": { + "amount": { + "description": "付费金额", + "type": "string" + }, + "card_type": { + "description": "卡的类型:\"1\"实体卡 \"2\"虚拟卡", + "type": "string" + }, + "date_type": { + "description": "日期类型:month:月 season:季 year:年 forever:永久", + "type": "string" + }, + "page_style": { + "description": "页面样式", + "$ref": "#/definitions/hdl.privilegeOpenCardPayStyle" + } + } + }, + "hdl.privilegeOpenCardPayStyle": { + "type": "object", + "properties": { + "exclusive_privilege": { + "description": "专属特权", + "type": "array", + "items": { + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "brand_img": { + "type": "string" + }, + "brand_img_url": { + "type": "string" + }, + "brand_name": { + "type": "string" + }, + "is_show": { + "type": "string" + }, + "sub_title": { + "type": "string" + } + } + } + }, + "payment_btn": { + "description": "底部支付按钮", + "type": "array", + "items": { + "type": "object", + "properties": { + "bg_img": { + "type": "string" + }, + "bg_img_url": { + "type": "string" + }, + "func": { + "type": "string" + }, + "name": { + "type": "string" + }, + "text": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "payment_choose_icon": { + "description": "支付方式选中、未选中图标", + "type": "array", + "items": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "icon_url": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "payment_style": { + "description": "支付方式", + "type": "array", + "items": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "icon_url": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "style": { + "description": "头部样式", + "type": "object", + "properties": { + "header_bg_img": { + "type": "string" + }, + "header_bg_img_url": { + "type": "string" + }, + "special_deals_img": { + "type": "string" + }, + "special_deals_img_url": { + "type": "string" + }, + "special_deals_text": { + "type": "string" + } + } + } + } + }, + "hdl.resultItem": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "440100000000" + }, + "name": { + "type": "string", + "example": "city" + } + } + }, + "hdl.updateAddressReq": { + "type": "object", + "required": [ + "city_id", + "county_id", + "detail", + "phone", + "province_id", + "receiver" + ], + "properties": { + "city_id": { + "type": "string" + }, + "county_id": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "phone": { + "type": "string" + }, + "post_code": { + "type": "string" + }, + "province_id": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "md.Apple": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "md.FastLoginRequestBody": { + "type": "object", + "properties": { + "apple": { + "$ref": "#/definitions/md.Apple" + }, + "captcha": { + "type": "string" + }, + "is_not_create": { + "type": "string" + }, + "mobile": { + "type": "string" + }, + "parent_uid": { + "type": "string" + }, + "qq": { + "$ref": "#/definitions/md.QQLogin" + }, + "return_user_msg": { + "type": "string" + }, + "taobao": { + "$ref": "#/definitions/md.TaobaoLogin" + }, + "wechat": { + "$ref": "#/definitions/md.WeChat" + }, + "wechat_mini": { + "$ref": "#/definitions/md.WeChatMiniApp" + }, + "zone": { + "type": "string" + } + } + }, + "md.IndexRecommendList": { + "type": "object", + "properties": { + "good": { + "type": "array", + "items": { + "$ref": "#/definitions/md.RecommendGood" + } + }, + "provider": { + "description": "BarTitleList []BarTitle ` + "`" + `json:\"bar_title_list\"` + "`" + `", + "type": "string" + } + } + }, + "md.LoginResponse": { + "type": "object", + "properties": { + "bind_phone_enable": { + "type": "string" + }, + "is_pid": { + "type": "string" + }, + "perms": { + "type": "array", + "items": { + "type": "string" + } + }, + "phone": { + "type": "string" + }, + "register_invite_code_enable": { + "type": "string" + }, + "register_popup_condition": { + "description": "弹出类型设置", + "$ref": "#/definitions/md.RegisterPopupCondition" + }, + "token": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "username": { + "type": "string" + }, + "wechat_applet_open_id": { + "type": "string" + }, + "wechat_union_id": { + "type": "string" + } + } + }, + "md.Marquee": { + "type": "object", + "properties": { + "avatar_url": { + "type": "string" + }, + "content": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "md.ProductDetailResponse": { + "type": "object", + "properties": { + "commission": { + "type": "string" + }, + "coupon_price": { + "type": "string" + }, + "good_id": { + "type": "string" + }, + "mod_list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "provider": { + "type": "string" + }, + "provider_name": { + "type": "string" + }, + "shop_avatar": { + "type": "string" + } + } + }, + "md.QQLogin": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "expires_in": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "pay_token": { + "type": "string" + }, + "pf": { + "type": "string" + }, + "pf_key": { + "type": "string" + }, + "province": { + "type": "string" + }, + "ret": { + "type": "string" + }, + "unionid": { + "type": "string" + } + } + }, + "md.RecommendGood": { + "type": "object", + "properties": { + "commission": { + "type": "string" + }, + "coupon": { + "type": "string" + }, + "current_price": { + "type": "string" + }, + "detail_data": { + "$ref": "#/definitions/md.ProductDetailResponse" + }, + "good_id": { + "type": "string" + }, + "good_image": { + "type": "string" + }, + "good_title": { + "type": "string" + }, + "inorder_count": { + "type": "string" + }, + "is_collect": { + "type": "integer" + }, + "is_coupons": { + "type": "integer" + }, + "is_share": { + "type": "integer" + }, + "market_price": { + "type": "string" + }, + "marquee_list": { + "type": "array", + "items": { + "$ref": "#/definitions/md.Marquee" + } + }, + "provider": { + "type": "string" + }, + "provider_name": { + "type": "string" + }, + "pvd": { + "type": "string" + }, + "shop_avatar": { + "type": "string" + }, + "shop_name": { + "type": "string" + }, + "video": { + "type": "string" + } + } + }, + "md.RegisterPopupCondition": { + "type": "object", + "properties": { + "invite_code": { + "description": "邀请码设置:弹出类型是激活码的时候起作用", + "type": "object", + "properties": { + "popup": { + "description": "是否弹出 “0”否 “1”是", + "type": "string" + }, + "should_input": { + "description": "是否必填 “0”否 “1”是", + "type": "string" + } + } + }, + "popup_type": { + "description": "弹出类型:“0”关闭 ”1”激活码 “2”邀请码", + "type": "string" + }, + "should_input": { + "description": "是否必填 “0”否 “1”是", + "type": "string" + } + } + }, + "md.TaobaoLogin": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "auth_code": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "nick_name": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "sid": { + "type": "string" + } + } + }, + "md.WeChat": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "expires_in": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "pay_token": { + "type": "string" + }, + "pf": { + "type": "string" + }, + "pf_key": { + "type": "string" + }, + "province": { + "type": "string" + }, + "ret": { + "type": "string" + }, + "unionid": { + "type": "string" + } + } + }, + "md.WeChatMiniApp": { + "type": "object", + "properties": { + "avatar": { + "type": "string" + }, + "code": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "unionid": { + "type": "string" + } + } + }, + "model.LogisticCompany": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "model.PrivilegeOpenCardOrd": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "after_sale_id": { + "type": "integer" + }, + "card_key": { + "type": "string" + }, + "card_num": { + "type": "string" + }, + "card_type": { + "type": "integer" + }, + "cost_price": { + "type": "string" + }, + "create_time": { + "type": "string" + }, + "date_type": { + "type": "integer" + }, + "given_data": { + "type": "string" + }, + "logistic_company": { + "type": "string" + }, + "logistic_num": { + "type": "string" + }, + "ord_id": { + "type": "integer" + }, + "pay_channel": { + "type": "integer" + }, + "pay_time": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "settle_at": { + "type": "integer" + }, + "state": { + "type": "integer" + }, + "uid": { + "type": "integer" + }, + "update_time": { + "type": "string" + } + } + }, + "model.UserAddress": { + "type": "object", + "properties": { + "city_id": { + "type": "string" + }, + "city_name": { + "type": "string" + }, + "county_id": { + "type": "string" + }, + "county_name": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "phone": { + "type": "string" + }, + "post_code": { + "type": "string" + }, + "province_id": { + "type": "string" + }, + "province_name": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "uid": { + "type": "integer" + } + } + } + }, + "securityDefinitions": { + "MasterID": { + "type": "apiKey", + "name": "MasterID", + "in": "header" + } + } +}` + +type swaggerInfo struct { + Version string + Host string + BasePath string + Schemes []string + Title string + Description string +} + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = swaggerInfo{ + Version: "1.0", + Host: "localhost:5000", + BasePath: "/", + Schemes: []string{}, + Title: "智莺生活移动端接口", + Description: "移动端接口", +} + +type s struct{} + +func (s *s) ReadDoc() string { + sInfo := SwaggerInfo + sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1) + + t, err := template.New("swagger_info").Funcs(template.FuncMap{ + "marshal": func(v interface{}) string { + a, _ := json.Marshal(v) + return string(a) + }, + }).Parse(doc) + if err != nil { + return doc + } + + var tpl bytes.Buffer + if err := t.Execute(&tpl, sInfo); err != nil { + return doc + } + + return tpl.String() +} + +func init() { + swag.Register(swag.Name, &s{}) +} diff --git a/docs/swagger.json b/docs/swagger.json new file mode 100644 index 0000000..527c14e --- /dev/null +++ b/docs/swagger.json @@ -0,0 +1,1646 @@ +{ + "swagger": "2.0", + "info": { + "description": "移动端接口", + "title": "智莺生活移动端接口", + "termsOfService": "智莺生活后端组", + "contact": { + "name": "sherlockwhite" + }, + "version": "1.0" + }, + "host": "localhost:5000", + "basePath": "/", + "paths": { + "/api/v1/acq/fix": { + "get": { + "description": "拉新活动--fix", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新活动--fix", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/home": { + "post": { + "description": "本期榜单/上期榜单/我的邀请人数和奖励/任务列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新--首页数据", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/qrcode": { + "get": { + "description": "二维码", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新--邀请二维码", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/reward/detail": { + "post": { + "description": "拉新活动--我的奖励明细", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新活动--我的奖励明细", + "parameters": [ + { + "description": "1为以发放,2为待发放,3为失效", + "name": "state", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/acquisition/reward_receive": { + "post": { + "description": "拉新活动--领取奖励", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "拉新活动" + ], + "summary": "拉新活动--领取奖励", + "parameters": [ + { + "description": "任务ID", + "name": "job_id", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/credit/card/config": { + "get": { + "description": "获取信用卡配置", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "信用卡" + ], + "summary": "获取信用卡配置", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/detail": { + "post": { + "description": "多麦商城--商城详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--商城详情", + "parameters": [ + { + "description": "商城id", + "name": "brand_id", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/home": { + "get": { + "description": "多麦商城--首页数据", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--首页数据", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/search": { + "post": { + "description": "多麦商城--搜索", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--搜索", + "parameters": [ + { + "description": "搜索关键词", + "name": "key", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/duomai/mall/update": { + "get": { + "description": "多麦商城--更新数据", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城--更新数据", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/logistic/query": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "物流" + ], + "summary": "快递100物流查询", + "parameters": [ + { + "description": "logisticQueryReq", + "name": "req", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.logisticQueryReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"该快递公司不支持查询\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/mod/pub.flutter.duomai.mall.detail.page": { + "get": { + "description": "多麦商城详情页样式", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城详情页样式", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/mod/pub.flutter.duomai.mall.home.page": { + "get": { + "description": "多麦商城首页样式", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城首页样式", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/mod/pub.flutter.duomai.mall.search.page": { + "get": { + "description": "多麦商城搜索页样式", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "多麦商城" + ], + "summary": "多麦商城搜索页样式", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/card/activation": { + "post": { + "description": "权益卡激活", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡激活", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.privilegeOpenCardCheckReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/open_card/check": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡卡号卡密检测", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.privilegeOpenCardCheckReq" + } + } + ], + "responses": { + "200": { + "description": "0:不存在 1:已经被使用 2:可用", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/open_card/order_query": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡开卡订单查询页面", + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/hdl.PrivilegeOpenCardOrdQueryPageResp" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"验证码错误\"}", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡开卡订单查询", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.PrivilegeOpenCardOrdQueryReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/model.PrivilegeOpenCardOrd" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"验证码错误\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/privilege/open_card/order_suc": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "订单支付成功页面", + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/model.PrivilegeOpenCardOrd" + } + } + } + } + }, + "/api/v1/privilege/open_card/pay_page": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "权益卡" + ], + "summary": "权益卡开卡支付页面", + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/hdl.privilegeOpenCardPayPageResp" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"权益卡配置缺失\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/shake_ticket/:goods_id/:type": { + "get": { + "description": "收藏/领券买/分享赚", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "抖券" + ], + "summary": "抖券商品收藏/领券买/分享赚", + "parameters": [ + { + "type": "string", + "description": "商品id", + "name": "goods_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "类型(0取消收藏,1收藏,2点击 领券买,3点击分享赚)", + "name": "type", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/shake_ticket_list": { + "get": { + "description": "定向计划/高佣专场/精选低价包邮/偏远地区包邮/抖货商品/各大榜单商品/今日值得买", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "抖券" + ], + "summary": "抖券商品推荐列表", + "parameters": [ + { + "type": "string", + "description": "页码", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page_size", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "分类id(3定向计划/4高佣专场/5精选低价包邮/6偏远地区包邮/7抖货商品/8各大榜单商品/9今日值得买)", + "name": "category_id", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "渠道", + "name": "pvd", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/md.IndexRecommendList" + } + } + } + } + }, + "/api/v1/sign/fast/in": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "登录、注册" + ], + "summary": "用户手机快速登录", + "parameters": [ + { + "description": "json", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/md.FastLoginRequestBody" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/md.LoginResponse" + } + }, + "400": { + "description": "{\"code\":400001,\"data\":[],\"msg\":\"请求参数错误\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/sub_region_list": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "获取区域id下的区域", + "parameters": [ + { + "type": "string", + "description": "上级地区类型:root(查询省级列表)、province(省级ID下的城市)、city(市级id下的区域)", + "name": "parent", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "上级地区id", + "name": "id", + "in": "query" + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/hdl.resultItem" + } + } + }, + "400": { + "description": "{\"code\":400001,\"data\":[],\"msg\":\"请求参数错误\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/address/:id": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址详情", + "parameters": [ + { + "type": "string", + "description": "地址id", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "$ref": "#/definitions/model.UserAddress" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"地址不存在\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/address/delete/:id": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址删除", + "parameters": [ + { + "type": "string", + "description": "ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"地址不存在\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/address/update": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址新增、编辑", + "parameters": [ + { + "description": "json参数,Id不传为新增", + "name": "\"\"", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hdl.updateAddressReq" + } + } + ], + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "string" + } + }, + "400": { + "description": "{\"code\":400000,\"data\":[],\"msg\":\"地址不存在\"}", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/user/addresses": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "地址" + ], + "summary": "用户地址列表", + "responses": { + "200": { + "description": "ok", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/model.UserAddress" + } + } + }, + "500": { + "description": "{\"code\":500000,\"data\":[],\"msg\":\"数据库操作失败\"}", + "schema": { + "type": "string" + } + } + } + } + } + }, + "definitions": { + "hdl.PrivilegeOpenCardOrdQueryPageResp": { + "type": "object", + "properties": { + "btn_bg_color_1": { + "type": "string" + }, + "btn_bg_color_2": { + "type": "string" + }, + "btn_text": { + "type": "string" + }, + "btn_text_color": { + "type": "string" + }, + "header_img": { + "type": "string" + }, + "logistic_company": { + "type": "array", + "items": { + "$ref": "#/definitions/model.LogisticCompany" + } + } + } + }, + "hdl.PrivilegeOpenCardOrdQueryReq": { + "type": "object", + "required": [ + "com", + "num" + ], + "properties": { + "com": { + "description": "快递公司名称", + "type": "string" + }, + "num": { + "description": "快递单号", + "type": "string" + } + } + }, + "hdl.logisticQueryReq": { + "type": "object", + "required": [ + "com", + "num" + ], + "properties": { + "com": { + "description": "快递公司名称", + "type": "string" + }, + "num": { + "description": "快递单号", + "type": "string" + } + } + }, + "hdl.privilegeOpenCardCheckReq": { + "type": "object", + "required": [ + "key", + "num" + ], + "properties": { + "key": { + "description": "卡密", + "type": "string" + }, + "num": { + "description": "卡号", + "type": "string" + } + } + }, + "hdl.privilegeOpenCardPayPageResp": { + "type": "object", + "properties": { + "amount": { + "description": "付费金额", + "type": "string" + }, + "card_type": { + "description": "卡的类型:\"1\"实体卡 \"2\"虚拟卡", + "type": "string" + }, + "date_type": { + "description": "日期类型:month:月 season:季 year:年 forever:永久", + "type": "string" + }, + "page_style": { + "description": "页面样式", + "$ref": "#/definitions/hdl.privilegeOpenCardPayStyle" + } + } + }, + "hdl.privilegeOpenCardPayStyle": { + "type": "object", + "properties": { + "exclusive_privilege": { + "description": "专属特权", + "type": "array", + "items": { + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "brand_img": { + "type": "string" + }, + "brand_img_url": { + "type": "string" + }, + "brand_name": { + "type": "string" + }, + "is_show": { + "type": "string" + }, + "sub_title": { + "type": "string" + } + } + } + }, + "payment_btn": { + "description": "底部支付按钮", + "type": "array", + "items": { + "type": "object", + "properties": { + "bg_img": { + "type": "string" + }, + "bg_img_url": { + "type": "string" + }, + "func": { + "type": "string" + }, + "name": { + "type": "string" + }, + "text": { + "type": "string" + }, + "text_color": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "payment_choose_icon": { + "description": "支付方式选中、未选中图标", + "type": "array", + "items": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "icon_url": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "payment_style": { + "description": "支付方式", + "type": "array", + "items": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "icon_url": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "style": { + "description": "头部样式", + "type": "object", + "properties": { + "header_bg_img": { + "type": "string" + }, + "header_bg_img_url": { + "type": "string" + }, + "special_deals_img": { + "type": "string" + }, + "special_deals_img_url": { + "type": "string" + }, + "special_deals_text": { + "type": "string" + } + } + } + } + }, + "hdl.resultItem": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "440100000000" + }, + "name": { + "type": "string", + "example": "city" + } + } + }, + "hdl.updateAddressReq": { + "type": "object", + "required": [ + "city_id", + "county_id", + "detail", + "phone", + "province_id", + "receiver" + ], + "properties": { + "city_id": { + "type": "string" + }, + "county_id": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "phone": { + "type": "string" + }, + "post_code": { + "type": "string" + }, + "province_id": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "md.Apple": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "md.FastLoginRequestBody": { + "type": "object", + "properties": { + "apple": { + "$ref": "#/definitions/md.Apple" + }, + "captcha": { + "type": "string" + }, + "is_not_create": { + "type": "string" + }, + "mobile": { + "type": "string" + }, + "parent_uid": { + "type": "string" + }, + "qq": { + "$ref": "#/definitions/md.QQLogin" + }, + "return_user_msg": { + "type": "string" + }, + "taobao": { + "$ref": "#/definitions/md.TaobaoLogin" + }, + "wechat": { + "$ref": "#/definitions/md.WeChat" + }, + "wechat_mini": { + "$ref": "#/definitions/md.WeChatMiniApp" + }, + "zone": { + "type": "string" + } + } + }, + "md.IndexRecommendList": { + "type": "object", + "properties": { + "good": { + "type": "array", + "items": { + "$ref": "#/definitions/md.RecommendGood" + } + }, + "provider": { + "description": "BarTitleList []BarTitle `json:\"bar_title_list\"`", + "type": "string" + } + } + }, + "md.LoginResponse": { + "type": "object", + "properties": { + "bind_phone_enable": { + "type": "string" + }, + "is_pid": { + "type": "string" + }, + "perms": { + "type": "array", + "items": { + "type": "string" + } + }, + "phone": { + "type": "string" + }, + "register_invite_code_enable": { + "type": "string" + }, + "register_popup_condition": { + "description": "弹出类型设置", + "$ref": "#/definitions/md.RegisterPopupCondition" + }, + "token": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "username": { + "type": "string" + }, + "wechat_applet_open_id": { + "type": "string" + }, + "wechat_union_id": { + "type": "string" + } + } + }, + "md.Marquee": { + "type": "object", + "properties": { + "avatar_url": { + "type": "string" + }, + "content": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "md.ProductDetailResponse": { + "type": "object", + "properties": { + "commission": { + "type": "string" + }, + "coupon_price": { + "type": "string" + }, + "good_id": { + "type": "string" + }, + "mod_list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + }, + "provider": { + "type": "string" + }, + "provider_name": { + "type": "string" + }, + "shop_avatar": { + "type": "string" + } + } + }, + "md.QQLogin": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "expires_in": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "pay_token": { + "type": "string" + }, + "pf": { + "type": "string" + }, + "pf_key": { + "type": "string" + }, + "province": { + "type": "string" + }, + "ret": { + "type": "string" + }, + "unionid": { + "type": "string" + } + } + }, + "md.RecommendGood": { + "type": "object", + "properties": { + "commission": { + "type": "string" + }, + "coupon": { + "type": "string" + }, + "current_price": { + "type": "string" + }, + "detail_data": { + "$ref": "#/definitions/md.ProductDetailResponse" + }, + "good_id": { + "type": "string" + }, + "good_image": { + "type": "string" + }, + "good_title": { + "type": "string" + }, + "inorder_count": { + "type": "string" + }, + "is_collect": { + "type": "integer" + }, + "is_coupons": { + "type": "integer" + }, + "is_share": { + "type": "integer" + }, + "market_price": { + "type": "string" + }, + "marquee_list": { + "type": "array", + "items": { + "$ref": "#/definitions/md.Marquee" + } + }, + "provider": { + "type": "string" + }, + "provider_name": { + "type": "string" + }, + "pvd": { + "type": "string" + }, + "shop_avatar": { + "type": "string" + }, + "shop_name": { + "type": "string" + }, + "video": { + "type": "string" + } + } + }, + "md.RegisterPopupCondition": { + "type": "object", + "properties": { + "invite_code": { + "description": "邀请码设置:弹出类型是激活码的时候起作用", + "type": "object", + "properties": { + "popup": { + "description": "是否弹出 “0”否 “1”是", + "type": "string" + }, + "should_input": { + "description": "是否必填 “0”否 “1”是", + "type": "string" + } + } + }, + "popup_type": { + "description": "弹出类型:“0”关闭 ”1”激活码 “2”邀请码", + "type": "string" + }, + "should_input": { + "description": "是否必填 “0”否 “1”是", + "type": "string" + } + } + }, + "md.TaobaoLogin": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "auth_code": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "nick_name": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "sid": { + "type": "string" + } + } + }, + "md.WeChat": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "expires_in": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "pay_token": { + "type": "string" + }, + "pf": { + "type": "string" + }, + "pf_key": { + "type": "string" + }, + "province": { + "type": "string" + }, + "ret": { + "type": "string" + }, + "unionid": { + "type": "string" + } + } + }, + "md.WeChatMiniApp": { + "type": "object", + "properties": { + "avatar": { + "type": "string" + }, + "code": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "open_id": { + "type": "string" + }, + "unionid": { + "type": "string" + } + } + }, + "model.LogisticCompany": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "model.PrivilegeOpenCardOrd": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "after_sale_id": { + "type": "integer" + }, + "card_key": { + "type": "string" + }, + "card_num": { + "type": "string" + }, + "card_type": { + "type": "integer" + }, + "cost_price": { + "type": "string" + }, + "create_time": { + "type": "string" + }, + "date_type": { + "type": "integer" + }, + "given_data": { + "type": "string" + }, + "logistic_company": { + "type": "string" + }, + "logistic_num": { + "type": "string" + }, + "ord_id": { + "type": "integer" + }, + "pay_channel": { + "type": "integer" + }, + "pay_time": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "settle_at": { + "type": "integer" + }, + "state": { + "type": "integer" + }, + "uid": { + "type": "integer" + }, + "update_time": { + "type": "string" + } + } + }, + "model.UserAddress": { + "type": "object", + "properties": { + "city_id": { + "type": "string" + }, + "city_name": { + "type": "string" + }, + "county_id": { + "type": "string" + }, + "county_name": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "phone": { + "type": "string" + }, + "post_code": { + "type": "string" + }, + "province_id": { + "type": "string" + }, + "province_name": { + "type": "string" + }, + "receiver": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "uid": { + "type": "integer" + } + } + } + }, + "securityDefinitions": { + "MasterID": { + "type": "apiKey", + "name": "MasterID", + "in": "header" + } + } +} \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml new file mode 100644 index 0000000..ca2a7a9 --- /dev/null +++ b/docs/swagger.yaml @@ -0,0 +1,1084 @@ +basePath: / +definitions: + hdl.PrivilegeOpenCardOrdQueryPageResp: + properties: + btn_bg_color_1: + type: string + btn_bg_color_2: + type: string + btn_text: + type: string + btn_text_color: + type: string + header_img: + type: string + logistic_company: + items: + $ref: '#/definitions/model.LogisticCompany' + type: array + type: object + hdl.PrivilegeOpenCardOrdQueryReq: + properties: + com: + description: 快递公司名称 + type: string + num: + description: 快递单号 + type: string + required: + - com + - num + type: object + hdl.logisticQueryReq: + properties: + com: + description: 快递公司名称 + type: string + num: + description: 快递单号 + type: string + required: + - com + - num + type: object + hdl.privilegeOpenCardCheckReq: + properties: + key: + description: 卡密 + type: string + num: + description: 卡号 + type: string + required: + - key + - num + type: object + hdl.privilegeOpenCardPayPageResp: + properties: + amount: + description: 付费金额 + type: string + card_type: + description: 卡的类型:"1"实体卡 "2"虚拟卡 + type: string + date_type: + description: 日期类型:month:月 season:季 year:年 forever:永久 + type: string + page_style: + $ref: '#/definitions/hdl.privilegeOpenCardPayStyle' + description: 页面样式 + type: object + hdl.privilegeOpenCardPayStyle: + properties: + exclusive_privilege: + description: 专属特权 + items: + properties: + brand_id: + type: string + brand_img: + type: string + brand_img_url: + type: string + brand_name: + type: string + is_show: + type: string + sub_title: + type: string + type: object + type: array + payment_btn: + description: 底部支付按钮 + items: + properties: + bg_img: + type: string + bg_img_url: + type: string + func: + type: string + name: + type: string + text: + type: string + text_color: + type: string + type: + type: string + type: object + type: array + payment_choose_icon: + description: 支付方式选中、未选中图标 + items: + properties: + icon: + type: string + icon_url: + type: string + type: + type: string + type: object + type: array + payment_style: + description: 支付方式 + items: + properties: + icon: + type: string + icon_url: + type: string + type: + type: string + type: object + type: array + style: + description: 头部样式 + properties: + header_bg_img: + type: string + header_bg_img_url: + type: string + special_deals_img: + type: string + special_deals_img_url: + type: string + special_deals_text: + type: string + type: object + type: object + hdl.resultItem: + properties: + id: + example: "440100000000" + type: string + name: + example: city + type: string + type: object + hdl.updateAddressReq: + properties: + city_id: + type: string + county_id: + type: string + detail: + type: string + id: + type: integer + phone: + type: string + post_code: + type: string + province_id: + type: string + receiver: + type: string + tag: + type: string + required: + - city_id + - county_id + - detail + - phone + - province_id + - receiver + type: object + md.Apple: + properties: + token: + type: string + type: object + md.FastLoginRequestBody: + properties: + apple: + $ref: '#/definitions/md.Apple' + captcha: + type: string + is_not_create: + type: string + mobile: + type: string + parent_uid: + type: string + qq: + $ref: '#/definitions/md.QQLogin' + return_user_msg: + type: string + taobao: + $ref: '#/definitions/md.TaobaoLogin' + wechat: + $ref: '#/definitions/md.WeChat' + wechat_mini: + $ref: '#/definitions/md.WeChatMiniApp' + zone: + type: string + type: object + md.IndexRecommendList: + properties: + good: + items: + $ref: '#/definitions/md.RecommendGood' + type: array + provider: + description: BarTitleList []BarTitle `json:"bar_title_list"` + type: string + type: object + md.LoginResponse: + properties: + bind_phone_enable: + type: string + is_pid: + type: string + perms: + items: + type: string + type: array + phone: + type: string + register_invite_code_enable: + type: string + register_popup_condition: + $ref: '#/definitions/md.RegisterPopupCondition' + description: 弹出类型设置 + token: + type: string + user_id: + type: string + username: + type: string + wechat_applet_open_id: + type: string + wechat_union_id: + type: string + type: object + md.Marquee: + properties: + avatar_url: + type: string + content: + type: string + name: + type: string + type: object + md.ProductDetailResponse: + properties: + commission: + type: string + coupon_price: + type: string + good_id: + type: string + mod_list: + items: + additionalProperties: true + type: object + type: array + provider: + type: string + provider_name: + type: string + shop_avatar: + type: string + type: object + md.QQLogin: + properties: + access_token: + type: string + avatar_url: + type: string + city: + type: string + expires_in: + type: string + gender: + type: string + nickname: + type: string + open_id: + type: string + pay_token: + type: string + pf: + type: string + pf_key: + type: string + province: + type: string + ret: + type: string + unionid: + type: string + type: object + md.RecommendGood: + properties: + commission: + type: string + coupon: + type: string + current_price: + type: string + detail_data: + $ref: '#/definitions/md.ProductDetailResponse' + good_id: + type: string + good_image: + type: string + good_title: + type: string + inorder_count: + type: string + is_collect: + type: integer + is_coupons: + type: integer + is_share: + type: integer + market_price: + type: string + marquee_list: + items: + $ref: '#/definitions/md.Marquee' + type: array + provider: + type: string + provider_name: + type: string + pvd: + type: string + shop_avatar: + type: string + shop_name: + type: string + video: + type: string + type: object + md.RegisterPopupCondition: + properties: + invite_code: + description: 邀请码设置:弹出类型是激活码的时候起作用 + properties: + popup: + description: 是否弹出 “0”否 “1”是 + type: string + should_input: + description: 是否必填 “0”否 “1”是 + type: string + type: object + popup_type: + description: 弹出类型:“0”关闭 ”1”激活码 “2”邀请码 + type: string + should_input: + description: 是否必填 “0”否 “1”是 + type: string + type: object + md.TaobaoLogin: + properties: + access_token: + type: string + auth_code: + type: string + avatar_url: + type: string + nick_name: + type: string + open_id: + type: string + sid: + type: string + type: object + md.WeChat: + properties: + access_token: + type: string + avatar_url: + type: string + city: + type: string + expires_in: + type: string + gender: + type: string + nickname: + type: string + open_id: + type: string + pay_token: + type: string + pf: + type: string + pf_key: + type: string + province: + type: string + ret: + type: string + unionid: + type: string + type: object + md.WeChatMiniApp: + properties: + avatar: + type: string + code: + type: string + nickname: + type: string + open_id: + type: string + unionid: + type: string + type: object + model.LogisticCompany: + properties: + code: + type: string + name: + type: string + type: object + model.PrivilegeOpenCardOrd: + properties: + address: + type: string + after_sale_id: + type: integer + card_key: + type: string + card_num: + type: string + card_type: + type: integer + cost_price: + type: string + create_time: + type: string + date_type: + type: integer + given_data: + type: string + logistic_company: + type: string + logistic_num: + type: string + ord_id: + type: integer + pay_channel: + type: integer + pay_time: + type: string + phone: + type: string + receiver: + type: string + settle_at: + type: integer + state: + type: integer + uid: + type: integer + update_time: + type: string + type: object + model.UserAddress: + properties: + city_id: + type: string + city_name: + type: string + county_id: + type: string + county_name: + type: string + detail: + type: string + id: + type: integer + phone: + type: string + post_code: + type: string + province_id: + type: string + province_name: + type: string + receiver: + type: string + tag: + type: string + uid: + type: integer + type: object +host: localhost:5000 +info: + contact: + name: sherlockwhite + description: 移动端接口 + termsOfService: 智莺生活后端组 + title: 智莺生活移动端接口 + version: "1.0" +paths: + /api/v1/acq/fix: + get: + consumes: + - application/json + description: 拉新活动--fix + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 拉新活动--fix + tags: + - 拉新活动 + /api/v1/acquisition/home: + post: + consumes: + - application/json + description: 本期榜单/上期榜单/我的邀请人数和奖励/任务列表 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 拉新--首页数据 + tags: + - 拉新活动 + /api/v1/acquisition/qrcode: + get: + consumes: + - application/json + description: 二维码 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 拉新--邀请二维码 + tags: + - 拉新活动 + /api/v1/acquisition/reward/detail: + post: + consumes: + - application/json + description: 拉新活动--我的奖励明细 + parameters: + - description: 1为以发放,2为待发放,3为失效 + in: body + name: state + required: true + schema: + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 拉新活动--我的奖励明细 + tags: + - 拉新活动 + /api/v1/acquisition/reward_receive: + post: + consumes: + - application/json + description: 拉新活动--领取奖励 + parameters: + - description: 任务ID + in: body + name: job_id + required: true + schema: + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 拉新活动--领取奖励 + tags: + - 拉新活动 + /api/v1/credit/card/config: + get: + consumes: + - application/json + description: 获取信用卡配置 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 获取信用卡配置 + tags: + - 信用卡 + /api/v1/duomai/mall/detail: + post: + consumes: + - application/json + description: 多麦商城--商城详情 + parameters: + - description: 商城id + in: body + name: brand_id + required: true + schema: + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城--商城详情 + tags: + - 多麦商城 + /api/v1/duomai/mall/home: + get: + consumes: + - application/json + description: 多麦商城--首页数据 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城--首页数据 + tags: + - 多麦商城 + /api/v1/duomai/mall/search: + post: + consumes: + - application/json + description: 多麦商城--搜索 + parameters: + - description: 搜索关键词 + in: body + name: key + required: true + schema: + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城--搜索 + tags: + - 多麦商城 + /api/v1/duomai/mall/update: + get: + consumes: + - application/json + description: 多麦商城--更新数据 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城--更新数据 + tags: + - 多麦商城 + /api/v1/logistic/query: + post: + consumes: + - application/json + parameters: + - description: logisticQueryReq + in: body + name: req + required: true + schema: + $ref: '#/definitions/hdl.logisticQueryReq' + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + "400": + description: '{"code":400000,"data":[],"msg":"该快递公司不支持查询"}' + schema: + type: string + summary: 快递100物流查询 + tags: + - 物流 + /api/v1/mod/pub.flutter.duomai.mall.detail.page: + get: + consumes: + - application/json + description: 多麦商城详情页样式 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城详情页样式 + tags: + - 多麦商城 + /api/v1/mod/pub.flutter.duomai.mall.home.page: + get: + consumes: + - application/json + description: 多麦商城首页样式 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城首页样式 + tags: + - 多麦商城 + /api/v1/mod/pub.flutter.duomai.mall.search.page: + get: + consumes: + - application/json + description: 多麦商城搜索页样式 + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 多麦商城搜索页样式 + tags: + - 多麦商城 + /api/v1/privilege/card/activation: + post: + consumes: + - application/json + description: 权益卡激活 + parameters: + - description: json + in: body + name: body + required: true + schema: + $ref: '#/definitions/hdl.privilegeOpenCardCheckReq' + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 权益卡激活 + tags: + - 权益卡 + /api/v1/privilege/open_card/check: + get: + consumes: + - application/json + parameters: + - description: json + in: body + name: body + required: true + schema: + $ref: '#/definitions/hdl.privilegeOpenCardCheckReq' + produces: + - application/json + responses: + "200": + description: 0:不存在 1:已经被使用 2:可用 + schema: + type: string + summary: 权益卡卡号卡密检测 + tags: + - 权益卡 + /api/v1/privilege/open_card/order_query: + get: + produces: + - application/json + responses: + "200": + description: ok + schema: + $ref: '#/definitions/hdl.PrivilegeOpenCardOrdQueryPageResp' + "400": + description: '{"code":400000,"data":[],"msg":"验证码错误"}' + schema: + type: string + summary: 权益卡开卡订单查询页面 + tags: + - 权益卡 + post: + parameters: + - description: json + in: body + name: body + required: true + schema: + $ref: '#/definitions/hdl.PrivilegeOpenCardOrdQueryReq' + produces: + - application/json + responses: + "200": + description: ok + schema: + $ref: '#/definitions/model.PrivilegeOpenCardOrd' + "400": + description: '{"code":400000,"data":[],"msg":"验证码错误"}' + schema: + type: string + summary: 权益卡开卡订单查询 + tags: + - 权益卡 + /api/v1/privilege/open_card/order_suc: + get: + produces: + - application/json + responses: + "200": + description: ok + schema: + $ref: '#/definitions/model.PrivilegeOpenCardOrd' + summary: 订单支付成功页面 + tags: + - 权益卡 + /api/v1/privilege/open_card/pay_page: + get: + produces: + - application/json + responses: + "200": + description: ok + schema: + $ref: '#/definitions/hdl.privilegeOpenCardPayPageResp' + "400": + description: '{"code":400000,"data":[],"msg":"权益卡配置缺失"}' + schema: + type: string + summary: 权益卡开卡支付页面 + tags: + - 权益卡 + /api/v1/shake_ticket/:goods_id/:type: + get: + consumes: + - application/json + description: 收藏/领券买/分享赚 + parameters: + - description: 商品id + in: path + name: goods_id + required: true + type: string + - description: 类型(0取消收藏,1收藏,2点击 领券买,3点击分享赚) + in: path + name: type + required: true + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + summary: 抖券商品收藏/领券买/分享赚 + tags: + - 抖券 + /api/v1/shake_ticket_list: + get: + consumes: + - application/json + description: 定向计划/高佣专场/精选低价包邮/偏远地区包邮/抖货商品/各大榜单商品/今日值得买 + parameters: + - description: 页码 + in: query + name: page + required: true + type: string + - description: 页数 + in: query + name: page_size + required: true + type: string + - description: 分类id(3定向计划/4高佣专场/5精选低价包邮/6偏远地区包邮/7抖货商品/8各大榜单商品/9今日值得买) + in: query + name: category_id + required: true + type: string + - description: 渠道 + in: query + name: pvd + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/md.IndexRecommendList' + summary: 抖券商品推荐列表 + tags: + - 抖券 + /api/v1/sign/fast/in: + post: + parameters: + - description: json + in: body + name: body + required: true + schema: + $ref: '#/definitions/md.FastLoginRequestBody' + produces: + - application/json + responses: + "200": + description: ok + schema: + $ref: '#/definitions/md.LoginResponse' + "400": + description: '{"code":400001,"data":[],"msg":"请求参数错误"}' + schema: + type: string + summary: 用户手机快速登录 + tags: + - 登录、注册 + /api/v1/sub_region_list: + get: + parameters: + - description: 上级地区类型:root(查询省级列表)、province(省级ID下的城市)、city(市级id下的区域) + in: query + name: parent + required: true + type: string + - description: 上级地区id + in: query + name: id + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + items: + $ref: '#/definitions/hdl.resultItem' + type: array + "400": + description: '{"code":400001,"data":[],"msg":"请求参数错误"}' + schema: + type: string + summary: 获取区域id下的区域 + tags: + - 地址 + /api/v1/user/address/:id: + get: + parameters: + - description: 地址id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + $ref: '#/definitions/model.UserAddress' + "400": + description: '{"code":400000,"data":[],"msg":"地址不存在"}' + schema: + type: string + summary: 用户地址详情 + tags: + - 地址 + /api/v1/user/address/delete/:id: + post: + consumes: + - application/json + parameters: + - description: ID + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + "400": + description: '{"code":400000,"data":[],"msg":"地址不存在"}' + schema: + type: string + summary: 用户地址删除 + tags: + - 地址 + /api/v1/user/address/update: + post: + consumes: + - application/json + parameters: + - description: json参数,Id不传为新增 + in: body + name: '""' + required: true + schema: + $ref: '#/definitions/hdl.updateAddressReq' + produces: + - application/json + responses: + "200": + description: ok + schema: + type: string + "400": + description: '{"code":400000,"data":[],"msg":"地址不存在"}' + schema: + type: string + summary: 用户地址新增、编辑 + tags: + - 地址 + /api/v1/user/addresses: + get: + produces: + - application/json + responses: + "200": + description: ok + schema: + items: + $ref: '#/definitions/model.UserAddress' + type: array + "500": + description: '{"code":500000,"data":[],"msg":"数据库操作失败"}' + schema: + type: string + summary: 用户地址列表 + tags: + - 地址 +securityDefinitions: + MasterID: + in: header + name: MasterID + type: apiKey +swagger: "2.0" diff --git a/etc/cfg.yml b/etc/cfg.yml new file mode 100644 index 0000000..6f3e4de --- /dev/null +++ b/etc/cfg.yml @@ -0,0 +1,97 @@ +# 当前域名 +debug: true +curldebug: true +prd: false +local: true +# 服务器参数 +srv_addr: ':6001' +# 缓存 +redis_addr: '120.24.28.6:32572' + +redis_addr_second: + addr: '120.24.28.6:32572' + pwd: '' + +admin: + url: http://zyos.com + iurl: http://zyos.com + api_aes_key: e{&[^Ft(.~g]1eR-]VO + api_aes_iv: ZV`7<5X]/2brS@sz + +official: + url: http://pc.fnuo123.com.cn + +wxapplet_filepath: + url: '/etc/zyos-admin/wx_check_file' + +h5_filepath: + url: '/etc/zyos-admin/h5-wap' + +im_business_rpc: + url: im-rpc-logic.izhyin.com + port: 8000 + +zhios_open: + url: http://127.0.0.1:5006 + +app_comm: + url: http://127.0.0.1:5003 + +supply: + url: http://supply-chain-admin:5500 + +zhimeng: + url: http://zhimeng.zhiyinos.cn + +website_backend: + url: http://admin.fnuo123.com.cn + +# 连接官网数据库获取db mapping +db: + host: '119.23.182.117:3306' + name: 'zyos_website' + user: 'root' + psw: 'Fnuo123com@' + show_log: true + max_lifetime: 30 + max_open_conns: 100 + max_idle_conns: 100 + path: 'tmp/%s.log' + +# 连接RabbitMq +mq: + host: '116.62.62.35' + port: '5672' + user: 'zhios' + pwd: 'ZHIoscnfnuo123' + +# 连接ElasticSearch +es: + url: 'http://120.55.48.175:9200' + user: 'elastic' + pwd: 'fnuo123' + +zhimeng_db: + host: '119.23.182.117:3306' + name: 'zhi_meng' + user: 'root' + psw: 'Fnuo123com@' + show_log: true + max_lifetime: 30 + max_open_conns: 100 + max_idle_conns: 100 + path: 'tmp/%s.log' + + +# 日志 +log: + app_name: 'applet' + level: 'debug' # 普通日志级别 #debug, info, warn, fatal, panic + is_stdout: true + time_format: 'standard' # sec, second, milli, nano, standard, iso + encoding: 'console' + is_file_out: true + file_dir: './tmp/' + file_max_size: 256 + file_max_age: 1 + file_name: 'debug.log' diff --git a/etc/db_tpl/config b/etc/db_tpl/config new file mode 100644 index 0000000..34c75ee --- /dev/null +++ b/etc/db_tpl/config @@ -0,0 +1,7 @@ +lang=go +genJson=1 +prefix=cos_ +ignoreColumnsJSON= +created= +updated= +deleted= \ No newline at end of file diff --git a/etc/db_tpl/struct.go.tpl b/etc/db_tpl/struct.go.tpl new file mode 100644 index 0000000..74b2896 --- /dev/null +++ b/etc/db_tpl/struct.go.tpl @@ -0,0 +1,17 @@ +package {{.Models}} + +{{$ilen := len .Imports}} +{{if gt $ilen 0}} +import ( + {{range .Imports}}"{{.}}"{{end}} +) +{{end}} + +{{range .Tables}} +type {{Mapper .Name}} struct { +{{$table := .}} +{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{Mapper $col.Name}} {{Type $col}} {{Tag $table $col}} +{{end}} +} +{{end}} + diff --git a/etc/nginx.conf b/etc/nginx.conf new file mode 100644 index 0000000..18fab25 --- /dev/null +++ b/etc/nginx.conf @@ -0,0 +1,28 @@ +server { + listen 80; + #listen 443 ssl http2; + charset utf-8; + server_name applet.xx; + + proxy_set_header Host $http_host; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass_header Server; + + location /api { + proxy_pass http://127.0.0.1:9900/api/v1/; + } + + error_log /tmp/applet_err.log; + access_log /tmp/applet_acc.log main buffer=32k; + + #ssl_certificate /www/server/panel/vhost/cert/aid.im/fullchain.pem; + #ssl_certificate_key /www/server/panel/vhost/cert/aid.im/privkey.pem; + #ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1; + #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; + #ssl_prefer_server_ciphers on; + #ssl_session_cache shared:SSL:10m; + #ssl_session_timeout 10m; +} \ No newline at end of file diff --git a/etc/task.yml b/etc/task.yml new file mode 100644 index 0000000..4670960 --- /dev/null +++ b/etc/task.yml @@ -0,0 +1,60 @@ +# debug release test +debug: true +prd: false +local: true +# 缓存 +redis_addr: '120.24.28.6:32572' +redis_addr_second: + addr: '120.24.28.6:32572' + pwd: '' +admin: + api_aes_key: e{&[^Ft(.~g]1eR-]VO + api_aes_iv: ZV`7<5X]/2brS@sz +app_comm: + url: http://127.0.0.1:5003 + +# 连接ElasticSearch +es: + url: 'http://120.55.48.175:9200' + user: 'elastic' + pwd: 'fnuo123' + +# 数据库 +db: + host: '119.23.182.117:3306' + name: 'zyos_website' + user: 'root' + psw: 'Fnuo123com@' + show_log: true + max_lifetime: 30 + max_open_conns: 100 + max_idle_conns: 100 + path: 'tmp/task_sql_%v.log' + +zhimeng_db: + host: '119.23.182.117:3306' + name: 'zhi_meng' + user: 'root' + psw: 'Fnuo123com@' + show_log: true + max_lifetime: 30 + max_open_conns: 100 + max_idle_conns: 100 + path: 'tmp/%s.log' +# 日志 +log: + level: 'debug' # 普通日志级别 #debug, info, warn, fatal, panic + is_stdout: true + time_format: 'standard' # sec, second, milli, nano, standard, iso + encoding: 'console' + is_file_out: true + file_dir: './tmp/' + file_max_size: 256 + file_max_age: 1 + file_name: 'task.log' +# 连接RabbitMq +mq: + host: '116.62.62.35' + port: '5672' + user: 'zhios' + pwd: 'ZHIoscnfnuo123' \ No newline at end of file diff --git a/flags/flag.go b/flags/flag.go new file mode 100644 index 0000000..f2d2ca5 --- /dev/null +++ b/flags/flag.go @@ -0,0 +1,41 @@ +package flags + +import "errors" + +const ( + // CacheAlterTable is 修改表缓存名 + CacheAlterTable string = "db_center_alter_table" + // CacheUserMigrate is 用户迁移 + CacheUserMigrate string = "user_migrate" +) + +// BoolFlag is type of map[string]bool +type BoolFlag map[string]bool + +// BoolFlagMap is mapping bool +var BoolFlagMap = BoolFlag{ + "1": true, + "true": true, + "True": true, + "0": false, + "false": false, + "False": false, +} + +// BoundCheck is return false and err if is not found +func (b BoolFlag) BoundCheck(flag string) (bool, error) { + bl, ok := b[flag] + if !ok { + return false, errors.New("Flag Not Mapping Any Key") + } + return bl, nil +} + +// Check is not found return flase +func (b BoolFlag) Check(flag string) bool { + bl, ok := b[flag] + if !ok { + return false + } + return bl +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..868369c --- /dev/null +++ b/go.mod @@ -0,0 +1,79 @@ +module applet + +go 1.15 + +require ( + code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240702071747-c6b3b336ad1c + code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git v1.1.2 + code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2 + code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c + code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0 + github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 + github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 + github.com/bitly/go-simplejson v0.5.0 + github.com/boombuler/barcode v1.0.1 + github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 + github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/forgoer/openssl v1.2.1 + github.com/gin-contrib/sessions v0.0.3 + github.com/gin-gonic/gin v1.9.1 + github.com/go-creed/sat v1.0.3 + github.com/go-redis/redis v6.15.9+incompatible + github.com/go-sql-driver/mysql v1.8.1 + github.com/gocolly/colly v1.2.0 + github.com/gomodule/redigo v2.0.0+incompatible + github.com/iGoogle-ink/gopay v1.5.36 + github.com/jinzhu/copier v0.4.0 + github.com/makiuchi-d/gozxing v0.1.1 + github.com/mvdan/xurls v1.1.0 + github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8 + github.com/opesun/goquery v0.0.0-20160908163916-0d77e43213cd + github.com/pkg/errors v0.9.1 + github.com/qiniu/api.v7/v7 v7.8.2 + github.com/robfig/cron/v3 v3.0.1 + github.com/shopspring/decimal v1.3.1 + github.com/swaggo/swag v1.7.0 + github.com/syyongx/php2go v0.9.8 + github.com/tidwall/gjson v1.17.0 + github.com/xluohome/phonedata v0.0.0-20220123041135-c005bb2f5d35 + go.uber.org/zap v1.23.0 + golang.org/x/sync v0.2.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 + gopkg.in/yaml.v2 v2.4.0 + xorm.io/xorm v1.3.2 +) + +require ( + code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.0 + code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d + code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 + code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git v1.0.10-0.20240710030252-6d4151ab994b + code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e + code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20240816014008-a236ebf42395 + github.com/andybalholm/cascadia v1.2.0 // indirect + github.com/antchfx/htmlquery v1.2.3 // indirect + github.com/antchfx/xmlquery v1.3.5 // indirect + github.com/antchfx/xpath v1.1.11 // indirect + github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11 + github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a + github.com/dchest/captcha v1.0.0 + github.com/fogleman/gg v1.3.0 + github.com/go-openapi/spec v0.20.3 // indirect + github.com/go-openapi/swag v0.19.15 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 + github.com/gookit/color v1.3.8 // indirect + github.com/gorilla/sessions v1.2.1 // indirect + github.com/json-iterator/go v1.1.12 + github.com/kennygrant/sanitize v1.2.4 // indirect + github.com/olivere/elastic/v7 v7.0.32 + github.com/rakyll/statik v0.1.7 // indirect + github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect + github.com/temoto/robotstxt v1.1.2 // indirect + github.com/wenlng/go-captcha v1.2.5 + golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 + golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/grpc v1.33.2 + google.golang.org/protobuf v1.30.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..3a66eca --- /dev/null +++ b/go.sum @@ -0,0 +1,1544 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240702071747-c6b3b336ad1c h1:7oW6off5WIplX2hd+BDO/bS/iU/WIQPHBh6uUHjJspU= +code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240702071747-c6b3b336ad1c/go.mod h1:3dgECgbJufgRYy8O714HGkrkYshaIAv30ShFBsSaCfs= +code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git v1.1.2 h1:DHsLo+xOvr72LwJOKEV0fT19zEKqbJtAGYv5kDLUZrc= +code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git v1.1.2/go.mod h1:yr9zroGixMbJ5gm+lVLVcUAZ4mRIaFlWHtBBTLJm5z0= +code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.0 h1:OYaoKdrpK0obnK/OMJ0Bg8DyU1Uliq35xPljaRGvDAY= +code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.0/go.mod h1:Yc/SFCnyo6Ninzr+BrcXdkwoEEthMGSgWG+J0Oo8HtE= +code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d h1:w87z133GUwiw6l3eSvoYt52pPR3lLiX9E08flRVcecE= +code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d/go.mod h1:aHatysIWFJ4DzLRSDljlbMObA61wYivI9ab9sygiA8s= +code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2 h1:LUWlvBgmzZfGqvH4VGEWk+JhXHlI+MFmLNl9uX7eh28= +code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2/go.mod h1:IEw6A61Kp2ctoeKIQMFVM/cFq9PUDAzJMb5lVXiEY2Y= +code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 h1:dqvWJqlJi0WXCwTxbWPLvSOsKPjP+iEDBVgLcAl9nOE= +code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5/go.mod h1:TTcCnFn/LhBGapnutpezlW+GXkLRNPMWkziOoCsXQqY= +code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git v1.0.10-0.20240710030252-6d4151ab994b h1:qJ3n/N84ByxpbHXsMB3319cvffLwa3Gcnx7WMqNvpX0= +code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git v1.0.10-0.20240710030252-6d4151ab994b/go.mod h1:8lqoRm7PkDuPV9shACAu3B+LPplV99cgOxM91Z+pa5k= +code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240118152737-08e0d2709655/go.mod h1:Q/C2vLPgAWDPyKyll2sFRWdJsw26nZknL+mjGGB1uuw= +code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c h1:wKd5mCUszsNwe+qpUyxPfjsZ+CquyKaHad9Ci3pfeMo= +code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c/go.mod h1:LXKefjdbY6D+P1jALLM87wDej8N5D+sLub4YfrnU7TA= +code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0 h1:Y2PHy4RxhpPPy6hrSsDnzK+mEbY76If3UJGZIk6cmg4= +code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0/go.mod h1:0eObND+Vum1rxf8Ro5ai16phWdWGZ3lkKDXqO/v082s= +code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240826023213-74e7e23bee7c h1:yfSb2PgHMmNlvdQCkdFFZF9i5yrQNMGgFARs9VzPrf0= +code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240826023213-74e7e23bee7c/go.mod h1:WEwF5BOzArem2a/EMJqoZ6gxb0DIEADruUROS4s5bNA= +code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e h1:9uiwLba7UGSyox/83pJkho1akyDKJf9bRb/fTcPmAaE= +code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e/go.mod h1:WEwF5BOzArem2a/EMJqoZ6gxb0DIEADruUROS4s5bNA= +code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20240816014008-a236ebf42395 h1:xM3v+GLMYQMYeyp48SzJOXvylsbNRbdlvWRMXViWwFI= +code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20240816014008-a236ebf42395/go.mod h1:nT2x13YFgrS3tS1fDyUR6q/GNIK+hPw7bdzZXz99SM0= +contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= +gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= +gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= +github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest/autorest v0.1.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg= +github.com/Azure/go-autorest/autorest v0.5.0/go.mod h1:9HLKlQjVBH6U3oDfsXOeVc56THsLPw1L03yban4xThw= +github.com/Azure/go-autorest/autorest/adal v0.1.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E= +github.com/Azure/go-autorest/autorest/adal v0.2.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E= +github.com/Azure/go-autorest/autorest/azure/auth v0.1.0/go.mod h1:Gf7/i2FUpyb/sGBLIFxTBzrNzBo7aPXXE3ZVeDRwdpM= +github.com/Azure/go-autorest/autorest/azure/cli v0.1.0/go.mod h1:Dk8CUAt/b/PzkfeRsWzVG9Yj3ps8mS8ECztu43rdU8U= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.7-0.20191101173118-65519b62243c/go.mod h1:7xhjOwRV2+0HXGmM0jxaEu+ZiXJFoVZOTfL/dmqbrD8= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= +github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE= +github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190808125512-07798873deee/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= +github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE= +github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz6M= +github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0= +github.com/antchfx/xmlquery v1.3.5 h1:I7TuBRqsnfFuL11ruavGm911Awx9IqSdiU6W/ztSmVw= +github.com/antchfx/xmlquery v1.3.5/go.mod h1:64w0Xesg2sTaawIdNqMB+7qaW/bSqkQm+ssPaCMWNnc= +github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk= +github.com/antchfx/xpath v1.1.10/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk= +github.com/antchfx/xpath v1.1.11 h1:WOFtK8TVAjLm3lbgqeP0arlHpvCEeTANeWZ/csPpJkQ= +github.com/antchfx/xpath v1.1.11/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/rocketmq-client-go/v2 v2.1.0/go.mod h1:oEZKFDvS7sz/RWU0839+dQBupazyBV7WX5cP6nrio0Q= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/asim/go-micro/plugins/registry/etcd/v3 v3.0.0-20210227064844-df90f2ca63ff/go.mod h1:BwrEEWiVIldDOWEWrdNKDMU8jILSNvzkuLTn6VLM28E= +github.com/asim/go-micro/v3 v3.5.0/go.mod h1:PR/RCuFk1F7aPnK6pc8Ca9rHOZzfg1x7+fvTygQa55g= +github.com/asim/go-micro/v3 v3.5.1-0.20210227064844-df90f2ca63ff/go.mod h1:OJ5DnUQmoEVQTNbKRstR7/krtYJI+QaBe/XeN5MZkqE= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.43.21/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= +github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI= +github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11 h1:smFM+R9NconJ5FHiMyQsq/fIjtYE0jxVJwX8ZxAmWF0= +github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11/go.mod h1:gC4wJD6T+unJtW078G4ugNE2UNbk4/oYwQKteOaybQE= +github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a h1:tc57+CsbpTjJLvcp2AyVAvaYmS0FFxSaRCQeUa4jcHg= +github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a/go.mod h1:MBxCt6+ltWZRodx2FgXuQm7LQweWyPofmXsuhX3D6Zo= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= +github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpu/goacmedns v0.0.1/go.mod h1:sesf/pNnCYwUevQEQfEwY0Y3DydlQWSGZbaMElOWxok= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/captcha v1.0.0 h1:vw+bm/qMFvTgcjQlYVTuQBJkarm5R0YSsDKhm1HZI2o= +github.com/dchest/captcha v1.0.0/go.mod h1:7zoElIawLp7GUMLcj54K9kbw+jEyvz2K0FDdRRYhvWo= +github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 h1:RAV05c0xOkJ3dZGS0JFybxFKZ2WMLabgx3uXnd7rpGs= +github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/dnsimple/dnsimple-go v0.30.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20191101170500-ac7306503d23/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/ef-ds/deque v1.0.4-0.20190904040645-54cb57c252a1/go.mod h1:HvODWzv6Y6kBf3Ah2WzN1bHjDUezGLaAhwuWVwfpEJs= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= +github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/forgoer/openssl v1.2.1 h1:Qvgk8K+pKayd3QG/f7fB2LJm1ObYNA2iqYraipxm8jQ= +github.com/forgoer/openssl v1.2.1/go.mod h1:NMVFOzYeLVR7UiGTxsa+A21nrERTZ3Rv2JHDPcJpDyI= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v1.6.0/go.mod h1:YWwtNPuL4XTX1SKJQk86cWPmmqwx+4np9qfPbb+znGc= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sessions v0.0.3 h1:PoBXki+44XdJdlgDqDrY5nDVe3Wk7wDV/UCOuLP6fBI= +github.com/gin-contrib/sessions v0.0.3/go.mod h1:8C/J6cad3Il1mWYYgtw0w+hqasmpvy25mPkXdOgeB9I= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.0/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego/v3 v3.4.0/go.mod h1:xYbLDuxq3Hy4bMUT1t9JIuz6GWIWb3m5X+TeTHYaT7M= +github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s= +github.com/go-creed/sat v1.0.3 h1:V1IkiYYFDPKXaRhdg95oAh5IHZ3Qhs5AEVlhteM+6XA= +github.com/go-creed/sat v1.0.3/go.mod h1:ZxAhQ0ikMzjqeMbFeoMdCr6es8p10Y87F2nHkqNjSbY= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.44.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/spec v0.19.14/go.mod h1:gwrgJS15eCUgjLpMjBJmbZezCsw88LmgeEip0M63doA= +github.com/go-openapi/spec v0.20.3 h1:uH9RQ6vdyPSs2pSy9fL8QPspDF2AMIMPtmK5coSSjtQ= +github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.11/go.mod h1:Uc0gKkdR+ojzsEpjh39QChyu92vPgIr72POcgHMAgSY= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis/v8 v8.6.0/go.mod h1:DQ9q4Rk2HtwkrwVrdgmphoOQDMfpvcd/nHEwRsicg8s= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.3/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/gocolly/colly v1.2.0 h1:qRz9YAn8FIH0qzgNUw+HT9UN7wm1oF9OBAilwEWpyrI= +github.com/gocolly/colly v1.2.0/go.mod h1:Hof5T3ZswNVsOHYmba1u03W65HDWgpV5HifSuueE0EA= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= +github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gookit/color v1.3.6/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= +github.com/gookit/color v1.3.8 h1:w2WcSwaCa1ojRWO60Mm4GJUJomBNKR9G+x9DwaaCL1c= +github.com/gookit/color v1.3.8/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= +github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iGoogle-ink/gopay v1.5.28/go.mod h1:yjS9Sc8VYzs3LMFJaubYMGs9LS7Pc2Sf2pAcL1jOW5M= +github.com/iGoogle-ink/gopay v1.5.36 h1:RctuoiEdTbiXOmzQ9i1388opwAOjheUDIFoHl1EeNr8= +github.com/iGoogle-ink/gopay v1.5.36/go.mod h1:JADVzrfz9kzGMCgV7OzJ954pqwMU7PotYMAjP84YKIE= +github.com/iGoogle-ink/gotil v1.0.20/go.mod h1:1msXAn0/WhPRn/gBUT/JDSzo0LSibueFKBqZemh4x5M= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk= +github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.8.1/go.mod h1:JV6m6b6jhjdmzchES0drzCcYcAHS1OPD5xu3OZ/lE2g= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0= +github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po= +github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ= +github.com/jackc/pgtype v1.7.0/go.mod h1:ZnHF+rMePVqDKaOfJVI4Q8IVvAQMryDlDkZnKOI75BE= +github.com/jackc/pgtype v1.8.0/go.mod h1:PqDKcEBtllAtk/2p6z6SHdXW5UB+MhE75tUol2OKexE= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA= +github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o= +github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg= +github.com/jackc/pgx/v4 v4.11.0/go.mod h1:i62xJgdrtVDsnL3U8ekyrQXEwGNTRoG7/8r+CIdYfcc= +github.com/jackc/pgx/v4 v4.12.0/go.mod h1:fE547h6VulLPA3kySjfnSG/e2D861g/50JlVUa/ub60= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kennygrant/sanitize v1.2.4 h1:gN25/otpP5vAsO2djbMhF/LQX6R7+O1TB4yv8NzpJ3o= +github.com/kennygrant/sanitize v1.2.4/go.mod h1:LGsjYYtgxbetdg5owWB2mpgUL6e2nfw2eObZ0u0qvak= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HKfQoRHCdcsROXKvmoehKA= +github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w= +github.com/labstack/echo/v4 v4.2.0/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA= +github.com/liquidweb/liquidweb-go v1.6.0/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ= +github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= +github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/makiuchi-d/gozxing v0.1.1 h1:xxqijhoedi+/lZlhINteGbywIrewVdVv2wl9r5O9S1I= +github.com/makiuchi-d/gozxing v0.1.1/go.mod h1:eRIHbOjX7QWxLIDJoQuMLhuXg9LAuw6znsUtRkNw9DU= +github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= +github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= +github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= +github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/memcachier/mc v2.0.1+incompatible/go.mod h1:7bkvFE61leUBvXz+yxsOnGBQSZpBSPIMUQSmmSHvuXc= +github.com/micro/cli/v2 v2.1.2/go.mod h1:EguNh6DAoWKm9nmk+k/Rg0H3lQnDxqzu5x5srOtGtYg= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mvdan/xurls v1.1.0 h1:OpuDelGQ1R1ueQ6sSryzi6P+1RtBpfQHM8fJwlE45ww= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8 h1:9hvJ/9GQssABrUYNOW1Q6X9/7uY6+Srj9YYYQZVC0AE= +github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8/go.mod h1:X1swpPdqguAZaBDoEPyEWHSsJii0YQ1o+3piMv6W3JU= +github.com/nrdcg/auroradns v1.0.0/go.mod h1:6JPXKzIRzZzMqtTDgueIhTi6rFf1QvYE/HzqidhOhjw= +github.com/nrdcg/dnspod-go v0.4.0/go.mod h1:vZSoFSFeQVm2gWLMkyX61LZ8HI3BaqtHZWgPTGKr6KQ= +github.com/nrdcg/goinwx v0.6.1/go.mod h1:XPiut7enlbEdntAqalBIqcYcTEVhpv/dKWgDCX2SwKQ= +github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olivere/elastic/v7 v7.0.32 h1:R7CXvbu8Eq+WlsLgxmKVKPox0oOwAE/2T9Si5BnvK6E= +github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/opesun/goquery v0.0.0-20160908163916-0d77e43213cd h1:taV1toAfzAdRwNWpIB7JMdgX2xL+JT3Rq8GXzyPK1Is= +github.com/opesun/goquery v0.0.0-20160908163916-0d77e43213cd/go.mod h1:XIY7IuxoZH2deZdjIgzLqXlYkOHiwNC+hL1m3vS2A8g= +github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= +github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/qiniu/api.v7/v7 v7.8.2 h1:f08kI0MmsJNzK4sUS8bG3HDH67ktwd/ji23Gkiy2ra4= +github.com/qiniu/api.v7/v7 v7.8.2/go.mod h1:FPsIqxh1Ym3X01sANE5ZwXfLZSWoCUp5+jNI8cLo3l0= +github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg= +github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sacloud/libsacloud v1.26.1/go.mod h1:79ZwATmHLIFZIMd7sxA3LwzVy/B77uj3LDoToVTxDoQ= +github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI= +github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.1.1 h1:T/YLemO5Yp7KPzS+lVtu+WsHn8yoSwTfItdAd1r3cck= +github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/swaggo/swag v1.7.0 h1:5bCA/MTLQoIqDXXyHfOpMeDvL9j68OY/udlK4pQoo4E= +github.com/swaggo/swag v1.7.0/go.mod h1:BdPIL73gvS9NBsdi7M1JOxLvlbfvNRaBP8m6WT6Aajo= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syyongx/php2go v0.9.6/go.mod h1:meN2eIhhUoxOd2nMxbpe8g6cFPXI5O9/UAAuz7oDdzw= +github.com/syyongx/php2go v0.9.7/go.mod h1:meN2eIhhUoxOd2nMxbpe8g6cFPXI5O9/UAAuz7oDdzw= +github.com/syyongx/php2go v0.9.8 h1:FNwV1y+RaZxl7KTm/ICh0Zrhca/70d5JRMpwByuQ1FM= +github.com/syyongx/php2go v0.9.8/go.mod h1:meN2eIhhUoxOd2nMxbpe8g6cFPXI5O9/UAAuz7oDdzw= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/temoto/robotstxt v1.1.2 h1:W2pOjSJ6SWvldyEuiFXNxz3xZ8aiWX5LbfDiOFd7Fxg= +github.com/temoto/robotstxt v1.1.2/go.mod h1:+1AmkuG3IYkh1kv0d2qEB9Le88ehNO0zwOr3ujewlOo= +github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= +github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= +github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v0.0.0-20190325153808-1166b9ac2b65/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/transip/gotransip v0.0.0-20190812104329-6d8d9179b66f/go.mod h1:i0f4R4o2HM0m3DZYQWsj6/MEowD57VzoH0v3d7igeFY= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= +github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA= +github.com/wenlng/go-captcha v1.2.5 h1:zA0/fovEl9oAhSg+KwHBwmq99GeeAXknWx6wYKjhjTg= +github.com/wenlng/go-captcha v1.2.5/go.mod h1:QgPgpEURSa37gF3GtojNoNRwbMwuatSBx5NXrzASOb0= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xluohome/phonedata v0.0.0-20220123041135-c005bb2f5d35 h1:CzJpvB76GmmRNs4AVpGEuhO+gien7G5CcC+8vaIIWPI= +github.com/xluohome/phonedata v0.0.0-20220123041135-c005bb2f5d35/go.mod h1:xLEBvbUFvuBHRWeV/SNefGARR5QedFRkThwnodnmCKw= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= +go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8= +go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s= +go.opentelemetry.io/otel v1.5.0/go.mod h1:Jm/m+rNp/z0eqJc74H7LPwQ3G87qkU/AnnAydAjSAHk= +go.opentelemetry.io/otel/metric v0.17.0/go.mod h1:hUz9lH1rNXyEwWAhIWCMFWKhYtpASgSnObJFnU26dJ0= +go.opentelemetry.io/otel/oteltest v0.17.0/go.mod h1:JT/LGFxPwpN+nlsTiinSYjdIx3hZIGqHCpChcIZmdoE= +go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg= +go.opentelemetry.io/otel/trace v1.5.0/go.mod h1:sq55kfhjXYr1zVSyexg0w1mpa03AYXR5eyTkB9NPPdE= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= +golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 h1:Lj6HJGCSn5AjxRAH2+r35Mir4icalbqku+CLUtjnvXY= +golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191027093000-83d349e8ac1a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20201120155355-20be4ac4bd6e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc/go.mod h1:VV+3haRsgDiVLxyifmMBrBIuCWFBPYKbRssXB9z67Hw= +gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.0.3/go.mod h1:twGxftLBlFgNVNakL7F+P/x9oYqoymG3YYT8cAfI9oI= +gorm.io/gorm v1.20.4/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.21.8/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U= +modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= +modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= +modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= +modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= +modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= +modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= +modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= +modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= +modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= +modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= +modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= +modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= +modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= +modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= +modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= +modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= +modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= +modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= +modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= +modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= +modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= +modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= +modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= +modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= +modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= +modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= +modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= +modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= +modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= +modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4= +modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= +modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= +modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= +modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= +modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8= +modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= +modernc.org/ccorpus v1.11.1 h1:K0qPfpVG1MJh5BYazccnmhywH4zHuOgJXgbjzyp6dWA= +modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= +modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= +modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= +modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= +modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= +modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= +modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= +modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= +modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= +modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= +modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= +modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= +modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= +modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= +modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= +modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= +modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= +modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= +modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= +modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= +modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= +modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= +modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= +modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= +modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= +modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= +modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= +modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= +modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= +modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= +modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= +modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= +modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE= +modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= +modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14= +modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= +modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE= +modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8= +modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/tcl v1.8.13 h1:V0sTNBw0Re86PvXZxuCub3oO9WrSTqALgrwNZNvLFGw= +modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY= +modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.2.19 h1:BGyRFWhDVn5LFS5OcX4Yd/MlpRTOc7hOPTdcIpCiUao= +modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0= +xorm.io/builder v0.3.7/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/builder v0.3.10/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM= +xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/xorm v1.0.5/go.mod h1:uF9EtbhODq5kNWxMbnBEj8hRRZnlcNSz2t2N7HW/+A4= +xorm.io/xorm v1.3.0/go.mod h1:cEaWjDPqoIusTkmDAG+krCcPcTglqo8CDU8geX/yhko= +xorm.io/xorm v1.3.1/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw= +xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM= +xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw= diff --git a/main.go b/main.go new file mode 100644 index 0000000..5dd0ea7 --- /dev/null +++ b/main.go @@ -0,0 +1,98 @@ +package main + +import ( + "context" + "fmt" + "log" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "applet/app/cfg" + "applet/app/db" + "applet/app/router" + "applet/app/utils" +) + +//系统初始化 +func init() { + cfg.InitCfg() //配置初始化 + cfg.InitLog() //日志初始化 + cfg.InitCache() //缓存初始化 + cfg.InitCacheSecond() //缓存初始化 + cfg.InitMq() //缓存初始化 + cfg.InitEs() //ElasticSearch初始化 + if cfg.Debug { //判断是否是debug + if err := db.InitDB(cfg.DB); err != nil { //主数据库初始化 + panic(err) + } + if err := db.InitZhimengDB(cfg.ZhimengDB); err != nil { + panic(err) + } + channel := make(chan int, 0) //开辟管道,缓冲为 + go db.InitDBs(channel) + <-channel + } + fmt.Println("init success") + +} + +// @title 智莺生活移动端接口 +// @version 1.0 +// @description 移动端接口 +// @termsOfService 智莺生活后端组 +// @contact.name sherlockwhite +// @host localhost:5000 +// @securityDefinitions.apikey MasterID +// @in header +// @name MasterID +// @BasePath / +func main() { + // 启动获取所有品牌 + //go taoke.GetAllBrand() + r := router.Init() //创建路由 + // arkid.Init() + srv := &http.Server{ //设置http服务参数 + Addr: cfg.SrvAddr, //指定ip和端口 + Handler: r, //指定路由 + } + // 读取默认站长的推广位 并写进redis + // master, err := db.UserProfileFindByID(,"1") + + // if err != nil { + // panic(err) + // } + if cfg.CurlDebug { + utils.CurlDebug = true + } + // + // if has := cache.SetJson(svc.SysCfgGet(nil, "app_name")+"_default_pid_user", master, 0); has != true { + // panic(errors.New("设置默认pid缓存失败")) + // } + // Initializing the server in a goroutine so that it won't block the graceful shutdown handling below + go func() { //协程启动监听http服务 + fmt.Println("Listening and serving HTTP on " + cfg.SrvAddr) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("listen: %s\n", err) + } + }() + + /*go func() { + _ = http.ListenAndServe("0.0.0.0:6060", nil) + }()*/ + // graceful shutdown + //退出go守护进程 + quit := make(chan os.Signal) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + log.Println("Shutting down server...") + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := srv.Shutdown(ctx); err != nil { + log.Fatal("Server forced to shutdown:", err) + } + log.Println("Server exiting") + +} diff --git a/pkg/pb/im.business.ext.pb.go b/pkg/pb/im.business.ext.pb.go new file mode 100644 index 0000000..6a43688 --- /dev/null +++ b/pkg/pb/im.business.ext.pb.go @@ -0,0 +1,1853 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.20.0--rc1 +// source: im.business.ext.proto + +package pb + +import ( + "context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoimpl" + "reflect" + "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// 消息类型 +type ComplainType int32 + +const ( + ComplainType_CT_UNKNOWN ComplainType = 0 // 未知 + ComplainType_CT_GAMBLE ComplainType = 1 // 存在赌博行为 + ComplainType_MT_DEFRAUD ComplainType = 2 // 存在骗钱行为 + ComplainType_MT_HARASS ComplainType = 3 // 不当信息骚扰 + ComplainType_MT_RUMOUR ComplainType = 4 // 传播谣言 + ComplainType_MT_COUNTERFEIT_GOODS_INFO ComplainType = 5 // 发布假冒商品信息 + ComplainType_MT_VIOLATION_OF_MINORS ComplainType = 6 // 侵犯未成年人权益 + ComplainType_MT_OTHER ComplainType = 7 // 其他 +) + +// Enum value maps for ComplainType. +var ( + ComplainType_name = map[int32]string{ + 0: "CT_UNKNOWN", + 1: "CT_GAMBLE", + 2: "MT_DEFRAUD", + 3: "MT_HARASS", + 4: "MT_RUMOUR", + 5: "MT_COUNTERFEIT_GOODS_INFO", + 6: "MT_VIOLATION_OF_MINORS", + 7: "MT_OTHER", + } + ComplainType_value = map[string]int32{ + "CT_UNKNOWN": 0, + "CT_GAMBLE": 1, + "MT_DEFRAUD": 2, + "MT_HARASS": 3, + "MT_RUMOUR": 4, + "MT_COUNTERFEIT_GOODS_INFO": 5, + "MT_VIOLATION_OF_MINORS": 6, + "MT_OTHER": 7, + } +) + +func (x ComplainType) Enum() *ComplainType { + p := new(ComplainType) + *p = x + return p +} + +func (x ComplainType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ComplainType) Descriptor() protoreflect.EnumDescriptor { + return file_business_ext_proto_enumTypes[0].Descriptor() +} + +func (ComplainType) Type() protoreflect.EnumType { + return &file_business_ext_proto_enumTypes[0] +} + +func (x ComplainType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ComplainType.Descriptor instead. +func (ComplainType) EnumDescriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{0} +} + +type ComplainGroupReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + ComplainType ComplainType `protobuf:"varint,2,opt,name=complain_type,json=complainType,proto3,enum=pb.ComplainType" json:"complain_type,omitempty"` // 投诉类型 + Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` // 投诉内容 + ImageList []string `protobuf:"bytes,4,rep,name=image_list,json=imageList,proto3" json:"image_list,omitempty"` // 图片 +} + +func (x *ComplainGroupReq) Reset() { + *x = ComplainGroupReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComplainGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComplainGroupReq) ProtoMessage() {} + +func (x *ComplainGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ComplainGroupReq.ProtoReflect.Descriptor instead. +func (*ComplainGroupReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{0} +} + +func (x *ComplainGroupReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *ComplainGroupReq) GetComplainType() ComplainType { + if x != nil { + return x.ComplainType + } + return ComplainType_CT_UNKNOWN +} + +func (x *ComplainGroupReq) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *ComplainGroupReq) GetImageList() []string { + if x != nil { + return x.ImageList + } + return nil +} + +type IsFriendsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserPhone string `protobuf:"bytes,1,opt,name=user_phone,json=userPhone,proto3" json:"user_phone,omitempty"` + FriendPhone string `protobuf:"bytes,2,opt,name=friend_phone,json=friendPhone,proto3" json:"friend_phone,omitempty"` +} + +func (x *IsFriendsReq) Reset() { + *x = IsFriendsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsFriendsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsFriendsReq) ProtoMessage() {} + +func (x *IsFriendsReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsFriendsReq.ProtoReflect.Descriptor instead. +func (*IsFriendsReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{1} +} + +func (x *IsFriendsReq) GetUserPhone() string { + if x != nil { + return x.UserPhone + } + return "" +} + +func (x *IsFriendsReq) GetFriendPhone() string { + if x != nil { + return x.FriendPhone + } + return "" +} + +type IsFriendsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsFriend int64 `protobuf:"varint,1,opt,name=is_friend,json=isFriend,proto3" json:"is_friend,omitempty"` + User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` // 用户信息 +} + +func (x *IsFriendsResp) Reset() { + *x = IsFriendsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsFriendsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsFriendsResp) ProtoMessage() {} + +func (x *IsFriendsResp) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsFriendsResp.ProtoReflect.Descriptor instead. +func (*IsFriendsResp) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{2} +} + +func (x *IsFriendsResp) GetIsFriend() int64 { + if x != nil { + return x.IsFriend + } + return 0 +} + +func (x *IsFriendsResp) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +type Emoticon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // 名称 + ImgUrl string `protobuf:"bytes,2,opt,name=img_url,json=imgUrl,proto3" json:"img_url,omitempty"` // 图片地址 + Memo string `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"` // 备注 + Sort int32 `protobuf:"varint,4,opt,name=sort,proto3" json:"sort,omitempty"` // 排序 +} + +func (x *Emoticon) Reset() { + *x = Emoticon{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Emoticon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Emoticon) ProtoMessage() {} + +func (x *Emoticon) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Emoticon.ProtoReflect.Descriptor instead. +func (*Emoticon) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{3} +} + +func (x *Emoticon) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Emoticon) GetImgUrl() string { + if x != nil { + return x.ImgUrl + } + return "" +} + +func (x *Emoticon) GetMemo() string { + if x != nil { + return x.Memo + } + return "" +} + +func (x *Emoticon) GetSort() int32 { + if x != nil { + return x.Sort + } + return 0 +} + +type EmoticonListResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Emoticons []*Emoticon `protobuf:"bytes,1,rep,name=emoticons,proto3" json:"emoticons,omitempty"` +} + +func (x *EmoticonListResp) Reset() { + *x = EmoticonListResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EmoticonListResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmoticonListResp) ProtoMessage() {} + +func (x *EmoticonListResp) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmoticonListResp.ProtoReflect.Descriptor instead. +func (*EmoticonListResp) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{4} +} + +func (x *EmoticonListResp) GetEmoticons() []*Emoticon { + if x != nil { + return x.Emoticons + } + return nil +} + +type SignInReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PhoneNumber string `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` // 手机号 + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 验证码 + DeviceId int64 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + MasterId int64 `protobuf:"varint,4,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` // 站长id + PushAlia string `protobuf:"bytes,5,opt,name=push_alia,json=pushAlia,proto3" json:"push_alia,omitempty"` // 极光推送-别名 + Nickname string `protobuf:"bytes,6,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + AvatarUrl string `protobuf:"bytes,7,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像地址 +} + +func (x *SignInReq) Reset() { + *x = SignInReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignInReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignInReq) ProtoMessage() {} + +func (x *SignInReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SignInReq.ProtoReflect.Descriptor instead. +func (*SignInReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{5} +} + +func (x *SignInReq) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +func (x *SignInReq) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *SignInReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *SignInReq) GetMasterId() int64 { + if x != nil { + return x.MasterId + } + return 0 +} + +func (x *SignInReq) GetPushAlia() string { + if x != nil { + return x.PushAlia + } + return "" +} + +func (x *SignInReq) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *SignInReq) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +type SignInResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsNew bool `protobuf:"varint,1,opt,name=is_new,json=isNew,proto3" json:"is_new,omitempty"` // 是否是新用户 + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` // token + MasterId int64 `protobuf:"varint,4,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` // 站长id +} + +func (x *SignInResp) Reset() { + *x = SignInResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignInResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignInResp) ProtoMessage() {} + +func (x *SignInResp) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SignInResp.ProtoReflect.Descriptor instead. +func (*SignInResp) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{6} +} + +func (x *SignInResp) GetIsNew() bool { + if x != nil { + return x.IsNew + } + return false +} + +func (x *SignInResp) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *SignInResp) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *SignInResp) GetMasterId() int64 { + if x != nil { + return x.MasterId + } + return 0 +} + +type CloudUploadFileReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Dir string `protobuf:"bytes,1,opt,name=dir,proto3" json:"dir,omitempty"` // 目录名 + FileName string `protobuf:"bytes,2,opt,name=file_name,json=fileName,proto3" json:"file_name,omitempty"` // 上传原文件名称 + FileSize string `protobuf:"bytes,3,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` // 文件大小 +} + +func (x *CloudUploadFileReq) Reset() { + *x = CloudUploadFileReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloudUploadFileReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloudUploadFileReq) ProtoMessage() {} + +func (x *CloudUploadFileReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloudUploadFileReq.ProtoReflect.Descriptor instead. +func (*CloudUploadFileReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{7} +} + +func (x *CloudUploadFileReq) GetDir() string { + if x != nil { + return x.Dir + } + return "" +} + +func (x *CloudUploadFileReq) GetFileName() string { + if x != nil { + return x.FileName + } + return "" +} + +func (x *CloudUploadFileReq) GetFileSize() string { + if x != nil { + return x.FileSize + } + return "" +} + +type CloudUploadFileResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` // 请求方式 + Host string `protobuf:"bytes,2,opt,name=host,proto3" json:"host,omitempty"` // 域名 + Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` // key + Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` // token +} + +func (x *CloudUploadFileResp) Reset() { + *x = CloudUploadFileResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloudUploadFileResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloudUploadFileResp) ProtoMessage() {} + +func (x *CloudUploadFileResp) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloudUploadFileResp.ProtoReflect.Descriptor instead. +func (*CloudUploadFileResp) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{8} +} + +func (x *CloudUploadFileResp) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *CloudUploadFileResp) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *CloudUploadFileResp) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *CloudUploadFileResp) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type User struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + Sex int32 `protobuf:"varint,3,opt,name=sex,proto3" json:"sex,omitempty"` // 性别 + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像地址 + Extra string `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 + CreateTime int64 `protobuf:"varint,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间 + UpdateTime int64 `protobuf:"varint,7,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 + MasterId int64 `protobuf:"varint,8,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` // 站长id + IsAutoAddedFriends int64 `protobuf:"varint,9,opt,name=is_auto_added_friends,json=isAutoAddedFriends,proto3" json:"is_auto_added_friends,omitempty"` // 是否自动被添加好友 + PhoneNumber string `protobuf:"bytes,10,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` // 手机号 +} + +func (x *User) Reset() { + *x = User{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *User) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*User) ProtoMessage() {} + +func (x *User) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use User.ProtoReflect.Descriptor instead. +func (*User) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{9} +} + +func (x *User) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *User) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *User) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *User) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *User) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +func (x *User) GetCreateTime() int64 { + if x != nil { + return x.CreateTime + } + return 0 +} + +func (x *User) GetUpdateTime() int64 { + if x != nil { + return x.UpdateTime + } + return 0 +} + +func (x *User) GetMasterId() int64 { + if x != nil { + return x.MasterId + } + return 0 +} + +func (x *User) GetIsAutoAddedFriends() int64 { + if x != nil { + return x.IsAutoAddedFriends + } + return 0 +} + +func (x *User) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +type GetUserReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Phone string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"` // 用户手机号 +} + +func (x *GetUserReq) Reset() { + *x = GetUserReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUserReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserReq) ProtoMessage() {} + +func (x *GetUserReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUserReq.ProtoReflect.Descriptor instead. +func (*GetUserReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{10} +} + +func (x *GetUserReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *GetUserReq) GetPhone() string { + if x != nil { + return x.Phone + } + return "" +} + +type GetUserResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` // 用户信息 +} + +func (x *GetUserResp) Reset() { + *x = GetUserResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUserResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserResp) ProtoMessage() {} + +func (x *GetUserResp) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUserResp.ProtoReflect.Descriptor instead. +func (*GetUserResp) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{11} +} + +func (x *GetUserResp) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +type UpdateUserReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nickname string `protobuf:"bytes,1,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + Sex int32 `protobuf:"varint,2,opt,name=sex,proto3" json:"sex,omitempty"` // 性别 + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像地址 + Extra string `protobuf:"bytes,4,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *UpdateUserReq) Reset() { + *x = UpdateUserReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateUserReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateUserReq) ProtoMessage() {} + +func (x *UpdateUserReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateUserReq.ProtoReflect.Descriptor instead. +func (*UpdateUserReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{12} +} + +func (x *UpdateUserReq) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *UpdateUserReq) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *UpdateUserReq) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *UpdateUserReq) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type SearchUserReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + MasterId int64 `protobuf:"varint,2,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` +} + +func (x *SearchUserReq) Reset() { + *x = SearchUserReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchUserReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchUserReq) ProtoMessage() {} + +func (x *SearchUserReq) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchUserReq.ProtoReflect.Descriptor instead. +func (*SearchUserReq) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{13} +} + +func (x *SearchUserReq) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SearchUserReq) GetMasterId() int64 { + if x != nil { + return x.MasterId + } + return 0 +} + +type SearchUserResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` +} + +func (x *SearchUserResp) Reset() { + *x = SearchUserResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_ext_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchUserResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchUserResp) ProtoMessage() {} + +func (x *SearchUserResp) ProtoReflect() protoreflect.Message { + mi := &file_business_ext_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchUserResp.ProtoReflect.Descriptor instead. +func (*SearchUserResp) Descriptor() ([]byte, []int) { + return file_business_ext_proto_rawDescGZIP(), []int{14} +} + +func (x *SearchUserResp) GetUsers() []*User { + if x != nil { + return x.Users + } + return nil +} + +var File_business_ext_proto protoreflect.FileDescriptor + +var file_business_ext_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, + 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x0d, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x68, 0x6f, + 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x68, + 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x68, + 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x4a, 0x0a, 0x0d, 0x49, 0x73, 0x46, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x66, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x22, 0x5f, 0x0a, 0x08, 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6d, 0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, + 0x6f, 0x72, 0x74, 0x22, 0x3e, 0x0a, 0x10, 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x09, 0x65, 0x6d, 0x6f, 0x74, 0x69, + 0x63, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, + 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x6d, 0x6f, 0x74, 0x69, 0x63, + 0x6f, 0x6e, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, + 0x71, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x73, 0x68, 0x41, 0x6c, 0x69, 0x61, 0x12, + 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x22, 0x6f, 0x0a, 0x0a, 0x53, 0x69, + 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x6e, + 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x60, 0x0a, 0x12, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x64, 0x69, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x69, 0x0a, + 0x13, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xb7, 0x02, 0x0a, 0x04, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, + 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, + 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, + 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, + 0x69, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x66, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x69, 0x73, 0x41, + 0x75, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x65, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, + 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, + 0x2b, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, + 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, + 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x72, 0x0a, 0x0d, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, + 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x22, 0x3e, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, + 0x22, 0x30, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x2a, 0xa4, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x54, 0x5f, 0x47, 0x41, 0x4d, 0x42, 0x4c, 0x45, + 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x54, 0x5f, 0x44, 0x45, 0x46, 0x52, 0x41, 0x55, 0x44, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x54, 0x5f, 0x48, 0x41, 0x52, 0x41, 0x53, 0x53, 0x10, + 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x54, 0x5f, 0x52, 0x55, 0x4d, 0x4f, 0x55, 0x52, 0x10, 0x04, + 0x12, 0x1d, 0x0a, 0x19, 0x4d, 0x54, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x45, + 0x49, 0x54, 0x5f, 0x47, 0x4f, 0x4f, 0x44, 0x53, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x05, 0x12, + 0x1a, 0x0a, 0x16, 0x4d, 0x54, 0x5f, 0x56, 0x49, 0x4f, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x4f, 0x46, 0x5f, 0x4d, 0x49, 0x4e, 0x4f, 0x52, 0x53, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x4d, + 0x54, 0x5f, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x07, 0x32, 0x9c, 0x03, 0x0a, 0x0b, 0x42, 0x75, + 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x45, 0x78, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x53, 0x69, 0x67, + 0x6e, 0x49, 0x6e, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x2e, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, + 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x11, 0x2e, 0x70, + 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, + 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x0a, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x42, 0x0a, 0x0f, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x2f, 0x0a, 0x0c, 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, + 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x6f, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x09, 0x49, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x73, 0x46, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, + 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x0d, 0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_business_ext_proto_rawDescOnce sync.Once + file_business_ext_proto_rawDescData = file_business_ext_proto_rawDesc +) + +func file_business_ext_proto_rawDescGZIP() []byte { + file_business_ext_proto_rawDescOnce.Do(func() { + file_business_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_business_ext_proto_rawDescData) + }) + return file_business_ext_proto_rawDescData +} + +var file_business_ext_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_business_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_business_ext_proto_goTypes = []interface{}{ + (ComplainType)(0), // 0: pb.ComplainType + (*ComplainGroupReq)(nil), // 1: pb.ComplainGroupReq + (*IsFriendsReq)(nil), // 2: pb.IsFriendsReq + (*IsFriendsResp)(nil), // 3: pb.IsFriendsResp + (*Emoticon)(nil), // 4: pb.Emoticon + (*EmoticonListResp)(nil), // 5: pb.EmoticonListResp + (*SignInReq)(nil), // 6: pb.SignInReq + (*SignInResp)(nil), // 7: pb.SignInResp + (*CloudUploadFileReq)(nil), // 8: pb.CloudUploadFileReq + (*CloudUploadFileResp)(nil), // 9: pb.CloudUploadFileResp + (*User)(nil), // 10: pb.User + (*GetUserReq)(nil), // 11: pb.GetUserReq + (*GetUserResp)(nil), // 12: pb.GetUserResp + (*UpdateUserReq)(nil), // 13: pb.UpdateUserReq + (*SearchUserReq)(nil), // 14: pb.SearchUserReq + (*SearchUserResp)(nil), // 15: pb.SearchUserResp + (*Empty)(nil), // 16: pb.Empty +} +var file_business_ext_proto_depIdxs = []int32{ + 0, // 0: pb.ComplainGroupReq.complain_type:type_name -> pb.ComplainType + 10, // 1: pb.IsFriendsResp.user:type_name -> pb.User + 4, // 2: pb.EmoticonListResp.emoticons:type_name -> pb.Emoticon + 10, // 3: pb.GetUserResp.user:type_name -> pb.User + 10, // 4: pb.SearchUserResp.users:type_name -> pb.User + 6, // 5: pb.BusinessExt.SignIn:input_type -> pb.SignInReq + 11, // 6: pb.BusinessExt.GetUser:input_type -> pb.GetUserReq + 13, // 7: pb.BusinessExt.UpdateUser:input_type -> pb.UpdateUserReq + 14, // 8: pb.BusinessExt.SearchUser:input_type -> pb.SearchUserReq + 8, // 9: pb.BusinessExt.CloudUploadFile:input_type -> pb.CloudUploadFileReq + 16, // 10: pb.BusinessExt.EmoticonList:input_type -> pb.Empty + 2, // 11: pb.BusinessExt.IsFriends:input_type -> pb.IsFriendsReq + 1, // 12: pb.BusinessExt.ComplainGroup:input_type -> pb.ComplainGroupReq + 7, // 13: pb.BusinessExt.SignIn:output_type -> pb.SignInResp + 12, // 14: pb.BusinessExt.GetUser:output_type -> pb.GetUserResp + 16, // 15: pb.BusinessExt.UpdateUser:output_type -> pb.Empty + 15, // 16: pb.BusinessExt.SearchUser:output_type -> pb.SearchUserResp + 9, // 17: pb.BusinessExt.CloudUploadFile:output_type -> pb.CloudUploadFileResp + 5, // 18: pb.BusinessExt.EmoticonList:output_type -> pb.EmoticonListResp + 3, // 19: pb.BusinessExt.IsFriends:output_type -> pb.IsFriendsResp + 16, // 20: pb.BusinessExt.ComplainGroup:output_type -> pb.Empty + 13, // [13:21] is the sub-list for method output_type + 5, // [5:13] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_business_ext_proto_init() } +func file_business_ext_proto_init() { + if File_business_ext_proto != nil { + return + } + file_common_ext_proto_init() + if !protoimpl.UnsafeEnabled { + file_business_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComplainGroupReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IsFriendsReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IsFriendsResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Emoticon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EmoticonListResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignInReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignInResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloudUploadFileReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloudUploadFileResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*User); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUserReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUserResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateUserReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchUserReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_ext_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchUserResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_business_ext_proto_rawDesc, + NumEnums: 1, + NumMessages: 15, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_business_ext_proto_goTypes, + DependencyIndexes: file_business_ext_proto_depIdxs, + EnumInfos: file_business_ext_proto_enumTypes, + MessageInfos: file_business_ext_proto_msgTypes, + }.Build() + File_business_ext_proto = out.File + file_business_ext_proto_rawDesc = nil + file_business_ext_proto_goTypes = nil + file_business_ext_proto_depIdxs = nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// BusinessExtClient is the client API for BusinessExt service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type BusinessExtClient interface { + // 登录 + SignIn(ctx context.Context, in *SignInReq, opts ...grpc.CallOption) (*SignInResp, error) + // 获取用户信息 + GetUser(ctx context.Context, in *GetUserReq, opts ...grpc.CallOption) (*GetUserResp, error) + // 更新用户信息 + UpdateUser(ctx context.Context, in *UpdateUserReq, opts ...grpc.CallOption) (*Empty, error) + // 搜索用户(这里简单数据库实现,生产环境建议使用ES) + SearchUser(ctx context.Context, in *SearchUserReq, opts ...grpc.CallOption) (*SearchUserResp, error) + // 上传文件至云端 + CloudUploadFile(ctx context.Context, in *CloudUploadFileReq, opts ...grpc.CallOption) (*CloudUploadFileResp, error) + // 获取表情 + EmoticonList(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*EmoticonListResp, error) + // 判断是否为好友关系 + IsFriends(ctx context.Context, in *IsFriendsReq, opts ...grpc.CallOption) (*IsFriendsResp, error) + // 投诉群 + ComplainGroup(ctx context.Context, in *ComplainGroupReq, opts ...grpc.CallOption) (*Empty, error) +} + +type businessExtClient struct { + cc grpc.ClientConnInterface +} + +func NewBusinessExtClient(cc grpc.ClientConnInterface) BusinessExtClient { + return &businessExtClient{cc} +} + +func (c *businessExtClient) SignIn(ctx context.Context, in *SignInReq, opts ...grpc.CallOption) (*SignInResp, error) { + out := new(SignInResp) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/SignIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) GetUser(ctx context.Context, in *GetUserReq, opts ...grpc.CallOption) (*GetUserResp, error) { + out := new(GetUserResp) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/GetUser", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) UpdateUser(ctx context.Context, in *UpdateUserReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/UpdateUser", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) SearchUser(ctx context.Context, in *SearchUserReq, opts ...grpc.CallOption) (*SearchUserResp, error) { + out := new(SearchUserResp) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/SearchUser", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) CloudUploadFile(ctx context.Context, in *CloudUploadFileReq, opts ...grpc.CallOption) (*CloudUploadFileResp, error) { + out := new(CloudUploadFileResp) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/CloudUploadFile", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) EmoticonList(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*EmoticonListResp, error) { + out := new(EmoticonListResp) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/EmoticonList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) IsFriends(ctx context.Context, in *IsFriendsReq, opts ...grpc.CallOption) (*IsFriendsResp, error) { + out := new(IsFriendsResp) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/IsFriends", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessExtClient) ComplainGroup(ctx context.Context, in *ComplainGroupReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.BusinessExt/ComplainGroup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// BusinessExtServer is the server API for BusinessExt service. +// All implementations must embed UnimplementedBusinessExtServer +// for forward compatibility +type BusinessExtServer interface { + // 登录 + SignIn(context.Context, *SignInReq) (*SignInResp, error) + // 获取用户信息 + GetUser(context.Context, *GetUserReq) (*GetUserResp, error) + // 更新用户信息 + UpdateUser(context.Context, *UpdateUserReq) (*Empty, error) + // 搜索用户(这里简单数据库实现,生产环境建议使用ES) + SearchUser(context.Context, *SearchUserReq) (*SearchUserResp, error) + // 上传文件至云端 + CloudUploadFile(context.Context, *CloudUploadFileReq) (*CloudUploadFileResp, error) + // 获取表情 + EmoticonList(context.Context, *Empty) (*EmoticonListResp, error) + // 判断是否为好友关系 + IsFriends(context.Context, *IsFriendsReq) (*IsFriendsResp, error) + // 投诉群 + ComplainGroup(context.Context, *ComplainGroupReq) (*Empty, error) +} + +// UnimplementedBusinessExtServer must be embedded to have forward compatible implementations. +type UnimplementedBusinessExtServer struct { +} + +func (UnimplementedBusinessExtServer) SignIn(context.Context, *SignInReq) (*SignInResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SignIn not implemented") +} +func (UnimplementedBusinessExtServer) GetUser(context.Context, *GetUserReq) (*GetUserResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUser not implemented") +} +func (UnimplementedBusinessExtServer) UpdateUser(context.Context, *UpdateUserReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateUser not implemented") +} +func (UnimplementedBusinessExtServer) SearchUser(context.Context, *SearchUserReq) (*SearchUserResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SearchUser not implemented") +} +func (UnimplementedBusinessExtServer) CloudUploadFile(context.Context, *CloudUploadFileReq) (*CloudUploadFileResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method CloudUploadFile not implemented") +} +func (UnimplementedBusinessExtServer) EmoticonList(context.Context, *Empty) (*EmoticonListResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method EmoticonList not implemented") +} +func (UnimplementedBusinessExtServer) IsFriends(context.Context, *IsFriendsReq) (*IsFriendsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method IsFriends not implemented") +} +func (UnimplementedBusinessExtServer) ComplainGroup(context.Context, *ComplainGroupReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method ComplainGroup not implemented") +} + +func RegisterBusinessExtServer(s grpc.ServiceRegistrar, srv BusinessExtServer) { + s.RegisterService(&BusinessExt_ServiceDesc, srv) +} + +func _BusinessExt_SignIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SignInReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).SignIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/SignIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).SignIn(ctx, req.(*SignInReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_GetUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).GetUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/GetUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).GetUser(ctx, req.(*GetUserReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_UpdateUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateUserReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).UpdateUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/UpdateUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).UpdateUser(ctx, req.(*UpdateUserReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_SearchUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchUserReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).SearchUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/SearchUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).SearchUser(ctx, req.(*SearchUserReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_CloudUploadFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CloudUploadFileReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).CloudUploadFile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/CloudUploadFile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).CloudUploadFile(ctx, req.(*CloudUploadFileReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_EmoticonList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).EmoticonList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/EmoticonList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).EmoticonList(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_IsFriends_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IsFriendsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).IsFriends(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/IsFriends", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).IsFriends(ctx, req.(*IsFriendsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessExt_ComplainGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ComplainGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessExtServer).ComplainGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessExt/ComplainGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessExtServer).ComplainGroup(ctx, req.(*ComplainGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + +// BusinessExt_ServiceDesc is the grpc.ServiceDesc for BusinessExt service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var BusinessExt_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.BusinessExt", + HandlerType: (*BusinessExtServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SignIn", + Handler: _BusinessExt_SignIn_Handler, + }, + { + MethodName: "GetUser", + Handler: _BusinessExt_GetUser_Handler, + }, + { + MethodName: "UpdateUser", + Handler: _BusinessExt_UpdateUser_Handler, + }, + { + MethodName: "SearchUser", + Handler: _BusinessExt_SearchUser_Handler, + }, + { + MethodName: "CloudUploadFile", + Handler: _BusinessExt_CloudUploadFile_Handler, + }, + { + MethodName: "EmoticonList", + Handler: _BusinessExt_EmoticonList_Handler, + }, + { + MethodName: "IsFriends", + Handler: _BusinessExt_IsFriends_Handler, + }, + { + MethodName: "ComplainGroup", + Handler: _BusinessExt_ComplainGroup_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "business.ext.proto", +} diff --git a/pkg/pb/im.business.int.pb.go b/pkg/pb/im.business.int.pb.go new file mode 100644 index 0000000..3a3f110 --- /dev/null +++ b/pkg/pb/im.business.int.pb.go @@ -0,0 +1,595 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.20.0--rc1 +// source: im.business.int.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MasterAuthReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MasterId string `protobuf:"bytes,1,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` +} + +func (x *MasterAuthReq) Reset() { + *x = MasterAuthReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_int_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MasterAuthReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MasterAuthReq) ProtoMessage() {} + +func (x *MasterAuthReq) ProtoReflect() protoreflect.Message { + mi := &file_business_int_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MasterAuthReq.ProtoReflect.Descriptor instead. +func (*MasterAuthReq) Descriptor() ([]byte, []int) { + return file_business_int_proto_rawDescGZIP(), []int{0} +} + +func (x *MasterAuthReq) GetMasterId() string { + if x != nil { + return x.MasterId + } + return "" +} + +type AuthReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DeviceId int64 `protobuf:"varint,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *AuthReq) Reset() { + *x = AuthReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_int_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthReq) ProtoMessage() {} + +func (x *AuthReq) ProtoReflect() protoreflect.Message { + mi := &file_business_int_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthReq.ProtoReflect.Descriptor instead. +func (*AuthReq) Descriptor() ([]byte, []int) { + return file_business_int_proto_rawDescGZIP(), []int{1} +} + +func (x *AuthReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *AuthReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *AuthReq) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type GetUsersReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserIds map[int64]int32 `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 用户id +} + +func (x *GetUsersReq) Reset() { + *x = GetUsersReq{} + if protoimpl.UnsafeEnabled { + mi := &file_business_int_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUsersReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUsersReq) ProtoMessage() {} + +func (x *GetUsersReq) ProtoReflect() protoreflect.Message { + mi := &file_business_int_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUsersReq.ProtoReflect.Descriptor instead. +func (*GetUsersReq) Descriptor() ([]byte, []int) { + return file_business_int_proto_rawDescGZIP(), []int{2} +} + +func (x *GetUsersReq) GetUserIds() map[int64]int32 { + if x != nil { + return x.UserIds + } + return nil +} + +type GetUsersResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Users map[int64]*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // 用户信息 +} + +func (x *GetUsersResp) Reset() { + *x = GetUsersResp{} + if protoimpl.UnsafeEnabled { + mi := &file_business_int_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUsersResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUsersResp) ProtoMessage() {} + +func (x *GetUsersResp) ProtoReflect() protoreflect.Message { + mi := &file_business_int_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUsersResp.ProtoReflect.Descriptor instead. +func (*GetUsersResp) Descriptor() ([]byte, []int) { + return file_business_int_proto_rawDescGZIP(), []int{3} +} + +func (x *GetUsersResp) GetUsers() map[int64]*User { + if x != nil { + return x.Users + } + return nil +} + +var File_business_int_proto protoreflect.FileDescriptor + +var file_business_int_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x62, 0x75, 0x73, 0x69, + 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2c, + 0x0a, 0x0d, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x07, + 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x22, 0x82, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x85, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x05, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x1a, 0x42, 0x0a, 0x0a, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x32, 0xb4, 0x01, 0x0a, 0x0b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x74, + 0x12, 0x2a, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x11, + 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, + 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x1e, 0x0a, 0x04, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, + 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x07, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0d, 0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, 0x70, + 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_business_int_proto_rawDescOnce sync.Once + file_business_int_proto_rawDescData = file_business_int_proto_rawDesc +) + +func file_business_int_proto_rawDescGZIP() []byte { + file_business_int_proto_rawDescOnce.Do(func() { + file_business_int_proto_rawDescData = protoimpl.X.CompressGZIP(file_business_int_proto_rawDescData) + }) + return file_business_int_proto_rawDescData +} + +var file_business_int_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_business_int_proto_goTypes = []interface{}{ + (*MasterAuthReq)(nil), // 0: pb.MasterAuthReq + (*AuthReq)(nil), // 1: pb.AuthReq + (*GetUsersReq)(nil), // 2: pb.GetUsersReq + (*GetUsersResp)(nil), // 3: pb.GetUsersResp + nil, // 4: pb.GetUsersReq.UserIdsEntry + nil, // 5: pb.GetUsersResp.UsersEntry + (*User)(nil), // 6: pb.User + (*GetUserReq)(nil), // 7: pb.GetUserReq + (*Empty)(nil), // 8: pb.Empty + (*GetUserResp)(nil), // 9: pb.GetUserResp +} +var file_business_int_proto_depIdxs = []int32{ + 4, // 0: pb.GetUsersReq.user_ids:type_name -> pb.GetUsersReq.UserIdsEntry + 5, // 1: pb.GetUsersResp.users:type_name -> pb.GetUsersResp.UsersEntry + 6, // 2: pb.GetUsersResp.UsersEntry.value:type_name -> pb.User + 0, // 3: pb.BusinessInt.MasterAuth:input_type -> pb.MasterAuthReq + 1, // 4: pb.BusinessInt.Auth:input_type -> pb.AuthReq + 7, // 5: pb.BusinessInt.GetUser:input_type -> pb.GetUserReq + 2, // 6: pb.BusinessInt.GetUsers:input_type -> pb.GetUsersReq + 8, // 7: pb.BusinessInt.MasterAuth:output_type -> pb.Empty + 8, // 8: pb.BusinessInt.Auth:output_type -> pb.Empty + 9, // 9: pb.BusinessInt.GetUser:output_type -> pb.GetUserResp + 3, // 10: pb.BusinessInt.GetUsers:output_type -> pb.GetUsersResp + 7, // [7:11] is the sub-list for method output_type + 3, // [3:7] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_business_int_proto_init() } +func file_business_int_proto_init() { + if File_business_int_proto != nil { + return + } + file_common_ext_proto_init() + file_business_ext_proto_init() + if !protoimpl.UnsafeEnabled { + file_business_int_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MasterAuthReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_int_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_int_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUsersReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_business_int_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUsersResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_business_int_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_business_int_proto_goTypes, + DependencyIndexes: file_business_int_proto_depIdxs, + MessageInfos: file_business_int_proto_msgTypes, + }.Build() + File_business_int_proto = out.File + file_business_int_proto_rawDesc = nil + file_business_int_proto_goTypes = nil + file_business_int_proto_depIdxs = nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// BusinessIntClient is the client API for BusinessInt service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type BusinessIntClient interface { + // 站长权限校验 + MasterAuth(ctx context.Context, in *MasterAuthReq, opts ...grpc.CallOption) (*Empty, error) + // 权限校验 + Auth(ctx context.Context, in *AuthReq, opts ...grpc.CallOption) (*Empty, error) + // 批量获取用户信息 + GetUser(ctx context.Context, in *GetUserReq, opts ...grpc.CallOption) (*GetUserResp, error) + // 批量获取用户信息 + GetUsers(ctx context.Context, in *GetUsersReq, opts ...grpc.CallOption) (*GetUsersResp, error) +} + +type businessIntClient struct { + cc grpc.ClientConnInterface +} + +func NewBusinessIntClient(cc grpc.ClientConnInterface) BusinessIntClient { + return &businessIntClient{cc} +} + +func (c *businessIntClient) MasterAuth(ctx context.Context, in *MasterAuthReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.BusinessInt/MasterAuth", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessIntClient) Auth(ctx context.Context, in *AuthReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.BusinessInt/Auth", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessIntClient) GetUser(ctx context.Context, in *GetUserReq, opts ...grpc.CallOption) (*GetUserResp, error) { + out := new(GetUserResp) + err := c.cc.Invoke(ctx, "/pb.BusinessInt/GetUser", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *businessIntClient) GetUsers(ctx context.Context, in *GetUsersReq, opts ...grpc.CallOption) (*GetUsersResp, error) { + out := new(GetUsersResp) + err := c.cc.Invoke(ctx, "/pb.BusinessInt/GetUsers", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// BusinessIntServer is the server API for BusinessInt service. +// All implementations must embed UnimplementedBusinessIntServer +// for forward compatibility +type BusinessIntServer interface { + // 站长权限校验 + MasterAuth(context.Context, *MasterAuthReq) (*Empty, error) + // 权限校验 + Auth(context.Context, *AuthReq) (*Empty, error) + // 批量获取用户信息 + GetUser(context.Context, *GetUserReq) (*GetUserResp, error) + // 批量获取用户信息 + GetUsers(context.Context, *GetUsersReq) (*GetUsersResp, error) +} + +// UnimplementedBusinessIntServer must be embedded to have forward compatible implementations. +type UnimplementedBusinessIntServer struct { +} + +func (UnimplementedBusinessIntServer) MasterAuth(context.Context, *MasterAuthReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method MasterAuth not implemented") +} +func (UnimplementedBusinessIntServer) Auth(context.Context, *AuthReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Auth not implemented") +} +func (UnimplementedBusinessIntServer) GetUser(context.Context, *GetUserReq) (*GetUserResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUser not implemented") +} +func (UnimplementedBusinessIntServer) GetUsers(context.Context, *GetUsersReq) (*GetUsersResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUsers not implemented") +} + +func RegisterBusinessIntServer(s grpc.ServiceRegistrar, srv BusinessIntServer) { + s.RegisterService(&BusinessInt_ServiceDesc, srv) +} + +func _BusinessInt_MasterAuth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MasterAuthReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessIntServer).MasterAuth(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessInt/MasterAuth", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessIntServer).MasterAuth(ctx, req.(*MasterAuthReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessInt_Auth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessIntServer).Auth(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessInt/Auth", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessIntServer).Auth(ctx, req.(*AuthReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessInt_GetUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessIntServer).GetUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessInt/GetUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessIntServer).GetUser(ctx, req.(*GetUserReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BusinessInt_GetUsers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUsersReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BusinessIntServer).GetUsers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.BusinessInt/GetUsers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BusinessIntServer).GetUsers(ctx, req.(*GetUsersReq)) + } + return interceptor(ctx, in, info, handler) +} + +// BusinessInt_ServiceDesc is the grpc.ServiceDesc for BusinessInt service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var BusinessInt_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.BusinessInt", + HandlerType: (*BusinessIntServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MasterAuth", + Handler: _BusinessInt_MasterAuth_Handler, + }, + { + MethodName: "Auth", + Handler: _BusinessInt_Auth_Handler, + }, + { + MethodName: "GetUser", + Handler: _BusinessInt_GetUser_Handler, + }, + { + MethodName: "GetUsers", + Handler: _BusinessInt_GetUsers_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "im.business.int.proto", +} diff --git a/pkg/pb/im.common.ext.pb.go b/pkg/pb/im.common.ext.pb.go new file mode 100644 index 0000000..120feaa --- /dev/null +++ b/pkg/pb/im.common.ext.pb.go @@ -0,0 +1,131 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.14.0 +// source: common.ext.proto_back + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Empty struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Empty) Reset() { + *x = Empty{} + if protoimpl.UnsafeEnabled { + mi := &file_common_ext_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Empty) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Empty) ProtoMessage() {} + +func (x *Empty) ProtoReflect() protoreflect.Message { + mi := &file_common_ext_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Empty.ProtoReflect.Descriptor instead. +func (*Empty) Descriptor() ([]byte, []int) { + return file_common_ext_proto_rawDescGZIP(), []int{0} +} + +var File_common_ext_proto protoreflect.FileDescriptor + +var file_common_ext_proto_rawDesc = []byte{ + 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, + 0x0d, 0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_common_ext_proto_rawDescOnce sync.Once + file_common_ext_proto_rawDescData = file_common_ext_proto_rawDesc +) + +func file_common_ext_proto_rawDescGZIP() []byte { + file_common_ext_proto_rawDescOnce.Do(func() { + file_common_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_ext_proto_rawDescData) + }) + return file_common_ext_proto_rawDescData +} + +var file_common_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_common_ext_proto_goTypes = []interface{}{ + (*Empty)(nil), // 0: pb.Empty +} +var file_common_ext_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_common_ext_proto_init() } +func file_common_ext_proto_init() { + if File_common_ext_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_common_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Empty); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_common_ext_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_common_ext_proto_goTypes, + DependencyIndexes: file_common_ext_proto_depIdxs, + MessageInfos: file_common_ext_proto_msgTypes, + }.Build() + File_common_ext_proto = out.File + file_common_ext_proto_rawDesc = nil + file_common_ext_proto_goTypes = nil + file_common_ext_proto_depIdxs = nil +} diff --git a/pkg/pb/im.connect.ext.pb.go b/pkg/pb/im.connect.ext.pb.go new file mode 100644 index 0000000..08fca7e --- /dev/null +++ b/pkg/pb/im.connect.ext.pb.go @@ -0,0 +1,2461 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.20.0--rc1 +// source: connect.ext.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type PackageType int32 + +const ( + PackageType_PT_UNKNOWN PackageType = 0 // 未知 + PackageType_PT_SIGN_IN PackageType = 1 // 设备登录请求 + PackageType_PT_SYNC PackageType = 2 // 消息同步触发 + PackageType_PT_HEARTBEAT PackageType = 3 // 心跳 + PackageType_PT_MESSAGE PackageType = 4 // 消息投递 + PackageType_PT_SUBSCRIBE_ROOM PackageType = 5 // 订阅房间 +) + +// Enum value maps for PackageType. +var ( + PackageType_name = map[int32]string{ + 0: "PT_UNKNOWN", + 1: "PT_SIGN_IN", + 2: "PT_SYNC", + 3: "PT_HEARTBEAT", + 4: "PT_MESSAGE", + 5: "PT_SUBSCRIBE_ROOM", + } + PackageType_value = map[string]int32{ + "PT_UNKNOWN": 0, + "PT_SIGN_IN": 1, + "PT_SYNC": 2, + "PT_HEARTBEAT": 3, + "PT_MESSAGE": 4, + "PT_SUBSCRIBE_ROOM": 5, + } +) + +func (x PackageType) Enum() *PackageType { + p := new(PackageType) + *p = x + return p +} + +func (x PackageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PackageType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[0].Descriptor() +} + +func (PackageType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[0] +} + +func (x PackageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PackageType.Descriptor instead. +func (PackageType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{0} +} + +// 消息类型 +type MessageType int32 + +const ( + MessageType_MT_UNKNOWN MessageType = 0 // 未知 + MessageType_MT_TEXT MessageType = 1 // 文本 + MessageType_MT_FACE MessageType = 2 // 表情 + MessageType_MT_VOICE MessageType = 3 // 语音消息 + MessageType_MT_IMAGE MessageType = 4 // 图片 + MessageType_MT_FILE MessageType = 5 // 文件 + MessageType_MT_LOCATION MessageType = 6 // 地理位置 + MessageType_MT_COMMAND MessageType = 7 // 指令推送 + MessageType_MT_CUSTOM MessageType = 8 // 自定义 + MessageType_MT_RECALL MessageType = 9 // 撤回消息 + MessageType_MT_RED_PACKAGE MessageType = 10 // 红包消息 +) + +// Enum value maps for MessageType. +var ( + MessageType_name = map[int32]string{ + 0: "MT_UNKNOWN", + 1: "MT_TEXT", + 2: "MT_FACE", + 3: "MT_VOICE", + 4: "MT_IMAGE", + 5: "MT_FILE", + 6: "MT_LOCATION", + 7: "MT_COMMAND", + 8: "MT_CUSTOM", + 9: "MT_RECALL", + 10: "MT_RED_PACKAGE", + } + MessageType_value = map[string]int32{ + "MT_UNKNOWN": 0, + "MT_TEXT": 1, + "MT_FACE": 2, + "MT_VOICE": 3, + "MT_IMAGE": 4, + "MT_FILE": 5, + "MT_LOCATION": 6, + "MT_COMMAND": 7, + "MT_CUSTOM": 8, + "MT_RECALL": 9, + "MT_RED_PACKAGE": 10, + } +) + +func (x MessageType) Enum() *MessageType { + p := new(MessageType) + *p = x + return p +} + +func (x MessageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MessageType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[1].Descriptor() +} + +func (MessageType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[1] +} + +func (x MessageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MessageType.Descriptor instead. +func (MessageType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{1} +} + +// 红包类型 +type RedPacketType int32 + +const ( + RedPacketType_RPT_UNKNOWN RedPacketType = 0 // 未知 + RedPacketType_RPT_FRIEND RedPacketType = 1 // 好友红包 + RedPacketType_RPT_GROUP_NORMAL RedPacketType = 2 // 群组普通红包 + RedPacketType_RPT_GROUP_LUCK RedPacketType = 3 // 群组手气红包 + RedPacketType_RPT_GROUP_SPECIALLY RedPacketType = 4 // 群组专属红包 + RedPacketType_RPT_SYSTEM_FOR RedPacketType = 5 // 系统红包 +) + +// Enum value maps for RedPacketType. +var ( + RedPacketType_name = map[int32]string{ + 0: "RPT_UNKNOWN", + 1: "RPT_FRIEND", + 2: "RPT_GROUP_NORMAL", + 3: "RPT_GROUP_LUCK", + 4: "RPT_GROUP_SPECIALLY", + 5: "RPT_SYSTEM_FOR", + } + RedPacketType_value = map[string]int32{ + "RPT_UNKNOWN": 0, + "RPT_FRIEND": 1, + "RPT_GROUP_NORMAL": 2, + "RPT_GROUP_LUCK": 3, + "RPT_GROUP_SPECIALLY": 4, + "RPT_SYSTEM_FOR": 5, + } +) + +func (x RedPacketType) Enum() *RedPacketType { + p := new(RedPacketType) + *p = x + return p +} + +func (x RedPacketType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RedPacketType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[2].Descriptor() +} + +func (RedPacketType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[2] +} + +func (x RedPacketType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RedPacketType.Descriptor instead. +func (RedPacketType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{2} +} + +// 红包消息类型 +type RedPacketMessageType int32 + +const ( + RedPacketMessageType_RMT_UNKNOWN RedPacketMessageType = 0 // 未知 + RedPacketMessageType_RMT_SEND RedPacketMessageType = 1 // 发红包 + RedPacketMessageType_RMT_GRAB RedPacketMessageType = 2 // 抢红包 +) + +// Enum value maps for RedPacketMessageType. +var ( + RedPacketMessageType_name = map[int32]string{ + 0: "RMT_UNKNOWN", + 1: "RMT_SEND", + 2: "RMT_GRAB", + } + RedPacketMessageType_value = map[string]int32{ + "RMT_UNKNOWN": 0, + "RMT_SEND": 1, + "RMT_GRAB": 2, + } +) + +func (x RedPacketMessageType) Enum() *RedPacketMessageType { + p := new(RedPacketMessageType) + *p = x + return p +} + +func (x RedPacketMessageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RedPacketMessageType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[3].Descriptor() +} + +func (RedPacketMessageType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[3] +} + +func (x RedPacketMessageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RedPacketMessageType.Descriptor instead. +func (RedPacketMessageType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{3} +} + +// 红包状态类型 +type RedPacketStatusType int32 + +const ( + RedPacketStatusType_RPS_NOT_DRAW RedPacketStatusType = 0 // 未领取 + RedPacketStatusType_RPS_DRAWING RedPacketStatusType = 1 // 领取中 + RedPacketStatusType_RPS_DRAW_OVER RedPacketStatusType = 2 // 领取完 + RedPacketStatusType_RPS_EXPIRE RedPacketStatusType = 3 //已过期 +) + +// Enum value maps for RedPacketStatusType. +var ( + RedPacketStatusType_name = map[int32]string{ + 0: "RPS_NOT_DRAW", + 1: "RPS_DRAWING", + 2: "RPS_DRAW_OVER", + 3: "RPS_EXPIRE", + } + RedPacketStatusType_value = map[string]int32{ + "RPS_NOT_DRAW": 0, + "RPS_DRAWING": 1, + "RPS_DRAW_OVER": 2, + "RPS_EXPIRE": 3, + } +) + +func (x RedPacketStatusType) Enum() *RedPacketStatusType { + p := new(RedPacketStatusType) + *p = x + return p +} + +func (x RedPacketStatusType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RedPacketStatusType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[4].Descriptor() +} + +func (RedPacketStatusType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[4] +} + +func (x RedPacketStatusType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RedPacketStatusType.Descriptor instead. +func (RedPacketStatusType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{4} +} + +type ReceiverType int32 + +const ( + ReceiverType_RT_UNKNOWN ReceiverType = 0 // 未知 + ReceiverType_RT_USER ReceiverType = 1 // 用户 + ReceiverType_RT_GROUP ReceiverType = 2 // 群组 + ReceiverType_RT_ROOM ReceiverType = 3 // 房间 +) + +// Enum value maps for ReceiverType. +var ( + ReceiverType_name = map[int32]string{ + 0: "RT_UNKNOWN", + 1: "RT_USER", + 2: "RT_GROUP", + 3: "RT_ROOM", + } + ReceiverType_value = map[string]int32{ + "RT_UNKNOWN": 0, + "RT_USER": 1, + "RT_GROUP": 2, + "RT_ROOM": 3, + } +) + +func (x ReceiverType) Enum() *ReceiverType { + p := new(ReceiverType) + *p = x + return p +} + +func (x ReceiverType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ReceiverType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[5].Descriptor() +} + +func (ReceiverType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[5] +} + +func (x ReceiverType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ReceiverType.Descriptor instead. +func (ReceiverType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{5} +} + +type SenderType int32 + +const ( + SenderType_ST_UNKNOWN SenderType = 0 // 未知的 + SenderType_ST_SYSTEM SenderType = 1 // IM系统 + SenderType_ST_USER SenderType = 2 // 用户 + SenderType_ST_BUSINESS SenderType = 3 // 业务方 +) + +// Enum value maps for SenderType. +var ( + SenderType_name = map[int32]string{ + 0: "ST_UNKNOWN", + 1: "ST_SYSTEM", + 2: "ST_USER", + 3: "ST_BUSINESS", + } + SenderType_value = map[string]int32{ + "ST_UNKNOWN": 0, + "ST_SYSTEM": 1, + "ST_USER": 2, + "ST_BUSINESS": 3, + } +) + +func (x SenderType) Enum() *SenderType { + p := new(SenderType) + *p = x + return p +} + +func (x SenderType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SenderType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[6].Descriptor() +} + +func (SenderType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[6] +} + +func (x SenderType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SenderType.Descriptor instead. +func (SenderType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{6} +} + +type MessageStatus int32 + +const ( + MessageStatus_MS_UNKNOWN MessageStatus = 0 // 未知的 + MessageStatus_MS_NORMAL MessageStatus = 1 // 正常的 + MessageStatus_MS_RECALL MessageStatus = 2 // 撤回 +) + +// Enum value maps for MessageStatus. +var ( + MessageStatus_name = map[int32]string{ + 0: "MS_UNKNOWN", + 1: "MS_NORMAL", + 2: "MS_RECALL", + } + MessageStatus_value = map[string]int32{ + "MS_UNKNOWN": 0, + "MS_NORMAL": 1, + "MS_RECALL": 2, + } +) + +func (x MessageStatus) Enum() *MessageStatus { + p := new(MessageStatus) + *p = x + return p +} + +func (x MessageStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MessageStatus) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[7].Descriptor() +} + +func (MessageStatus) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[7] +} + +func (x MessageStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MessageStatus.Descriptor instead. +func (MessageStatus) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{7} +} + +// 群组用户状态 +type GroupUserStatusType int32 + +const ( + GroupUserStatusType_GROUP_USER_STATUS_NORMAL GroupUserStatusType = 0 // 正常 + GroupUserStatusType_GROUP_USER_STATUS_Banned GroupUserStatusType = 1 // 禁言 +) + +// Enum value maps for GroupUserStatusType. +var ( + GroupUserStatusType_name = map[int32]string{ + 0: "GROUP_USER_STATUS_NORMAL", + 1: "GROUP_USER_STATUS_Banned", + } + GroupUserStatusType_value = map[string]int32{ + "GROUP_USER_STATUS_NORMAL": 0, + "GROUP_USER_STATUS_Banned": 1, + } +) + +func (x GroupUserStatusType) Enum() *GroupUserStatusType { + p := new(GroupUserStatusType) + *p = x + return p +} + +func (x GroupUserStatusType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GroupUserStatusType) Descriptor() protoreflect.EnumDescriptor { + return file_connect_ext_proto_enumTypes[8].Descriptor() +} + +func (GroupUserStatusType) Type() protoreflect.EnumType { + return &file_connect_ext_proto_enumTypes[8] +} + +func (x GroupUserStatusType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GroupUserStatusType.Descriptor instead. +func (GroupUserStatusType) EnumDescriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{8} +} + +// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 +type Message struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender *Sender `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` // 发送者 + ReceiverType ReceiverType `protobuf:"varint,2,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group + ReceiverId int64 `protobuf:"varint,3,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"` // 用户id或者群组id + ToUserIds []int64 `protobuf:"varint,4,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"` // 需要@的用户id列表 + MessageType MessageType `protobuf:"varint,5,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型 + MessageContent []byte `protobuf:"bytes,6,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"` // 消息内容 + Seq int64 `protobuf:"varint,7,opt,name=seq,proto3" json:"seq,omitempty"` // 用户消息发送序列号 + SendTime int64 `protobuf:"varint,8,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"` // 消息发送时间戳,精确到毫秒 + Status MessageStatus `protobuf:"varint,9,opt,name=status,proto3,enum=pb.MessageStatus" json:"status,omitempty"` // 消息状态 +} + +func (x *Message) Reset() { + *x = Message{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Message) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Message) ProtoMessage() {} + +func (x *Message) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Message.ProtoReflect.Descriptor instead. +func (*Message) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{0} +} + +func (x *Message) GetSender() *Sender { + if x != nil { + return x.Sender + } + return nil +} + +func (x *Message) GetReceiverType() ReceiverType { + if x != nil { + return x.ReceiverType + } + return ReceiverType_RT_UNKNOWN +} + +func (x *Message) GetReceiverId() int64 { + if x != nil { + return x.ReceiverId + } + return 0 +} + +func (x *Message) GetToUserIds() []int64 { + if x != nil { + return x.ToUserIds + } + return nil +} + +func (x *Message) GetMessageType() MessageType { + if x != nil { + return x.MessageType + } + return MessageType_MT_UNKNOWN +} + +func (x *Message) GetMessageContent() []byte { + if x != nil { + return x.MessageContent + } + return nil +} + +func (x *Message) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *Message) GetSendTime() int64 { + if x != nil { + return x.SendTime + } + return 0 +} + +func (x *Message) GetStatus() MessageStatus { + if x != nil { + return x.Status + } + return MessageStatus_MS_UNKNOWN +} + +type Sender struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SenderType SenderType `protobuf:"varint,1,opt,name=sender_type,json=senderType,proto3,enum=pb.SenderType" json:"sender_type,omitempty"` // 发送者类型,1:系统,2:用户,3:第三方业务系统 + SenderId int64 `protobuf:"varint,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` // 发送者id + DeviceId int64 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 发送者设备id + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 + Nickname string `protobuf:"bytes,5,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + Extra string `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` // 扩展字段 +} + +func (x *Sender) Reset() { + *x = Sender{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sender) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sender) ProtoMessage() {} + +func (x *Sender) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sender.ProtoReflect.Descriptor instead. +func (*Sender) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{1} +} + +func (x *Sender) GetSenderType() SenderType { + if x != nil { + return x.SenderType + } + return SenderType_ST_UNKNOWN +} + +func (x *Sender) GetSenderId() int64 { + if x != nil { + return x.SenderId + } + return 0 +} + +func (x *Sender) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *Sender) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *Sender) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *Sender) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +// 文本消息 +type Text struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` // 文本消息内容 +} + +func (x *Text) Reset() { + *x = Text{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Text) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Text) ProtoMessage() {} + +func (x *Text) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Text.ProtoReflect.Descriptor instead. +func (*Text) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{2} +} + +func (x *Text) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +// 表情消息 +type Face struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FaceId int64 `protobuf:"varint,1,opt,name=face_id,json=faceId,proto3" json:"face_id,omitempty"` + FaceUrl string `protobuf:"bytes,2,opt,name=face_url,json=faceUrl,proto3" json:"face_url,omitempty"` +} + +func (x *Face) Reset() { + *x = Face{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Face) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Face) ProtoMessage() {} + +func (x *Face) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Face.ProtoReflect.Descriptor instead. +func (*Face) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{3} +} + +func (x *Face) GetFaceId() int64 { + if x != nil { + return x.FaceId + } + return 0 +} + +func (x *Face) GetFaceUrl() string { + if x != nil { + return x.FaceUrl + } + return "" +} + +// 语音消息 +type Voice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 语音包id + Size int32 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` // 语音包大小 + Duration int32 `protobuf:"varint,3,opt,name=duration,proto3" json:"duration,omitempty"` // 语音时长 + Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` // 语音文件URL +} + +func (x *Voice) Reset() { + *x = Voice{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Voice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Voice) ProtoMessage() {} + +func (x *Voice) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Voice.ProtoReflect.Descriptor instead. +func (*Voice) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{4} +} + +func (x *Voice) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Voice) GetSize() int32 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *Voice) GetDuration() int32 { + if x != nil { + return x.Duration + } + return 0 +} + +func (x *Voice) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +// 图片消息 +type Image struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // 图片id + Width int32 `protobuf:"varint,2,opt,name=width,proto3" json:"width,omitempty"` // 图片宽度 + Height int32 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` // 图片长度 + Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` // 图片URL + ThumbnailUrl string `protobuf:"bytes,5,opt,name=thumbnail_url,json=thumbnailUrl,proto3" json:"thumbnail_url,omitempty"` // 图片缩略图url +} + +func (x *Image) Reset() { + *x = Image{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Image) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Image) ProtoMessage() {} + +func (x *Image) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Image.ProtoReflect.Descriptor instead. +func (*Image) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{5} +} + +func (x *Image) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Image) GetWidth() int32 { + if x != nil { + return x.Width + } + return 0 +} + +func (x *Image) GetHeight() int32 { + if x != nil { + return x.Height + } + return 0 +} + +func (x *Image) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *Image) GetThumbnailUrl() string { + if x != nil { + return x.ThumbnailUrl + } + return "" +} + +// 文件消息 +type File struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int64 `protobuf:"varint,12,opt,name=id,proto3" json:"id,omitempty"` // 文件id + Name string `protobuf:"bytes,13,opt,name=name,proto3" json:"name,omitempty"` // 文件名 + Size int64 `protobuf:"varint,14,opt,name=size,proto3" json:"size,omitempty"` // 文件大小 + Url string `protobuf:"bytes,15,opt,name=url,proto3" json:"url,omitempty"` // 文件url +} + +func (x *File) Reset() { + *x = File{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *File) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*File) ProtoMessage() {} + +func (x *File) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use File.ProtoReflect.Descriptor instead. +func (*File) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{6} +} + +func (x *File) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *File) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *File) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *File) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +// 地理位置消息 +type Location struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Desc string `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` // 描述 + Latitude float64 `protobuf:"fixed64,2,opt,name=latitude,proto3" json:"latitude,omitempty"` // 经度 + Longitude float64 `protobuf:"fixed64,3,opt,name=longitude,proto3" json:"longitude,omitempty"` // 纬度 +} + +func (x *Location) Reset() { + *x = Location{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Location) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Location) ProtoMessage() {} + +func (x *Location) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Location.ProtoReflect.Descriptor instead. +func (*Location) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{7} +} + +func (x *Location) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *Location) GetLatitude() float64 { + if x != nil { + return x.Latitude + } + return 0 +} + +func (x *Location) GetLongitude() float64 { + if x != nil { + return x.Longitude + } + return 0 +} + +// Command 指令推送,1000以下,IM内部用,1000以上,留给业务用 +type Command struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // 指令码 + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // 数据内容 +} + +func (x *Command) Reset() { + *x = Command{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Command) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Command) ProtoMessage() {} + +func (x *Command) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Command.ProtoReflect.Descriptor instead. +func (*Command) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{8} +} + +func (x *Command) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Command) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// 自定义消息 +type Custom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // 自定义数据 +} + +func (x *Custom) Reset() { + *x = Custom{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Custom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Custom) ProtoMessage() {} + +func (x *Custom) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Custom.ProtoReflect.Descriptor instead. +func (*Custom) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{9} +} + +func (x *Custom) GetData() string { + if x != nil { + return x.Data + } + return "" +} + +// 撤回消息 +type RECALL struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RecallSeq int64 `protobuf:"varint,1,opt,name=recall_seq,json=recallSeq,proto3" json:"recall_seq,omitempty"` // 撤回消息seq +} + +func (x *RECALL) Reset() { + *x = RECALL{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RECALL) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RECALL) ProtoMessage() {} + +func (x *RECALL) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RECALL.ProtoReflect.Descriptor instead. +func (*RECALL) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{10} +} + +func (x *RECALL) GetRecallSeq() int64 { + if x != nil { + return x.RecallSeq + } + return 0 +} + +// 红包消息 +type RED_PACKAGE struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RedMessageType RedPacketMessageType `protobuf:"varint,1,opt,name=red_message_type,json=redMessageType,proto3,enum=pb.RedPacketMessageType" json:"red_message_type,omitempty"` // 红包消息类型 + RedPacketType RedPacketType `protobuf:"varint,2,opt,name=red_packet_type,json=redPacketType,proto3,enum=pb.RedPacketType" json:"red_packet_type,omitempty"` // 红包类型 + RedPacketContent string `protobuf:"bytes,3,opt,name=red_packet_content,json=redPacketContent,proto3" json:"red_packet_content,omitempty"` // 红包文字内容 + RedPacketAmount float32 `protobuf:"fixed32,6,opt,name=red_packet_amount,json=redPacketAmount,proto3" json:"red_packet_amount,omitempty"` // 红包金额 + RedPacketNums int32 `protobuf:"varint,5,opt,name=red_packet_nums,json=redPacketNums,proto3" json:"red_packet_nums,omitempty"` // 红包数量 + RedPacketBalanceAmount float32 `protobuf:"fixed32,7,opt,name=red_packet_balance_amount,json=redPacketBalanceAmount,proto3" json:"red_packet_balance_amount,omitempty"` // 红包余额 + ReceivedUserId int64 `protobuf:"varint,8,opt,name=received_user_id,json=receivedUserId,proto3" json:"received_user_id,omitempty"` // 领取用户id + ReceivedUserAmount float32 `protobuf:"fixed32,9,opt,name=received_user_amount,json=receivedUserAmount,proto3" json:"received_user_amount,omitempty"` // 领取用户金额 + ReceivedUserNickname string `protobuf:"bytes,10,opt,name=received_user_nickname,json=receivedUserNickname,proto3" json:"received_user_nickname,omitempty"` // 领取用户昵称 + RedPacketStatusType RedPacketStatusType `protobuf:"varint,11,opt,name=red_packet_status_type,json=redPacketStatusType,proto3,enum=pb.RedPacketStatusType" json:"red_packet_status_type,omitempty"` // 领取状态 + RedPacketId int64 `protobuf:"varint,12,opt,name=red_packet_id,json=redPacketId,proto3" json:"red_packet_id,omitempty"` // 红包id + SendRedPacketUid int64 `protobuf:"varint,13,opt,name=send_red_packet_uid,json=sendRedPacketUid,proto3" json:"send_red_packet_uid,omitempty"` // 红包发送者uid + SendRedPacketNickname string `protobuf:"bytes,14,opt,name=send_red_packet_nickname,json=sendRedPacketNickname,proto3" json:"send_red_packet_nickname,omitempty"` // 红包发送者昵称 + SendRedPacketAvatarUrl string `protobuf:"bytes,15,opt,name=send_red_packet_avatar_url,json=sendRedPacketAvatarUrl,proto3" json:"send_red_packet_avatar_url,omitempty"` // 红包发送者头像 + RedPacketSmallContent string `protobuf:"bytes,16,opt,name=red_packet_small_content,json=redPacketSmallContent,proto3" json:"red_packet_small_content,omitempty"` // 红包小文字内容 + RedPacketCover string `protobuf:"bytes,17,opt,name=red_packet_cover,json=redPacketCover,proto3" json:"red_packet_cover,omitempty"` // 红包封面 +} + +func (x *RED_PACKAGE) Reset() { + *x = RED_PACKAGE{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RED_PACKAGE) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RED_PACKAGE) ProtoMessage() {} + +func (x *RED_PACKAGE) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RED_PACKAGE.ProtoReflect.Descriptor instead. +func (*RED_PACKAGE) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{11} +} + +func (x *RED_PACKAGE) GetRedMessageType() RedPacketMessageType { + if x != nil { + return x.RedMessageType + } + return RedPacketMessageType_RMT_UNKNOWN +} + +func (x *RED_PACKAGE) GetRedPacketType() RedPacketType { + if x != nil { + return x.RedPacketType + } + return RedPacketType_RPT_UNKNOWN +} + +func (x *RED_PACKAGE) GetRedPacketContent() string { + if x != nil { + return x.RedPacketContent + } + return "" +} + +func (x *RED_PACKAGE) GetRedPacketAmount() float32 { + if x != nil { + return x.RedPacketAmount + } + return 0 +} + +func (x *RED_PACKAGE) GetRedPacketNums() int32 { + if x != nil { + return x.RedPacketNums + } + return 0 +} + +func (x *RED_PACKAGE) GetRedPacketBalanceAmount() float32 { + if x != nil { + return x.RedPacketBalanceAmount + } + return 0 +} + +func (x *RED_PACKAGE) GetReceivedUserId() int64 { + if x != nil { + return x.ReceivedUserId + } + return 0 +} + +func (x *RED_PACKAGE) GetReceivedUserAmount() float32 { + if x != nil { + return x.ReceivedUserAmount + } + return 0 +} + +func (x *RED_PACKAGE) GetReceivedUserNickname() string { + if x != nil { + return x.ReceivedUserNickname + } + return "" +} + +func (x *RED_PACKAGE) GetRedPacketStatusType() RedPacketStatusType { + if x != nil { + return x.RedPacketStatusType + } + return RedPacketStatusType_RPS_NOT_DRAW +} + +func (x *RED_PACKAGE) GetRedPacketId() int64 { + if x != nil { + return x.RedPacketId + } + return 0 +} + +func (x *RED_PACKAGE) GetSendRedPacketUid() int64 { + if x != nil { + return x.SendRedPacketUid + } + return 0 +} + +func (x *RED_PACKAGE) GetSendRedPacketNickname() string { + if x != nil { + return x.SendRedPacketNickname + } + return "" +} + +func (x *RED_PACKAGE) GetSendRedPacketAvatarUrl() string { + if x != nil { + return x.SendRedPacketAvatarUrl + } + return "" +} + +func (x *RED_PACKAGE) GetRedPacketSmallContent() string { + if x != nil { + return x.RedPacketSmallContent + } + return "" +} + +func (x *RED_PACKAGE) GetRedPacketCover() string { + if x != nil { + return x.RedPacketCover + } + return "" +} + +// 上行数据 +type Input struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type PackageType `protobuf:"varint,1,opt,name=type,proto3,enum=pb.PackageType" json:"type,omitempty"` // 包的类型 + RequestId int64 `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` // 请求id + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // 数据 +} + +func (x *Input) Reset() { + *x = Input{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Input) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Input) ProtoMessage() {} + +func (x *Input) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Input.ProtoReflect.Descriptor instead. +func (*Input) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{12} +} + +func (x *Input) GetType() PackageType { + if x != nil { + return x.Type + } + return PackageType_PT_UNKNOWN +} + +func (x *Input) GetRequestId() int64 { + if x != nil { + return x.RequestId + } + return 0 +} + +func (x *Input) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// 下行数据 +type Output struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type PackageType `protobuf:"varint,1,opt,name=type,proto3,enum=pb.PackageType" json:"type,omitempty"` // 包的类型 + RequestId int64 `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` // 请求id + Code int32 `protobuf:"varint,3,opt,name=code,proto3" json:"code,omitempty"` // 错误码 + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // 错误信息 + Data []byte `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` // 数据 +} + +func (x *Output) Reset() { + *x = Output{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Output) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Output) ProtoMessage() {} + +func (x *Output) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Output.ProtoReflect.Descriptor instead. +func (*Output) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{13} +} + +func (x *Output) GetType() PackageType { + if x != nil { + return x.Type + } + return PackageType_PT_UNKNOWN +} + +func (x *Output) GetRequestId() int64 { + if x != nil { + return x.RequestId + } + return 0 +} + +func (x *Output) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Output) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *Output) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// 设备登录,package_type:1 +type SignInInput struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` // 秘钥 +} + +func (x *SignInInput) Reset() { + *x = SignInInput{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignInInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignInInput) ProtoMessage() {} + +func (x *SignInInput) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SignInInput.ProtoReflect.Descriptor instead. +func (*SignInInput) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{14} +} + +func (x *SignInInput) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *SignInInput) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *SignInInput) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +// 消息同步请求,package_type:2 +type SyncInput struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 客户端已经同步的序列号 +} + +func (x *SyncInput) Reset() { + *x = SyncInput{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncInput) ProtoMessage() {} + +func (x *SyncInput) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncInput.ProtoReflect.Descriptor instead. +func (*SyncInput) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{15} +} + +func (x *SyncInput) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +// 消息同步响应,package_type:2 +type SyncOutput struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Messages []*Message `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` // 消息列表 + HasMore bool `protobuf:"varint,2,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` // 是否有更多数据 +} + +func (x *SyncOutput) Reset() { + *x = SyncOutput{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncOutput) ProtoMessage() {} + +func (x *SyncOutput) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncOutput.ProtoReflect.Descriptor instead. +func (*SyncOutput) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{16} +} + +func (x *SyncOutput) GetMessages() []*Message { + if x != nil { + return x.Messages + } + return nil +} + +func (x *SyncOutput) GetHasMore() bool { + if x != nil { + return x.HasMore + } + return false +} + +// 订阅房间请求 +type SubscribeRoomInput struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int64 `protobuf:"varint,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` // 房间ID,如果为0,取消房间订阅 + Seq int64 `protobuf:"varint,2,opt,name=seq,proto3" json:"seq,omitempty"` // 消息消息序列号, +} + +func (x *SubscribeRoomInput) Reset() { + *x = SubscribeRoomInput{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeRoomInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeRoomInput) ProtoMessage() {} + +func (x *SubscribeRoomInput) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeRoomInput.ProtoReflect.Descriptor instead. +func (*SubscribeRoomInput) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{17} +} + +func (x *SubscribeRoomInput) GetRoomId() int64 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SubscribeRoomInput) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +// 消息投递,package_type:4 +type MessageSend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message *Message `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` // 消息 +} + +func (x *MessageSend) Reset() { + *x = MessageSend{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MessageSend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageSend) ProtoMessage() {} + +func (x *MessageSend) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MessageSend.ProtoReflect.Descriptor instead. +func (*MessageSend) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{18} +} + +func (x *MessageSend) GetMessage() *Message { + if x != nil { + return x.Message + } + return nil +} + +// 投递消息回执,package_type:4 +type MessageACK struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceAck int64 `protobuf:"varint,2,opt,name=device_ack,json=deviceAck,proto3" json:"device_ack,omitempty"` // 设备收到消息的确认号 + ReceiveTime int64 `protobuf:"varint,3,opt,name=receive_time,json=receiveTime,proto3" json:"receive_time,omitempty"` // 消息接收时间戳,精确到毫秒 +} + +func (x *MessageACK) Reset() { + *x = MessageACK{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_ext_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MessageACK) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageACK) ProtoMessage() {} + +func (x *MessageACK) ProtoReflect() protoreflect.Message { + mi := &file_connect_ext_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MessageACK.ProtoReflect.Descriptor instead. +func (*MessageACK) Descriptor() ([]byte, []int) { + return file_connect_ext_proto_rawDescGZIP(), []int{19} +} + +func (x *MessageACK) GetDeviceAck() int64 { + if x != nil { + return x.DeviceAck + } + return 0 +} + +func (x *MessageACK) GetReceiveTime() int64 { + if x != nil { + return x.ReceiveTime + } + return 0 +} + +var File_connect_ext_proto protoreflect.FileDescriptor + +var file_connect_ext_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0xdc, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, + 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, + 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, + 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x73, 0x65, 0x71, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x12, 0x2f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x1a, 0x0a, + 0x04, 0x54, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x0a, 0x04, 0x46, 0x61, 0x63, + 0x65, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x61, + 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x61, + 0x63, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x59, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x22, 0x7c, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, + 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x68, 0x75, + 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x55, 0x72, 0x6c, 0x22, 0x50, + 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x22, 0x58, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x22, 0x31, 0x0a, 0x07, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1c, 0x0a, + 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x27, 0x0a, 0x06, 0x52, + 0x45, 0x43, 0x41, 0x4c, 0x4c, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x5f, + 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x53, 0x65, 0x71, 0x22, 0xd4, 0x06, 0x0a, 0x0b, 0x52, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x43, + 0x4b, 0x41, 0x47, 0x45, 0x12, 0x42, 0x0a, 0x10, 0x72, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, + 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0f, 0x72, 0x65, 0x64, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x72, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x72, 0x65, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, + 0x0f, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x4e, 0x75, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x72, 0x65, 0x64, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x69, + 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x16, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x13, 0x72, 0x65, 0x64, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x64, + 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x10, 0x73, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x55, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x64, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x1a, + 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x16, 0x73, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x41, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x64, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x72, 0x65, 0x64, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x64, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x22, 0x5f, 0x0a, 0x05, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x8e, 0x01, 0x0a, + 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x59, 0x0a, + 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x1d, 0x0a, 0x09, 0x53, 0x79, 0x6e, 0x63, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0x3f, 0x0a, 0x12, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, + 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0x34, 0x0a, 0x0b, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x4e, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x43, 0x4b, 0x12, 0x1d, + 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x2a, 0x73, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0e, 0x0a, 0x0a, 0x50, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x50, 0x54, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, + 0x0b, 0x0a, 0x07, 0x50, 0x54, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, + 0x50, 0x54, 0x5f, 0x48, 0x45, 0x41, 0x52, 0x54, 0x42, 0x45, 0x41, 0x54, 0x10, 0x03, 0x12, 0x0e, + 0x0a, 0x0a, 0x50, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x15, + 0x0a, 0x11, 0x50, 0x54, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0x05, 0x2a, 0xb3, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x54, 0x5f, 0x54, 0x45, 0x58, 0x54, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x54, 0x5f, 0x46, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, + 0x0c, 0x0a, 0x08, 0x4d, 0x54, 0x5f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x4d, 0x54, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x4d, + 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x54, 0x5f, 0x4c, + 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x54, 0x5f, + 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x54, 0x5f, + 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x54, 0x5f, 0x52, + 0x45, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x54, 0x5f, 0x52, 0x45, + 0x44, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x10, 0x0a, 0x2a, 0x87, 0x01, 0x0a, 0x0d, + 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, + 0x0b, 0x52, 0x50, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, + 0x0a, 0x0a, 0x52, 0x50, 0x54, 0x5f, 0x46, 0x52, 0x49, 0x45, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x52, 0x50, 0x54, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, + 0x41, 0x4c, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x50, 0x54, 0x5f, 0x47, 0x52, 0x4f, 0x55, + 0x50, 0x5f, 0x4c, 0x55, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x50, 0x54, 0x5f, + 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x10, + 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x50, 0x54, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, + 0x46, 0x4f, 0x52, 0x10, 0x05, 0x2a, 0x43, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, + 0x0b, 0x52, 0x4d, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, + 0x0a, 0x08, 0x52, 0x4d, 0x54, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, + 0x52, 0x4d, 0x54, 0x5f, 0x47, 0x52, 0x41, 0x42, 0x10, 0x02, 0x2a, 0x5b, 0x0a, 0x13, 0x52, 0x65, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x50, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x44, 0x52, 0x41, + 0x57, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x53, 0x5f, 0x44, 0x52, 0x41, 0x57, 0x49, + 0x4e, 0x47, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x50, 0x53, 0x5f, 0x44, 0x52, 0x41, 0x57, + 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x50, 0x53, 0x5f, 0x45, + 0x58, 0x50, 0x49, 0x52, 0x45, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x54, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x54, 0x5f, 0x55, 0x53, + 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x54, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x54, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x03, 0x2a, + 0x49, 0x0a, 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, + 0x0a, 0x53, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, + 0x09, 0x53, 0x54, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, + 0x53, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x5f, + 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x03, 0x2a, 0x3d, 0x0a, 0x0d, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, + 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4d, + 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x53, + 0x5f, 0x52, 0x45, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x2a, 0x51, 0x0a, 0x13, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x1c, + 0x0a, 0x18, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x01, 0x42, 0x0d, 0x5a, 0x0b, + 0x67, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_connect_ext_proto_rawDescOnce sync.Once + file_connect_ext_proto_rawDescData = file_connect_ext_proto_rawDesc +) + +func file_connect_ext_proto_rawDescGZIP() []byte { + file_connect_ext_proto_rawDescOnce.Do(func() { + file_connect_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_connect_ext_proto_rawDescData) + }) + return file_connect_ext_proto_rawDescData +} + +var file_connect_ext_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_connect_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_connect_ext_proto_goTypes = []interface{}{ + (PackageType)(0), // 0: pb.PackageType + (MessageType)(0), // 1: pb.MessageType + (RedPacketType)(0), // 2: pb.RedPacketType + (RedPacketMessageType)(0), // 3: pb.RedPacketMessageType + (RedPacketStatusType)(0), // 4: pb.RedPacketStatusType + (ReceiverType)(0), // 5: pb.ReceiverType + (SenderType)(0), // 6: pb.SenderType + (MessageStatus)(0), // 7: pb.MessageStatus + (GroupUserStatusType)(0), // 8: pb.GroupUserStatusType + (*Message)(nil), // 9: pb.Message + (*Sender)(nil), // 10: pb.Sender + (*Text)(nil), // 11: pb.Text + (*Face)(nil), // 12: pb.Face + (*Voice)(nil), // 13: pb.Voice + (*Image)(nil), // 14: pb.Image + (*File)(nil), // 15: pb.File + (*Location)(nil), // 16: pb.Location + (*Command)(nil), // 17: pb.Command + (*Custom)(nil), // 18: pb.Custom + (*RECALL)(nil), // 19: pb.RECALL + (*RED_PACKAGE)(nil), // 20: pb.RED_PACKAGE + (*Input)(nil), // 21: pb.Input + (*Output)(nil), // 22: pb.Output + (*SignInInput)(nil), // 23: pb.SignInInput + (*SyncInput)(nil), // 24: pb.SyncInput + (*SyncOutput)(nil), // 25: pb.SyncOutput + (*SubscribeRoomInput)(nil), // 26: pb.SubscribeRoomInput + (*MessageSend)(nil), // 27: pb.MessageSend + (*MessageACK)(nil), // 28: pb.MessageACK +} +var file_connect_ext_proto_depIdxs = []int32{ + 10, // 0: pb.Message.sender:type_name -> pb.Sender + 5, // 1: pb.Message.receiver_type:type_name -> pb.ReceiverType + 1, // 2: pb.Message.message_type:type_name -> pb.MessageType + 7, // 3: pb.Message.status:type_name -> pb.MessageStatus + 6, // 4: pb.Sender.sender_type:type_name -> pb.SenderType + 3, // 5: pb.RED_PACKAGE.red_message_type:type_name -> pb.RedPacketMessageType + 2, // 6: pb.RED_PACKAGE.red_packet_type:type_name -> pb.RedPacketType + 4, // 7: pb.RED_PACKAGE.red_packet_status_type:type_name -> pb.RedPacketStatusType + 0, // 8: pb.Input.type:type_name -> pb.PackageType + 0, // 9: pb.Output.type:type_name -> pb.PackageType + 9, // 10: pb.SyncOutput.messages:type_name -> pb.Message + 9, // 11: pb.MessageSend.message:type_name -> pb.Message + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_connect_ext_proto_init() } +func file_connect_ext_proto_init() { + if File_connect_ext_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_connect_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Message); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sender); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Text); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Face); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Voice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Image); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*File); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Location); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Command); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Custom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RECALL); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RED_PACKAGE); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Input); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Output); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignInInput); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncInput); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncOutput); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribeRoomInput); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageSend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_ext_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageACK); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_connect_ext_proto_rawDesc, + NumEnums: 9, + NumMessages: 20, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_connect_ext_proto_goTypes, + DependencyIndexes: file_connect_ext_proto_depIdxs, + EnumInfos: file_connect_ext_proto_enumTypes, + MessageInfos: file_connect_ext_proto_msgTypes, + }.Build() + File_connect_ext_proto = out.File + file_connect_ext_proto_rawDesc = nil + file_connect_ext_proto_goTypes = nil + file_connect_ext_proto_depIdxs = nil +} diff --git a/pkg/pb/im.connect.int.pb.go b/pkg/pb/im.connect.int.pb.go new file mode 100644 index 0000000..eb72b6d --- /dev/null +++ b/pkg/pb/im.connect.int.pb.go @@ -0,0 +1,395 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.14.0 +// source: connect.int.proto_back + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DeliverMessageReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + MessageSend *MessageSend `protobuf:"bytes,2,opt,name=message_send,json=messageSend,proto3" json:"message_send,omitempty"` // 数据 +} + +func (x *DeliverMessageReq) Reset() { + *x = DeliverMessageReq{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_int_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeliverMessageReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeliverMessageReq) ProtoMessage() {} + +func (x *DeliverMessageReq) ProtoReflect() protoreflect.Message { + mi := &file_connect_int_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeliverMessageReq.ProtoReflect.Descriptor instead. +func (*DeliverMessageReq) Descriptor() ([]byte, []int) { + return file_connect_int_proto_rawDescGZIP(), []int{0} +} + +func (x *DeliverMessageReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *DeliverMessageReq) GetMessageSend() *MessageSend { + if x != nil { + return x.MessageSend + } + return nil +} + +// 房间推送 +type PushRoomMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int64 `protobuf:"varint,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` // 设备id + MessageSend *MessageSend `protobuf:"bytes,2,opt,name=message_send,json=messageSend,proto3" json:"message_send,omitempty"` // 数据 +} + +func (x *PushRoomMsg) Reset() { + *x = PushRoomMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_int_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PushRoomMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushRoomMsg) ProtoMessage() {} + +func (x *PushRoomMsg) ProtoReflect() protoreflect.Message { + mi := &file_connect_int_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PushRoomMsg.ProtoReflect.Descriptor instead. +func (*PushRoomMsg) Descriptor() ([]byte, []int) { + return file_connect_int_proto_rawDescGZIP(), []int{1} +} + +func (x *PushRoomMsg) GetRoomId() int64 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *PushRoomMsg) GetMessageSend() *MessageSend { + if x != nil { + return x.MessageSend + } + return nil +} + +// 房间推送 +type PushAllMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MessageSend *MessageSend `protobuf:"bytes,2,opt,name=message_send,json=messageSend,proto3" json:"message_send,omitempty"` // 数据 +} + +func (x *PushAllMsg) Reset() { + *x = PushAllMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_connect_int_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PushAllMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushAllMsg) ProtoMessage() {} + +func (x *PushAllMsg) ProtoReflect() protoreflect.Message { + mi := &file_connect_int_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PushAllMsg.ProtoReflect.Descriptor instead. +func (*PushAllMsg) Descriptor() ([]byte, []int) { + return file_connect_int_proto_rawDescGZIP(), []int{2} +} + +func (x *PushAllMsg) GetMessageSend() *MessageSend { + if x != nil { + return x.MessageSend + } + return nil +} + +var File_connect_int_proto protoreflect.FileDescriptor + +var file_connect_int_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x64, 0x0a, 0x11, + 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x32, + 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, + 0x6e, 0x64, 0x22, 0x5a, 0x0a, 0x0b, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x73, + 0x67, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x22, 0x40, + 0x0a, 0x0a, 0x50, 0x75, 0x73, 0x68, 0x41, 0x6c, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x0c, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0x65, 0x6e, 0x64, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, + 0x32, 0x40, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x74, 0x12, 0x32, + 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x42, 0x0d, 0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, + 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_connect_int_proto_rawDescOnce sync.Once + file_connect_int_proto_rawDescData = file_connect_int_proto_rawDesc +) + +func file_connect_int_proto_rawDescGZIP() []byte { + file_connect_int_proto_rawDescOnce.Do(func() { + file_connect_int_proto_rawDescData = protoimpl.X.CompressGZIP(file_connect_int_proto_rawDescData) + }) + return file_connect_int_proto_rawDescData +} + +var file_connect_int_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_connect_int_proto_goTypes = []interface{}{ + (*DeliverMessageReq)(nil), // 0: pb.DeliverMessageReq + (*PushRoomMsg)(nil), // 1: pb.PushRoomMsg + (*PushAllMsg)(nil), // 2: pb.PushAllMsg + (*MessageSend)(nil), // 3: pb.MessageSend + (*Empty)(nil), // 4: pb.Empty +} +var file_connect_int_proto_depIdxs = []int32{ + 3, // 0: pb.DeliverMessageReq.message_send:type_name -> pb.MessageSend + 3, // 1: pb.PushRoomMsg.message_send:type_name -> pb.MessageSend + 3, // 2: pb.PushAllMsg.message_send:type_name -> pb.MessageSend + 0, // 3: pb.ConnectInt.DeliverMessage:input_type -> pb.DeliverMessageReq + 4, // 4: pb.ConnectInt.DeliverMessage:output_type -> pb.Empty + 4, // [4:5] is the sub-list for method output_type + 3, // [3:4] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_connect_int_proto_init() } +func file_connect_int_proto_init() { + if File_connect_int_proto != nil { + return + } + file_common_ext_proto_init() + file_connect_ext_proto_init() + if !protoimpl.UnsafeEnabled { + file_connect_int_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeliverMessageReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_int_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PushRoomMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_connect_int_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PushAllMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_connect_int_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_connect_int_proto_goTypes, + DependencyIndexes: file_connect_int_proto_depIdxs, + MessageInfos: file_connect_int_proto_msgTypes, + }.Build() + File_connect_int_proto = out.File + file_connect_int_proto_rawDesc = nil + file_connect_int_proto_goTypes = nil + file_connect_int_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated comm +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// ConnectIntClient is the client API for ConnectInt service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ConnectIntClient interface { + // 消息投递 + DeliverMessage(ctx context.Context, in *DeliverMessageReq, opts ...grpc.CallOption) (*Empty, error) +} + +type connectIntClient struct { + cc grpc.ClientConnInterface +} + +func NewConnectIntClient(cc grpc.ClientConnInterface) ConnectIntClient { + return &connectIntClient{cc} +} + +func (c *connectIntClient) DeliverMessage(ctx context.Context, in *DeliverMessageReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.ConnectInt/DeliverMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ConnectIntServer is the server API for ConnectInt service. +type ConnectIntServer interface { + // 消息投递 + DeliverMessage(context.Context, *DeliverMessageReq) (*Empty, error) +} + +// UnimplementedConnectIntServer can be embedded to have forward compatible implementations. +type UnimplementedConnectIntServer struct { +} + +func (*UnimplementedConnectIntServer) DeliverMessage(context.Context, *DeliverMessageReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeliverMessage not implemented") +} + +func RegisterConnectIntServer(s *grpc.Server, srv ConnectIntServer) { + s.RegisterService(&_ConnectInt_serviceDesc, srv) +} + +func _ConnectInt_DeliverMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeliverMessageReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConnectIntServer).DeliverMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.ConnectInt/DeliverMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConnectIntServer).DeliverMessage(ctx, req.(*DeliverMessageReq)) + } + return interceptor(ctx, in, info, handler) +} + +var _ConnectInt_serviceDesc = grpc.ServiceDesc{ + ServiceName: "pb.ConnectInt", + HandlerType: (*ConnectIntServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DeliverMessage", + Handler: _ConnectInt_DeliverMessage_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "connect.int.proto_back", +} diff --git a/pkg/pb/im.logic.ext.pb.go b/pkg/pb/im.logic.ext.pb.go new file mode 100644 index 0000000..70a6ec6 --- /dev/null +++ b/pkg/pb/im.logic.ext.pb.go @@ -0,0 +1,3587 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.20.0--rc1 +// source: logic.ext.proto + +package pb + +import ( + "context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoimpl" + "reflect" + "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MemberType int32 + +const ( + MemberType_GMT_UNKNOWN MemberType = 0 // 未知 + MemberType_GMT_ADMIN MemberType = 1 // 管理员 + MemberType_GMT_MEMBER MemberType = 2 // 成员 +) + +// Enum value maps for MemberType. +var ( + MemberType_name = map[int32]string{ + 0: "GMT_UNKNOWN", + 1: "GMT_ADMIN", + 2: "GMT_MEMBER", + } + MemberType_value = map[string]int32{ + "GMT_UNKNOWN": 0, + "GMT_ADMIN": 1, + "GMT_MEMBER": 2, + } +) + +func (x MemberType) Enum() *MemberType { + p := new(MemberType) + *p = x + return p +} + +func (x MemberType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MemberType) Descriptor() protoreflect.EnumDescriptor { + return file_logic_ext_proto_enumTypes[0].Descriptor() +} + +func (MemberType) Type() protoreflect.EnumType { + return &file_logic_ext_proto_enumTypes[0] +} + +func (x MemberType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MemberType.Descriptor instead. +func (MemberType) EnumDescriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{0} +} + +type RegisterDeviceReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type int32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` // 设备类型 + Brand string `protobuf:"bytes,3,opt,name=brand,proto3" json:"brand,omitempty"` // 厂商 + Model string `protobuf:"bytes,4,opt,name=model,proto3" json:"model,omitempty"` // 机型 + SystemVersion string `protobuf:"bytes,5,opt,name=system_version,json=systemVersion,proto3" json:"system_version,omitempty"` // 系统版本 + SdkVersion string `protobuf:"bytes,6,opt,name=sdk_version,json=sdkVersion,proto3" json:"sdk_version,omitempty"` // sdk版本号 +} + +func (x *RegisterDeviceReq) Reset() { + *x = RegisterDeviceReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegisterDeviceReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegisterDeviceReq) ProtoMessage() {} + +func (x *RegisterDeviceReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegisterDeviceReq.ProtoReflect.Descriptor instead. +func (*RegisterDeviceReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{0} +} + +func (x *RegisterDeviceReq) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *RegisterDeviceReq) GetBrand() string { + if x != nil { + return x.Brand + } + return "" +} + +func (x *RegisterDeviceReq) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *RegisterDeviceReq) GetSystemVersion() string { + if x != nil { + return x.SystemVersion + } + return "" +} + +func (x *RegisterDeviceReq) GetSdkVersion() string { + if x != nil { + return x.SdkVersion + } + return "" +} + +type RegisterDeviceResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id +} + +func (x *RegisterDeviceResp) Reset() { + *x = RegisterDeviceResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegisterDeviceResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegisterDeviceResp) ProtoMessage() {} + +func (x *RegisterDeviceResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegisterDeviceResp.ProtoReflect.Descriptor instead. +func (*RegisterDeviceResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{1} +} + +func (x *RegisterDeviceResp) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +type SendMessageReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ReceiverType ReceiverType `protobuf:"varint,1,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group + ReceiverId int64 `protobuf:"varint,2,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"` // 用户id或者群组id + ToUserIds []int64 `protobuf:"varint,3,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"` // 需要@的用户id列表 + MessageType MessageType `protobuf:"varint,4,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型 + MessageContent []byte `protobuf:"bytes,5,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"` // 消息内容 + SendTime int64 `protobuf:"varint,6,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"` // 消息发送时间戳,精确到毫秒 + IsPersist bool `protobuf:"varint,7,opt,name=is_persist,json=isPersist,proto3" json:"is_persist,omitempty"` // 是否将消息持久化到数据库 + MessageContentBack string `protobuf:"bytes,8,opt,name=message_content_back,json=messageContentBack,proto3" json:"message_content_back,omitempty"` +} + +func (x *SendMessageReq) Reset() { + *x = SendMessageReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageReq) ProtoMessage() {} + +func (x *SendMessageReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMessageReq.ProtoReflect.Descriptor instead. +func (*SendMessageReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{2} +} + +func (x *SendMessageReq) GetReceiverType() ReceiverType { + if x != nil { + return x.ReceiverType + } + return ReceiverType_RT_UNKNOWN +} + +func (x *SendMessageReq) GetReceiverId() int64 { + if x != nil { + return x.ReceiverId + } + return 0 +} + +func (x *SendMessageReq) GetToUserIds() []int64 { + if x != nil { + return x.ToUserIds + } + return nil +} + +func (x *SendMessageReq) GetMessageType() MessageType { + if x != nil { + return x.MessageType + } + return MessageType_MT_UNKNOWN +} + +func (x *SendMessageReq) GetMessageContent() []byte { + if x != nil { + return x.MessageContent + } + return nil +} + +func (x *SendMessageReq) GetSendTime() int64 { + if x != nil { + return x.SendTime + } + return 0 +} + +func (x *SendMessageReq) GetIsPersist() bool { + if x != nil { + return x.IsPersist + } + return false +} + +func (x *SendMessageReq) GetMessageContentBack() string { + if x != nil { + return x.MessageContentBack + } + return "" +} + +type SendMessageResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号 +} + +func (x *SendMessageResp) Reset() { + *x = SendMessageResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageResp) ProtoMessage() {} + +func (x *SendMessageResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMessageResp.ProtoReflect.Descriptor instead. +func (*SendMessageResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{3} +} + +func (x *SendMessageResp) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +type RecallMessageReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ReceiverType ReceiverType `protobuf:"varint,1,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group + ReceiverId int64 `protobuf:"varint,2,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"` // 用户id或者群组id + ToUserIds []int64 `protobuf:"varint,3,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"` // 需要@的用户id列表 + MessageType MessageType `protobuf:"varint,4,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型 + MessageContent []byte `protobuf:"bytes,5,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"` // 消息内容 + SendTime int64 `protobuf:"varint,6,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"` // 消息发送时间戳,精确到毫秒 + IsPersist bool `protobuf:"varint,7,opt,name=is_persist,json=isPersist,proto3" json:"is_persist,omitempty"` // 是否将消息持久化到数据库 + MessageContentBack string `protobuf:"bytes,8,opt,name=message_content_back,json=messageContentBack,proto3" json:"message_content_back,omitempty"` +} + +func (x *RecallMessageReq) Reset() { + *x = RecallMessageReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecallMessageReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecallMessageReq) ProtoMessage() {} + +func (x *RecallMessageReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecallMessageReq.ProtoReflect.Descriptor instead. +func (*RecallMessageReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{4} +} + +func (x *RecallMessageReq) GetReceiverType() ReceiverType { + if x != nil { + return x.ReceiverType + } + return ReceiverType_RT_UNKNOWN +} + +func (x *RecallMessageReq) GetReceiverId() int64 { + if x != nil { + return x.ReceiverId + } + return 0 +} + +func (x *RecallMessageReq) GetToUserIds() []int64 { + if x != nil { + return x.ToUserIds + } + return nil +} + +func (x *RecallMessageReq) GetMessageType() MessageType { + if x != nil { + return x.MessageType + } + return MessageType_MT_UNKNOWN +} + +func (x *RecallMessageReq) GetMessageContent() []byte { + if x != nil { + return x.MessageContent + } + return nil +} + +func (x *RecallMessageReq) GetSendTime() int64 { + if x != nil { + return x.SendTime + } + return 0 +} + +func (x *RecallMessageReq) GetIsPersist() bool { + if x != nil { + return x.IsPersist + } + return false +} + +func (x *RecallMessageReq) GetMessageContentBack() string { + if x != nil { + return x.MessageContentBack + } + return "" +} + +type RecallMessageResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号 +} + +func (x *RecallMessageResp) Reset() { + *x = RecallMessageResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecallMessageResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecallMessageResp) ProtoMessage() {} + +func (x *RecallMessageResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecallMessageResp.ProtoReflect.Descriptor instead. +func (*RecallMessageResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{5} +} + +func (x *RecallMessageResp) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +type SendRedPacketReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ReceiverType ReceiverType `protobuf:"varint,1,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group + ReceiverId int64 `protobuf:"varint,2,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"` // 用户id或者群组id + MessageType MessageType `protobuf:"varint,3,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型 + MessageContent []byte `protobuf:"bytes,4,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"` // 消息内容 + SendTime int64 `protobuf:"varint,5,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"` // 消息发送时间戳,精确到毫秒 + ToUserIds []int64 `protobuf:"varint,6,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"` // 红包给到哪些用户(专属红包) + MessageContentBack string `protobuf:"bytes,7,opt,name=message_content_back,json=messageContentBack,proto3" json:"message_content_back,omitempty"` +} + +func (x *SendRedPacketReq) Reset() { + *x = SendRedPacketReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendRedPacketReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendRedPacketReq) ProtoMessage() {} + +func (x *SendRedPacketReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendRedPacketReq.ProtoReflect.Descriptor instead. +func (*SendRedPacketReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{6} +} + +func (x *SendRedPacketReq) GetReceiverType() ReceiverType { + if x != nil { + return x.ReceiverType + } + return ReceiverType_RT_UNKNOWN +} + +func (x *SendRedPacketReq) GetReceiverId() int64 { + if x != nil { + return x.ReceiverId + } + return 0 +} + +func (x *SendRedPacketReq) GetMessageType() MessageType { + if x != nil { + return x.MessageType + } + return MessageType_MT_UNKNOWN +} + +func (x *SendRedPacketReq) GetMessageContent() []byte { + if x != nil { + return x.MessageContent + } + return nil +} + +func (x *SendRedPacketReq) GetSendTime() int64 { + if x != nil { + return x.SendTime + } + return 0 +} + +func (x *SendRedPacketReq) GetToUserIds() []int64 { + if x != nil { + return x.ToUserIds + } + return nil +} + +func (x *SendRedPacketReq) GetMessageContentBack() string { + if x != nil { + return x.MessageContentBack + } + return "" +} + +type SendRedPacketResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号 +} + +func (x *SendRedPacketResp) Reset() { + *x = SendRedPacketResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendRedPacketResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendRedPacketResp) ProtoMessage() {} + +func (x *SendRedPacketResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendRedPacketResp.ProtoReflect.Descriptor instead. +func (*SendRedPacketResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{7} +} + +func (x *SendRedPacketResp) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +type PushRoomReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int64 `protobuf:"varint,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` // 房间id + MessageType MessageType `protobuf:"varint,2,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型 + MessageContent []byte `protobuf:"bytes,3,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"` // 消息内容 + SendTime int64 `protobuf:"varint,4,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"` // 消息发送时间戳,精确到毫秒 + IsPersist bool `protobuf:"varint,5,opt,name=is_persist,json=isPersist,proto3" json:"is_persist,omitempty"` // 是否将消息持久化 + IsPriority bool `protobuf:"varint,6,opt,name=is_priority,json=isPriority,proto3" json:"is_priority,omitempty"` // 是否优先推送 +} + +func (x *PushRoomReq) Reset() { + *x = PushRoomReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PushRoomReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushRoomReq) ProtoMessage() {} + +func (x *PushRoomReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PushRoomReq.ProtoReflect.Descriptor instead. +func (*PushRoomReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{8} +} + +func (x *PushRoomReq) GetRoomId() int64 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *PushRoomReq) GetMessageType() MessageType { + if x != nil { + return x.MessageType + } + return MessageType_MT_UNKNOWN +} + +func (x *PushRoomReq) GetMessageContent() []byte { + if x != nil { + return x.MessageContent + } + return nil +} + +func (x *PushRoomReq) GetSendTime() int64 { + if x != nil { + return x.SendTime + } + return 0 +} + +func (x *PushRoomReq) GetIsPersist() bool { + if x != nil { + return x.IsPersist + } + return false +} + +func (x *PushRoomReq) GetIsPriority() bool { + if x != nil { + return x.IsPriority + } + return false +} + +type AddFriendReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FriendId int64 `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 用户id + Remarks string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` // 描述 +} + +func (x *AddFriendReq) Reset() { + *x = AddFriendReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddFriendReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddFriendReq) ProtoMessage() {} + +func (x *AddFriendReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddFriendReq.ProtoReflect.Descriptor instead. +func (*AddFriendReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{9} +} + +func (x *AddFriendReq) GetFriendId() int64 { + if x != nil { + return x.FriendId + } + return 0 +} + +func (x *AddFriendReq) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +func (x *AddFriendReq) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +type DeleteFriendReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id +} + +func (x *DeleteFriendReq) Reset() { + *x = DeleteFriendReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteFriendReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteFriendReq) ProtoMessage() {} + +func (x *DeleteFriendReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteFriendReq.ProtoReflect.Descriptor instead. +func (*DeleteFriendReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{10} +} + +func (x *DeleteFriendReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +type AgreeAddFriendReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Remarks string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 +} + +func (x *AgreeAddFriendReq) Reset() { + *x = AgreeAddFriendReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AgreeAddFriendReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AgreeAddFriendReq) ProtoMessage() {} + +func (x *AgreeAddFriendReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AgreeAddFriendReq.ProtoReflect.Descriptor instead. +func (*AgreeAddFriendReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{11} +} + +func (x *AgreeAddFriendReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *AgreeAddFriendReq) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +type SetFriendReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FriendId int64 `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 好友id + Remarks string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 + Extra string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *SetFriendReq) Reset() { + *x = SetFriendReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetFriendReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetFriendReq) ProtoMessage() {} + +func (x *SetFriendReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetFriendReq.ProtoReflect.Descriptor instead. +func (*SetFriendReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{12} +} + +func (x *SetFriendReq) GetFriendId() int64 { + if x != nil { + return x.FriendId + } + return 0 +} + +func (x *SetFriendReq) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +func (x *SetFriendReq) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type SetFriendResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FriendId int64 `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 好友id + Remarks string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 + Extra string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *SetFriendResp) Reset() { + *x = SetFriendResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetFriendResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetFriendResp) ProtoMessage() {} + +func (x *SetFriendResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetFriendResp.ProtoReflect.Descriptor instead. +func (*SetFriendResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{13} +} + +func (x *SetFriendResp) GetFriendId() int64 { + if x != nil { + return x.FriendId + } + return 0 +} + +func (x *SetFriendResp) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +func (x *SetFriendResp) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type Friend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` // 电话号码 + Nickname string `protobuf:"bytes,3,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + Sex int32 `protobuf:"varint,4,opt,name=sex,proto3" json:"sex,omitempty"` // 性别 + AvatarUrl string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像地址 + UserExtra string `protobuf:"bytes,6,opt,name=user_extra,json=userExtra,proto3" json:"user_extra,omitempty"` // 用户附加字段 + Remarks string `protobuf:"bytes,7,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 + Extra string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *Friend) Reset() { + *x = Friend{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Friend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Friend) ProtoMessage() {} + +func (x *Friend) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Friend.ProtoReflect.Descriptor instead. +func (*Friend) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{14} +} + +func (x *Friend) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *Friend) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +func (x *Friend) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *Friend) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *Friend) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *Friend) GetUserExtra() string { + if x != nil { + return x.UserExtra + } + return "" +} + +func (x *Friend) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +func (x *Friend) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type GetFriendsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Friends []*Friend `protobuf:"bytes,1,rep,name=friends,proto3" json:"friends,omitempty"` +} + +func (x *GetFriendsResp) Reset() { + *x = GetFriendsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFriendsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFriendsResp) ProtoMessage() {} + +func (x *GetFriendsResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFriendsResp.ProtoReflect.Descriptor instead. +func (*GetFriendsResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{15} +} + +func (x *GetFriendsResp) GetFriends() []*Friend { + if x != nil { + return x.Friends + } + return nil +} + +type CreateGroupReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // 名称 + AvatarUrl string `protobuf:"bytes,2,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 + Introduction string `protobuf:"bytes,3,opt,name=introduction,proto3" json:"introduction,omitempty"` // 简介 + Extra string `protobuf:"bytes,4,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 + MemberIds []int64 `protobuf:"varint,5,rep,packed,name=member_ids,json=memberIds,proto3" json:"member_ids,omitempty"` // 群组成员ID列表 +} + +func (x *CreateGroupReq) Reset() { + *x = CreateGroupReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateGroupReq) ProtoMessage() {} + +func (x *CreateGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateGroupReq.ProtoReflect.Descriptor instead. +func (*CreateGroupReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{16} +} + +func (x *CreateGroupReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CreateGroupReq) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *CreateGroupReq) GetIntroduction() string { + if x != nil { + return x.Introduction + } + return "" +} + +func (x *CreateGroupReq) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +func (x *CreateGroupReq) GetMemberIds() []int64 { + if x != nil { + return x.MemberIds + } + return nil +} + +type CreateGroupResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id +} + +func (x *CreateGroupResp) Reset() { + *x = CreateGroupResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateGroupResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateGroupResp) ProtoMessage() {} + +func (x *CreateGroupResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateGroupResp.ProtoReflect.Descriptor instead. +func (*CreateGroupResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{17} +} + +func (x *CreateGroupResp) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +type UpdateGroupReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id + AvatarUrl string `protobuf:"bytes,2,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // 名称 + Introduction string `protobuf:"bytes,4,opt,name=introduction,proto3" json:"introduction,omitempty"` // 简介 + Extra string `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *UpdateGroupReq) Reset() { + *x = UpdateGroupReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateGroupReq) ProtoMessage() {} + +func (x *UpdateGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateGroupReq.ProtoReflect.Descriptor instead. +func (*UpdateGroupReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{18} +} + +func (x *UpdateGroupReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *UpdateGroupReq) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *UpdateGroupReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UpdateGroupReq) GetIntroduction() string { + if x != nil { + return x.Introduction + } + return "" +} + +func (x *UpdateGroupReq) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type GetGroupReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` +} + +func (x *GetGroupReq) Reset() { + *x = GetGroupReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGroupReq) ProtoMessage() {} + +func (x *GetGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGroupReq.ProtoReflect.Descriptor instead. +func (*GetGroupReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{19} +} + +func (x *GetGroupReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +type GetGroupResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` +} + +func (x *GetGroupResp) Reset() { + *x = GetGroupResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGroupResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGroupResp) ProtoMessage() {} + +func (x *GetGroupResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGroupResp.ProtoReflect.Descriptor instead. +func (*GetGroupResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{20} +} + +func (x *GetGroupResp) GetGroup() *Group { + if x != nil { + return x.Group + } + return nil +} + +type Group struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // 名称 + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 + Introduction string `protobuf:"bytes,4,opt,name=introduction,proto3" json:"introduction,omitempty"` // 简介 + UserMum int32 `protobuf:"varint,5,opt,name=user_mum,json=userMum,proto3" json:"user_mum,omitempty"` // 用户数 + Extra string `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 + CreateTime int64 `protobuf:"varint,7,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间 + UpdateTime int64 `protobuf:"varint,8,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 +} + +func (x *Group) Reset() { + *x = Group{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Group) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Group) ProtoMessage() {} + +func (x *Group) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Group.ProtoReflect.Descriptor instead. +func (*Group) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{21} +} + +func (x *Group) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *Group) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Group) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *Group) GetIntroduction() string { + if x != nil { + return x.Introduction + } + return "" +} + +func (x *Group) GetUserMum() int32 { + if x != nil { + return x.UserMum + } + return 0 +} + +func (x *Group) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +func (x *Group) GetCreateTime() int64 { + if x != nil { + return x.CreateTime + } + return 0 +} + +func (x *Group) GetUpdateTime() int64 { + if x != nil { + return x.UpdateTime + } + return 0 +} + +type GetGroupsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Groups []*Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` +} + +func (x *GetGroupsResp) Reset() { + *x = GetGroupsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGroupsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGroupsResp) ProtoMessage() {} + +func (x *GetGroupsResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGroupsResp.ProtoReflect.Descriptor instead. +func (*GetGroupsResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{22} +} + +func (x *GetGroupsResp) GetGroups() []*Group { + if x != nil { + return x.Groups + } + return nil +} + +type AddGroupMembersReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id + UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // 用户id列表 +} + +func (x *AddGroupMembersReq) Reset() { + *x = AddGroupMembersReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddGroupMembersReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddGroupMembersReq) ProtoMessage() {} + +func (x *AddGroupMembersReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddGroupMembersReq.ProtoReflect.Descriptor instead. +func (*AddGroupMembersReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{23} +} + +func (x *AddGroupMembersReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *AddGroupMembersReq) GetUserIds() []int64 { + if x != nil { + return x.UserIds + } + return nil +} + +type AddGroupMembersResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserIds []int64 `protobuf:"varint,1,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // 已经在群组的用户id列表 +} + +func (x *AddGroupMembersResp) Reset() { + *x = AddGroupMembersResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddGroupMembersResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddGroupMembersResp) ProtoMessage() {} + +func (x *AddGroupMembersResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddGroupMembersResp.ProtoReflect.Descriptor instead. +func (*AddGroupMembersResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{24} +} + +func (x *AddGroupMembersResp) GetUserIds() []int64 { + if x != nil { + return x.UserIds + } + return nil +} + +type UpdateGroupMemberReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + MemberType MemberType `protobuf:"varint,3,opt,name=member_type,json=memberType,proto3,enum=pb.MemberType" json:"member_type,omitempty"` // 成员类型 + Remarks string `protobuf:"bytes,4,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 + Extra string `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *UpdateGroupMemberReq) Reset() { + *x = UpdateGroupMemberReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateGroupMemberReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateGroupMemberReq) ProtoMessage() {} + +func (x *UpdateGroupMemberReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateGroupMemberReq.ProtoReflect.Descriptor instead. +func (*UpdateGroupMemberReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{25} +} + +func (x *UpdateGroupMemberReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *UpdateGroupMemberReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *UpdateGroupMemberReq) GetMemberType() MemberType { + if x != nil { + return x.MemberType + } + return MemberType_GMT_UNKNOWN +} + +func (x *UpdateGroupMemberReq) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +func (x *UpdateGroupMemberReq) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type DeleteGroupMemberReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id +} + +func (x *DeleteGroupMemberReq) Reset() { + *x = DeleteGroupMemberReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteGroupMemberReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteGroupMemberReq) ProtoMessage() {} + +func (x *DeleteGroupMemberReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteGroupMemberReq.ProtoReflect.Descriptor instead. +func (*DeleteGroupMemberReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{26} +} + +func (x *DeleteGroupMemberReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *DeleteGroupMemberReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +type GetGroupMembersReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` +} + +func (x *GetGroupMembersReq) Reset() { + *x = GetGroupMembersReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGroupMembersReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGroupMembersReq) ProtoMessage() {} + +func (x *GetGroupMembersReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGroupMembersReq.ProtoReflect.Descriptor instead. +func (*GetGroupMembersReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{27} +} + +func (x *GetGroupMembersReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +type GetGroupMembersResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Members []*GroupMember `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` +} + +func (x *GetGroupMembersResp) Reset() { + *x = GetGroupMembersResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGroupMembersResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGroupMembersResp) ProtoMessage() {} + +func (x *GetGroupMembersResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGroupMembersResp.ProtoReflect.Descriptor instead. +func (*GetGroupMembersResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{28} +} + +func (x *GetGroupMembersResp) GetMembers() []*GroupMember { + if x != nil { + return x.Members + } + return nil +} + +type GroupMember struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + Sex int32 `protobuf:"varint,3,opt,name=sex,proto3" json:"sex,omitempty"` // 性别 + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像地址 + UserExtra string `protobuf:"bytes,5,opt,name=user_extra,json=userExtra,proto3" json:"user_extra,omitempty"` // 用户附加字段 + MemberType MemberType `protobuf:"varint,6,opt,name=member_type,json=memberType,proto3,enum=pb.MemberType" json:"member_type,omitempty"` // 成员类型 + Remarks string `protobuf:"bytes,7,opt,name=remarks,proto3" json:"remarks,omitempty"` // 备注 + Extra string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"` // 群组成员附加字段 +} + +func (x *GroupMember) Reset() { + *x = GroupMember{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupMember) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupMember) ProtoMessage() {} + +func (x *GroupMember) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupMember.ProtoReflect.Descriptor instead. +func (*GroupMember) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{29} +} + +func (x *GroupMember) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *GroupMember) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *GroupMember) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *GroupMember) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *GroupMember) GetUserExtra() string { + if x != nil { + return x.UserExtra + } + return "" +} + +func (x *GroupMember) GetMemberType() MemberType { + if x != nil { + return x.MemberType + } + return MemberType_GMT_UNKNOWN +} + +func (x *GroupMember) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +func (x *GroupMember) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +var File_logic_ext_proto protoreflect.FileDescriptor + +var file_logic_ext_proto_rawDesc = []byte{ + 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x65, 0x78, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9b, 0x01, 0x0a, 0x11, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, + 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, + 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x0e, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x35, + 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, + 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, + 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, + 0x6b, 0x22, 0x23, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0xd5, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x35, 0x0a, 0x0d, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x22, 0x25, + 0x0a, 0x11, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0xb6, 0x02, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x35, 0x0a, 0x0d, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0b, + 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x09, 0x74, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x22, 0x25, + 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0xe0, 0x01, 0x0a, 0x0b, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, + 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x32, + 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, + 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x70, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, + 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x67, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x46, + 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x2a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x46, 0x0a, + 0x11, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, + 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x22, 0x5b, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x22, 0xe0, 0x01, 0x0a, 0x06, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, + 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, + 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, + 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x78, + 0x74, 0x72, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x22, 0x36, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x07, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x52, 0x07, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, + 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x2c, 0x0a, 0x0f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x74, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x22, 0x28, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2f, 0x0a, + 0x0c, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1f, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, + 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xec, + 0x01, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, + 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, + 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, + 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x6d, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x4d, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x32, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21, + 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, + 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x22, 0x4a, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x30, 0x0a, + 0x13, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, + 0xab, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0b, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x4a, 0x0a, + 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x12, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xf3, 0x01, 0x0a, + 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, + 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, 0x72, + 0x61, 0x12, 0x2f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x2a, 0x3c, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x4d, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x4d, 0x54, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x01, + 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, + 0x32, 0xd0, 0x07, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x45, 0x78, 0x74, 0x12, 0x3f, 0x0a, + 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, + 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x2e, + 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, + 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, + 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, + 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0d, + 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x14, 0x2e, + 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x09, 0x41, 0x64, + 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, + 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x0e, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, + 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x67, 0x72, 0x65, + 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, + 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, + 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x46, + 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, + 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x47, 0x65, + 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x2c, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, + 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2d, 0x0a, + 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x09, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, + 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x42, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x42, 0x0d, 0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, + 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_logic_ext_proto_rawDescOnce sync.Once + file_logic_ext_proto_rawDescData = file_logic_ext_proto_rawDesc +) + +func file_logic_ext_proto_rawDescGZIP() []byte { + file_logic_ext_proto_rawDescOnce.Do(func() { + file_logic_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_logic_ext_proto_rawDescData) + }) + return file_logic_ext_proto_rawDescData +} + +var file_logic_ext_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_logic_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_logic_ext_proto_goTypes = []interface{}{ + (MemberType)(0), // 0: pb.MemberType + (*RegisterDeviceReq)(nil), // 1: pb.RegisterDeviceReq + (*RegisterDeviceResp)(nil), // 2: pb.RegisterDeviceResp + (*SendMessageReq)(nil), // 3: pb.SendMessageReq + (*SendMessageResp)(nil), // 4: pb.SendMessageResp + (*RecallMessageReq)(nil), // 5: pb.RecallMessageReq + (*RecallMessageResp)(nil), // 6: pb.RecallMessageResp + (*SendRedPacketReq)(nil), // 7: pb.SendRedPacketReq + (*SendRedPacketResp)(nil), // 8: pb.SendRedPacketResp + (*PushRoomReq)(nil), // 9: pb.PushRoomReq + (*AddFriendReq)(nil), // 10: pb.AddFriendReq + (*DeleteFriendReq)(nil), // 11: pb.DeleteFriendReq + (*AgreeAddFriendReq)(nil), // 12: pb.AgreeAddFriendReq + (*SetFriendReq)(nil), // 13: pb.SetFriendReq + (*SetFriendResp)(nil), // 14: pb.SetFriendResp + (*Friend)(nil), // 15: pb.Friend + (*GetFriendsResp)(nil), // 16: pb.GetFriendsResp + (*CreateGroupReq)(nil), // 17: pb.CreateGroupReq + (*CreateGroupResp)(nil), // 18: pb.CreateGroupResp + (*UpdateGroupReq)(nil), // 19: pb.UpdateGroupReq + (*GetGroupReq)(nil), // 20: pb.GetGroupReq + (*GetGroupResp)(nil), // 21: pb.GetGroupResp + (*Group)(nil), // 22: pb.Group + (*GetGroupsResp)(nil), // 23: pb.GetGroupsResp + (*AddGroupMembersReq)(nil), // 24: pb.AddGroupMembersReq + (*AddGroupMembersResp)(nil), // 25: pb.AddGroupMembersResp + (*UpdateGroupMemberReq)(nil), // 26: pb.UpdateGroupMemberReq + (*DeleteGroupMemberReq)(nil), // 27: pb.DeleteGroupMemberReq + (*GetGroupMembersReq)(nil), // 28: pb.GetGroupMembersReq + (*GetGroupMembersResp)(nil), // 29: pb.GetGroupMembersResp + (*GroupMember)(nil), // 30: pb.GroupMember + (ReceiverType)(0), // 31: pb.ReceiverType + (MessageType)(0), // 32: pb.MessageType + (*Empty)(nil), // 33: pb.Empty +} +var file_logic_ext_proto_depIdxs = []int32{ + 31, // 0: pb.SendMessageReq.receiver_type:type_name -> pb.ReceiverType + 32, // 1: pb.SendMessageReq.message_type:type_name -> pb.MessageType + 31, // 2: pb.RecallMessageReq.receiver_type:type_name -> pb.ReceiverType + 32, // 3: pb.RecallMessageReq.message_type:type_name -> pb.MessageType + 31, // 4: pb.SendRedPacketReq.receiver_type:type_name -> pb.ReceiverType + 32, // 5: pb.SendRedPacketReq.message_type:type_name -> pb.MessageType + 32, // 6: pb.PushRoomReq.message_type:type_name -> pb.MessageType + 15, // 7: pb.GetFriendsResp.friends:type_name -> pb.Friend + 22, // 8: pb.GetGroupResp.group:type_name -> pb.Group + 22, // 9: pb.GetGroupsResp.groups:type_name -> pb.Group + 0, // 10: pb.UpdateGroupMemberReq.member_type:type_name -> pb.MemberType + 30, // 11: pb.GetGroupMembersResp.members:type_name -> pb.GroupMember + 0, // 12: pb.GroupMember.member_type:type_name -> pb.MemberType + 1, // 13: pb.LogicExt.RegisterDevice:input_type -> pb.RegisterDeviceReq + 3, // 14: pb.LogicExt.SendMessage:input_type -> pb.SendMessageReq + 5, // 15: pb.LogicExt.RecallMessage:input_type -> pb.RecallMessageReq + 9, // 16: pb.LogicExt.PushRoom:input_type -> pb.PushRoomReq + 7, // 17: pb.LogicExt.SendRedPacket:input_type -> pb.SendRedPacketReq + 10, // 18: pb.LogicExt.AddFriend:input_type -> pb.AddFriendReq + 12, // 19: pb.LogicExt.AgreeAddFriend:input_type -> pb.AgreeAddFriendReq + 11, // 20: pb.LogicExt.DeleteFriend:input_type -> pb.DeleteFriendReq + 13, // 21: pb.LogicExt.SetFriend:input_type -> pb.SetFriendReq + 33, // 22: pb.LogicExt.GetFriends:input_type -> pb.Empty + 17, // 23: pb.LogicExt.CreateGroup:input_type -> pb.CreateGroupReq + 19, // 24: pb.LogicExt.UpdateGroup:input_type -> pb.UpdateGroupReq + 20, // 25: pb.LogicExt.GetGroup:input_type -> pb.GetGroupReq + 33, // 26: pb.LogicExt.GetGroups:input_type -> pb.Empty + 24, // 27: pb.LogicExt.AddGroupMembers:input_type -> pb.AddGroupMembersReq + 26, // 28: pb.LogicExt.UpdateGroupMember:input_type -> pb.UpdateGroupMemberReq + 27, // 29: pb.LogicExt.DeleteGroupMember:input_type -> pb.DeleteGroupMemberReq + 28, // 30: pb.LogicExt.GetGroupMembers:input_type -> pb.GetGroupMembersReq + 2, // 31: pb.LogicExt.RegisterDevice:output_type -> pb.RegisterDeviceResp + 4, // 32: pb.LogicExt.SendMessage:output_type -> pb.SendMessageResp + 6, // 33: pb.LogicExt.RecallMessage:output_type -> pb.RecallMessageResp + 33, // 34: pb.LogicExt.PushRoom:output_type -> pb.Empty + 8, // 35: pb.LogicExt.SendRedPacket:output_type -> pb.SendRedPacketResp + 33, // 36: pb.LogicExt.AddFriend:output_type -> pb.Empty + 33, // 37: pb.LogicExt.AgreeAddFriend:output_type -> pb.Empty + 33, // 38: pb.LogicExt.DeleteFriend:output_type -> pb.Empty + 14, // 39: pb.LogicExt.SetFriend:output_type -> pb.SetFriendResp + 16, // 40: pb.LogicExt.GetFriends:output_type -> pb.GetFriendsResp + 18, // 41: pb.LogicExt.CreateGroup:output_type -> pb.CreateGroupResp + 33, // 42: pb.LogicExt.UpdateGroup:output_type -> pb.Empty + 21, // 43: pb.LogicExt.GetGroup:output_type -> pb.GetGroupResp + 23, // 44: pb.LogicExt.GetGroups:output_type -> pb.GetGroupsResp + 25, // 45: pb.LogicExt.AddGroupMembers:output_type -> pb.AddGroupMembersResp + 33, // 46: pb.LogicExt.UpdateGroupMember:output_type -> pb.Empty + 33, // 47: pb.LogicExt.DeleteGroupMember:output_type -> pb.Empty + 29, // 48: pb.LogicExt.GetGroupMembers:output_type -> pb.GetGroupMembersResp + 31, // [31:49] is the sub-list for method output_type + 13, // [13:31] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_logic_ext_proto_init() } +func file_logic_ext_proto_init() { + if File_logic_ext_proto != nil { + return + } + file_common_ext_proto_init() + file_connect_ext_proto_init() + if !protoimpl.UnsafeEnabled { + file_logic_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterDeviceReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterDeviceResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMessageReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMessageResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecallMessageReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecallMessageResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendRedPacketReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendRedPacketResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PushRoomReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddFriendReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFriendReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AgreeAddFriendReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetFriendReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetFriendResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Friend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFriendsResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateGroupReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateGroupResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateGroupReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Group); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupsResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddGroupMembersReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddGroupMembersResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateGroupMemberReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteGroupMemberReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupMembersReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupMembersResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupMember); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_logic_ext_proto_rawDesc, + NumEnums: 1, + NumMessages: 30, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_logic_ext_proto_goTypes, + DependencyIndexes: file_logic_ext_proto_depIdxs, + EnumInfos: file_logic_ext_proto_enumTypes, + MessageInfos: file_logic_ext_proto_msgTypes, + }.Build() + File_logic_ext_proto = out.File + file_logic_ext_proto_rawDesc = nil + file_logic_ext_proto_goTypes = nil + file_logic_ext_proto_depIdxs = nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// LogicExtClient is the client API for LogicExt service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type LogicExtClient interface { + // 注册设备 + RegisterDevice(ctx context.Context, in *RegisterDeviceReq, opts ...grpc.CallOption) (*RegisterDeviceResp, error) + // 发送消息 + SendMessage(ctx context.Context, in *SendMessageReq, opts ...grpc.CallOption) (*SendMessageResp, error) + // 撤回消息 + RecallMessage(ctx context.Context, in *RecallMessageReq, opts ...grpc.CallOption) (*RecallMessageResp, error) + // 推送消息到房间 + PushRoom(ctx context.Context, in *PushRoomReq, opts ...grpc.CallOption) (*Empty, error) + // 发送红包 + SendRedPacket(ctx context.Context, in *SendRedPacketReq, opts ...grpc.CallOption) (*SendRedPacketResp, error) + // 添加好友 + AddFriend(ctx context.Context, in *AddFriendReq, opts ...grpc.CallOption) (*Empty, error) + // 同意添加好友 + AgreeAddFriend(ctx context.Context, in *AgreeAddFriendReq, opts ...grpc.CallOption) (*Empty, error) + // 删除好友 + DeleteFriend(ctx context.Context, in *DeleteFriendReq, opts ...grpc.CallOption) (*Empty, error) + // 设置好友信息 + SetFriend(ctx context.Context, in *SetFriendReq, opts ...grpc.CallOption) (*SetFriendResp, error) + // 获取好友列表 + GetFriends(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetFriendsResp, error) + // 创建群组 + CreateGroup(ctx context.Context, in *CreateGroupReq, opts ...grpc.CallOption) (*CreateGroupResp, error) + // 更新群组 + UpdateGroup(ctx context.Context, in *UpdateGroupReq, opts ...grpc.CallOption) (*Empty, error) + // 获取群组信息 + GetGroup(ctx context.Context, in *GetGroupReq, opts ...grpc.CallOption) (*GetGroupResp, error) + // 获取用户加入的所有群组 + GetGroups(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetGroupsResp, error) + // 添加群组成员 + AddGroupMembers(ctx context.Context, in *AddGroupMembersReq, opts ...grpc.CallOption) (*AddGroupMembersResp, error) + // 更新群组成员信息 + UpdateGroupMember(ctx context.Context, in *UpdateGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) + // 添加群组成员 + DeleteGroupMember(ctx context.Context, in *DeleteGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) + // 获取群组成员 + GetGroupMembers(ctx context.Context, in *GetGroupMembersReq, opts ...grpc.CallOption) (*GetGroupMembersResp, error) +} + +type logicExtClient struct { + cc grpc.ClientConnInterface +} + +func NewLogicExtClient(cc grpc.ClientConnInterface) LogicExtClient { + return &logicExtClient{cc} +} + +func (c *logicExtClient) RegisterDevice(ctx context.Context, in *RegisterDeviceReq, opts ...grpc.CallOption) (*RegisterDeviceResp, error) { + out := new(RegisterDeviceResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/RegisterDevice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) SendMessage(ctx context.Context, in *SendMessageReq, opts ...grpc.CallOption) (*SendMessageResp, error) { + out := new(SendMessageResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/SendMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) RecallMessage(ctx context.Context, in *RecallMessageReq, opts ...grpc.CallOption) (*RecallMessageResp, error) { + out := new(RecallMessageResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/RecallMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) PushRoom(ctx context.Context, in *PushRoomReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/PushRoom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) SendRedPacket(ctx context.Context, in *SendRedPacketReq, opts ...grpc.CallOption) (*SendRedPacketResp, error) { + out := new(SendRedPacketResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/SendRedPacket", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) AddFriend(ctx context.Context, in *AddFriendReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/AddFriend", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) AgreeAddFriend(ctx context.Context, in *AgreeAddFriendReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/AgreeAddFriend", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) DeleteFriend(ctx context.Context, in *DeleteFriendReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/DeleteFriend", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) SetFriend(ctx context.Context, in *SetFriendReq, opts ...grpc.CallOption) (*SetFriendResp, error) { + out := new(SetFriendResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/SetFriend", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) GetFriends(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetFriendsResp, error) { + out := new(GetFriendsResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/GetFriends", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) CreateGroup(ctx context.Context, in *CreateGroupReq, opts ...grpc.CallOption) (*CreateGroupResp, error) { + out := new(CreateGroupResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/CreateGroup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) UpdateGroup(ctx context.Context, in *UpdateGroupReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/UpdateGroup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) GetGroup(ctx context.Context, in *GetGroupReq, opts ...grpc.CallOption) (*GetGroupResp, error) { + out := new(GetGroupResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) GetGroups(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetGroupsResp, error) { + out := new(GetGroupsResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroups", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) AddGroupMembers(ctx context.Context, in *AddGroupMembersReq, opts ...grpc.CallOption) (*AddGroupMembersResp, error) { + out := new(AddGroupMembersResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/AddGroupMembers", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) UpdateGroupMember(ctx context.Context, in *UpdateGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/UpdateGroupMember", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) DeleteGroupMember(ctx context.Context, in *DeleteGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicExt/DeleteGroupMember", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicExtClient) GetGroupMembers(ctx context.Context, in *GetGroupMembersReq, opts ...grpc.CallOption) (*GetGroupMembersResp, error) { + out := new(GetGroupMembersResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroupMembers", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// LogicExtServer is the server API for LogicExt service. +// All implementations must embed UnimplementedLogicExtServer +// for forward compatibility +type LogicExtServer interface { + // 注册设备 + RegisterDevice(context.Context, *RegisterDeviceReq) (*RegisterDeviceResp, error) + // 发送消息 + SendMessage(context.Context, *SendMessageReq) (*SendMessageResp, error) + // 撤回消息 + RecallMessage(context.Context, *RecallMessageReq) (*RecallMessageResp, error) + // 推送消息到房间 + PushRoom(context.Context, *PushRoomReq) (*Empty, error) + // 发送红包 + SendRedPacket(context.Context, *SendRedPacketReq) (*SendRedPacketResp, error) + // 添加好友 + AddFriend(context.Context, *AddFriendReq) (*Empty, error) + // 同意添加好友 + AgreeAddFriend(context.Context, *AgreeAddFriendReq) (*Empty, error) + // 删除好友 + DeleteFriend(context.Context, *DeleteFriendReq) (*Empty, error) + // 设置好友信息 + SetFriend(context.Context, *SetFriendReq) (*SetFriendResp, error) + // 获取好友列表 + GetFriends(context.Context, *Empty) (*GetFriendsResp, error) + // 创建群组 + CreateGroup(context.Context, *CreateGroupReq) (*CreateGroupResp, error) + // 更新群组 + UpdateGroup(context.Context, *UpdateGroupReq) (*Empty, error) + // 获取群组信息 + GetGroup(context.Context, *GetGroupReq) (*GetGroupResp, error) + // 获取用户加入的所有群组 + GetGroups(context.Context, *Empty) (*GetGroupsResp, error) + // 添加群组成员 + AddGroupMembers(context.Context, *AddGroupMembersReq) (*AddGroupMembersResp, error) + // 更新群组成员信息 + UpdateGroupMember(context.Context, *UpdateGroupMemberReq) (*Empty, error) + // 添加群组成员 + DeleteGroupMember(context.Context, *DeleteGroupMemberReq) (*Empty, error) + // 获取群组成员 + GetGroupMembers(context.Context, *GetGroupMembersReq) (*GetGroupMembersResp, error) +} + +// UnimplementedLogicExtServer must be embedded to have forward compatible implementations. +type UnimplementedLogicExtServer struct { +} + +func (UnimplementedLogicExtServer) RegisterDevice(context.Context, *RegisterDeviceReq) (*RegisterDeviceResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterDevice not implemented") +} +func (UnimplementedLogicExtServer) SendMessage(context.Context, *SendMessageReq) (*SendMessageResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") +} +func (UnimplementedLogicExtServer) RecallMessage(context.Context, *RecallMessageReq) (*RecallMessageResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method RecallMessage not implemented") +} +func (UnimplementedLogicExtServer) PushRoom(context.Context, *PushRoomReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method PushRoom not implemented") +} +func (UnimplementedLogicExtServer) SendRedPacket(context.Context, *SendRedPacketReq) (*SendRedPacketResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendRedPacket not implemented") +} +func (UnimplementedLogicExtServer) AddFriend(context.Context, *AddFriendReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddFriend not implemented") +} +func (UnimplementedLogicExtServer) AgreeAddFriend(context.Context, *AgreeAddFriendReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method AgreeAddFriend not implemented") +} +func (UnimplementedLogicExtServer) DeleteFriend(context.Context, *DeleteFriendReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteFriend not implemented") +} +func (UnimplementedLogicExtServer) SetFriend(context.Context, *SetFriendReq) (*SetFriendResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetFriend not implemented") +} +func (UnimplementedLogicExtServer) GetFriends(context.Context, *Empty) (*GetFriendsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetFriends not implemented") +} +func (UnimplementedLogicExtServer) CreateGroup(context.Context, *CreateGroupReq) (*CreateGroupResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateGroup not implemented") +} +func (UnimplementedLogicExtServer) UpdateGroup(context.Context, *UpdateGroupReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateGroup not implemented") +} +func (UnimplementedLogicExtServer) GetGroup(context.Context, *GetGroupReq) (*GetGroupResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGroup not implemented") +} +func (UnimplementedLogicExtServer) GetGroups(context.Context, *Empty) (*GetGroupsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGroups not implemented") +} +func (UnimplementedLogicExtServer) AddGroupMembers(context.Context, *AddGroupMembersReq) (*AddGroupMembersResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddGroupMembers not implemented") +} +func (UnimplementedLogicExtServer) UpdateGroupMember(context.Context, *UpdateGroupMemberReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateGroupMember not implemented") +} +func (UnimplementedLogicExtServer) DeleteGroupMember(context.Context, *DeleteGroupMemberReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteGroupMember not implemented") +} +func (UnimplementedLogicExtServer) GetGroupMembers(context.Context, *GetGroupMembersReq) (*GetGroupMembersResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGroupMembers not implemented") +} + +func RegisterLogicExtServer(s grpc.ServiceRegistrar, srv LogicExtServer) { + s.RegisterService(&LogicExt_ServiceDesc, srv) +} + +func _LogicExt_RegisterDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RegisterDeviceReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).RegisterDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/RegisterDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).RegisterDevice(ctx, req.(*RegisterDeviceReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMessageReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).SendMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/SendMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).SendMessage(ctx, req.(*SendMessageReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_RecallMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RecallMessageReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).RecallMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/RecallMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).RecallMessage(ctx, req.(*RecallMessageReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_PushRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PushRoomReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).PushRoom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/PushRoom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).PushRoom(ctx, req.(*PushRoomReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_SendRedPacket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendRedPacketReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).SendRedPacket(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/SendRedPacket", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).SendRedPacket(ctx, req.(*SendRedPacketReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_AddFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddFriendReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).AddFriend(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/AddFriend", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).AddFriend(ctx, req.(*AddFriendReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_AgreeAddFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AgreeAddFriendReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).AgreeAddFriend(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/AgreeAddFriend", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).AgreeAddFriend(ctx, req.(*AgreeAddFriendReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_DeleteFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteFriendReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).DeleteFriend(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/DeleteFriend", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).DeleteFriend(ctx, req.(*DeleteFriendReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_SetFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetFriendReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).SetFriend(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/SetFriend", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).SetFriend(ctx, req.(*SetFriendReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_GetFriends_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).GetFriends(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/GetFriends", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).GetFriends(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_CreateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).CreateGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/CreateGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).CreateGroup(ctx, req.(*CreateGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_UpdateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).UpdateGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/UpdateGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).UpdateGroup(ctx, req.(*UpdateGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_GetGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).GetGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/GetGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).GetGroup(ctx, req.(*GetGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_GetGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).GetGroups(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/GetGroups", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).GetGroups(ctx, req.(*Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_AddGroupMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddGroupMembersReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).AddGroupMembers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/AddGroupMembers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).AddGroupMembers(ctx, req.(*AddGroupMembersReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_UpdateGroupMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateGroupMemberReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).UpdateGroupMember(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/UpdateGroupMember", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).UpdateGroupMember(ctx, req.(*UpdateGroupMemberReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_DeleteGroupMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteGroupMemberReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).DeleteGroupMember(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/DeleteGroupMember", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).DeleteGroupMember(ctx, req.(*DeleteGroupMemberReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicExt_GetGroupMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGroupMembersReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).GetGroupMembers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/GetGroupMembers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).GetGroupMembers(ctx, req.(*GetGroupMembersReq)) + } + return interceptor(ctx, in, info, handler) +} + +// LogicExt_ServiceDesc is the grpc.ServiceDesc for LogicExt service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var LogicExt_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.LogicExt", + HandlerType: (*LogicExtServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RegisterDevice", + Handler: _LogicExt_RegisterDevice_Handler, + }, + { + MethodName: "SendMessage", + Handler: _LogicExt_SendMessage_Handler, + }, + { + MethodName: "RecallMessage", + Handler: _LogicExt_RecallMessage_Handler, + }, + { + MethodName: "PushRoom", + Handler: _LogicExt_PushRoom_Handler, + }, + { + MethodName: "SendRedPacket", + Handler: _LogicExt_SendRedPacket_Handler, + }, + { + MethodName: "AddFriend", + Handler: _LogicExt_AddFriend_Handler, + }, + { + MethodName: "AgreeAddFriend", + Handler: _LogicExt_AgreeAddFriend_Handler, + }, + { + MethodName: "DeleteFriend", + Handler: _LogicExt_DeleteFriend_Handler, + }, + { + MethodName: "SetFriend", + Handler: _LogicExt_SetFriend_Handler, + }, + { + MethodName: "GetFriends", + Handler: _LogicExt_GetFriends_Handler, + }, + { + MethodName: "CreateGroup", + Handler: _LogicExt_CreateGroup_Handler, + }, + { + MethodName: "UpdateGroup", + Handler: _LogicExt_UpdateGroup_Handler, + }, + { + MethodName: "GetGroup", + Handler: _LogicExt_GetGroup_Handler, + }, + { + MethodName: "GetGroups", + Handler: _LogicExt_GetGroups_Handler, + }, + { + MethodName: "AddGroupMembers", + Handler: _LogicExt_AddGroupMembers_Handler, + }, + { + MethodName: "UpdateGroupMember", + Handler: _LogicExt_UpdateGroupMember_Handler, + }, + { + MethodName: "DeleteGroupMember", + Handler: _LogicExt_DeleteGroupMember_Handler, + }, + { + MethodName: "GetGroupMembers", + Handler: _LogicExt_GetGroupMembers_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "logic.ext.proto", +} diff --git a/pkg/pb/im.logic.int.pb.go b/pkg/pb/im.logic.int.pb.go new file mode 100644 index 0000000..c7e89ed --- /dev/null +++ b/pkg/pb/im.logic.int.pb.go @@ -0,0 +1,1547 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.14.0 +// source: logic.int.proto_back + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ConnSignInReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` // 秘钥 + ConnAddr string `protobuf:"bytes,4,opt,name=conn_addr,json=connAddr,proto3" json:"conn_addr,omitempty"` // 服务器地址 + ClientAddr string `protobuf:"bytes,5,opt,name=client_addr,json=clientAddr,proto3" json:"client_addr,omitempty"` // 客户端地址 +} + +func (x *ConnSignInReq) Reset() { + *x = ConnSignInReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnSignInReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnSignInReq) ProtoMessage() {} + +func (x *ConnSignInReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnSignInReq.ProtoReflect.Descriptor instead. +func (*ConnSignInReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{0} +} + +func (x *ConnSignInReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *ConnSignInReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ConnSignInReq) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *ConnSignInReq) GetConnAddr() string { + if x != nil { + return x.ConnAddr + } + return "" +} + +func (x *ConnSignInReq) GetClientAddr() string { + if x != nil { + return x.ClientAddr + } + return "" +} + +type SyncReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + DeviceId int64 `protobuf:"varint,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + Seq int64 `protobuf:"varint,3,opt,name=seq,proto3" json:"seq,omitempty"` // 客户端已经同步的序列号 +} + +func (x *SyncReq) Reset() { + *x = SyncReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncReq) ProtoMessage() {} + +func (x *SyncReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncReq.ProtoReflect.Descriptor instead. +func (*SyncReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{1} +} + +func (x *SyncReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *SyncReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *SyncReq) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +type SyncResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Messages []*Message `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` // 消息列表 + HasMore bool `protobuf:"varint,2,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"` // 是否有更多数据 +} + +func (x *SyncResp) Reset() { + *x = SyncResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncResp) ProtoMessage() {} + +func (x *SyncResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncResp.ProtoReflect.Descriptor instead. +func (*SyncResp) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{2} +} + +func (x *SyncResp) GetMessages() []*Message { + if x != nil { + return x.Messages + } + return nil +} + +func (x *SyncResp) GetHasMore() bool { + if x != nil { + return x.HasMore + } + return false +} + +type MessageACKReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + DeviceId int64 `protobuf:"varint,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + DeviceAck int64 `protobuf:"varint,3,opt,name=device_ack,json=deviceAck,proto3" json:"device_ack,omitempty"` // 设备收到消息的确认号 + ReceiveTime int64 `protobuf:"varint,4,opt,name=receive_time,json=receiveTime,proto3" json:"receive_time,omitempty"` // 消息接收时间戳,精确到毫秒 +} + +func (x *MessageACKReq) Reset() { + *x = MessageACKReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MessageACKReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageACKReq) ProtoMessage() {} + +func (x *MessageACKReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MessageACKReq.ProtoReflect.Descriptor instead. +func (*MessageACKReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{3} +} + +func (x *MessageACKReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *MessageACKReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *MessageACKReq) GetDeviceAck() int64 { + if x != nil { + return x.DeviceAck + } + return 0 +} + +func (x *MessageACKReq) GetReceiveTime() int64 { + if x != nil { + return x.ReceiveTime + } + return 0 +} + +type OfflineReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + DeviceId int64 `protobuf:"varint,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + ClientAddr string `protobuf:"bytes,3,opt,name=client_addr,json=clientAddr,proto3" json:"client_addr,omitempty"` // 客户端地址 +} + +func (x *OfflineReq) Reset() { + *x = OfflineReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OfflineReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OfflineReq) ProtoMessage() {} + +func (x *OfflineReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OfflineReq.ProtoReflect.Descriptor instead. +func (*OfflineReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{4} +} + +func (x *OfflineReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *OfflineReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *OfflineReq) GetClientAddr() string { + if x != nil { + return x.ClientAddr + } + return "" +} + +type SubscribeRoomReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + DeviceId int64 `protobuf:"varint,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + RoomId int64 `protobuf:"varint,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` // 房间id + Seq int64 `protobuf:"varint,4,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号 + ConnAddr string `protobuf:"bytes,5,opt,name=conn_addr,json=connAddr,proto3" json:"conn_addr,omitempty"` // 服务器地址 +} + +func (x *SubscribeRoomReq) Reset() { + *x = SubscribeRoomReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeRoomReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeRoomReq) ProtoMessage() {} + +func (x *SubscribeRoomReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeRoomReq.ProtoReflect.Descriptor instead. +func (*SubscribeRoomReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{5} +} + +func (x *SubscribeRoomReq) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *SubscribeRoomReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *SubscribeRoomReq) GetRoomId() int64 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SubscribeRoomReq) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *SubscribeRoomReq) GetConnAddr() string { + if x != nil { + return x.ConnAddr + } + return "" +} + +type PushAllReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MessageType MessageType `protobuf:"varint,1,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型 + MessageContent []byte `protobuf:"bytes,2,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"` // 消息内容 + SendTime int64 `protobuf:"varint,3,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"` // 消息发送时间戳,精确到毫秒 +} + +func (x *PushAllReq) Reset() { + *x = PushAllReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PushAllReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushAllReq) ProtoMessage() {} + +func (x *PushAllReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PushAllReq.ProtoReflect.Descriptor instead. +func (*PushAllReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{6} +} + +func (x *PushAllReq) GetMessageType() MessageType { + if x != nil { + return x.MessageType + } + return MessageType_MT_UNKNOWN +} + +func (x *PushAllReq) GetMessageContent() []byte { + if x != nil { + return x.MessageContent + } + return nil +} + +func (x *PushAllReq) GetSendTime() int64 { + if x != nil { + return x.SendTime + } + return 0 +} + +type GetDeviceReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` +} + +func (x *GetDeviceReq) Reset() { + *x = GetDeviceReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDeviceReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDeviceReq) ProtoMessage() {} + +func (x *GetDeviceReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDeviceReq.ProtoReflect.Descriptor instead. +func (*GetDeviceReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{7} +} + +func (x *GetDeviceReq) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +type GetDeviceResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Device *Device `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"` +} + +func (x *GetDeviceResp) Reset() { + *x = GetDeviceResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDeviceResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDeviceResp) ProtoMessage() {} + +func (x *GetDeviceResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDeviceResp.ProtoReflect.Descriptor instead. +func (*GetDeviceResp) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{8} +} + +func (x *GetDeviceResp) GetDevice() *Device { + if x != nil { + return x.Device + } + return nil +} + +type Device struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Type int32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"` // 设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web + Brand string `protobuf:"bytes,4,opt,name=brand,proto3" json:"brand,omitempty"` // 手机厂商 + Model string `protobuf:"bytes,5,opt,name=model,proto3" json:"model,omitempty"` // 机型 + SystemVersion string `protobuf:"bytes,6,opt,name=system_version,json=systemVersion,proto3" json:"system_version,omitempty"` // 系统版本 + SdkVersion string `protobuf:"bytes,7,opt,name=sdk_version,json=sdkVersion,proto3" json:"sdk_version,omitempty"` // SDK版本 + Status int32 `protobuf:"varint,8,opt,name=status,proto3" json:"status,omitempty"` // 在线状态,0:不在线;1:在线 + ConnAddr string `protobuf:"bytes,9,opt,name=conn_addr,json=connAddr,proto3" json:"conn_addr,omitempty"` // 服务端连接地址 + ClientAddr string `protobuf:"bytes,10,opt,name=client_addr,json=clientAddr,proto3" json:"client_addr,omitempty"` // 客户端地址 + CreateTime int64 `protobuf:"varint,11,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间 + UpdateTime int64 `protobuf:"varint,12,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 +} + +func (x *Device) Reset() { + *x = Device{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Device) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Device) ProtoMessage() {} + +func (x *Device) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Device.ProtoReflect.Descriptor instead. +func (*Device) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{9} +} + +func (x *Device) GetDeviceId() int64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *Device) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *Device) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *Device) GetBrand() string { + if x != nil { + return x.Brand + } + return "" +} + +func (x *Device) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *Device) GetSystemVersion() string { + if x != nil { + return x.SystemVersion + } + return "" +} + +func (x *Device) GetSdkVersion() string { + if x != nil { + return x.SdkVersion + } + return "" +} + +func (x *Device) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *Device) GetConnAddr() string { + if x != nil { + return x.ConnAddr + } + return "" +} + +func (x *Device) GetClientAddr() string { + if x != nil { + return x.ClientAddr + } + return "" +} + +func (x *Device) GetCreateTime() int64 { + if x != nil { + return x.CreateTime + } + return 0 +} + +func (x *Device) GetUpdateTime() int64 { + if x != nil { + return x.UpdateTime + } + return 0 +} + +type ServerStopReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConnAddr string `protobuf:"bytes,1,opt,name=conn_addr,json=connAddr,proto3" json:"conn_addr,omitempty"` +} + +func (x *ServerStopReq) Reset() { + *x = ServerStopReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_int_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerStopReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerStopReq) ProtoMessage() {} + +func (x *ServerStopReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_int_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerStopReq.ProtoReflect.Descriptor instead. +func (*ServerStopReq) Descriptor() ([]byte, []int) { + return file_logic_int_proto_rawDescGZIP(), []int{10} +} + +func (x *ServerStopReq) GetConnAddr() string { + if x != nil { + return x.ConnAddr + } + return "" +} + +var File_logic_int_proto protoreflect.FileDescriptor + +var file_logic_int_proto_rawDesc = []byte{ + 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x65, 0x78, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, + 0x63, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x99, 0x01, 0x0a, 0x0d, + 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, + 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, + 0x6e, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x22, 0x51, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x52, + 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0x4e, 0x0a, 0x08, 0x53, 0x79, + 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x0d, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x43, 0x4b, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x6b, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, + 0x6b, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x0a, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x22, 0x90, 0x01, 0x0a, 0x10, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x17, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x22, 0x86, 0x01, 0x0a, + 0x0a, 0x50, 0x75, 0x73, 0x68, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x0c, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x22, 0x33, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x22, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0xde, 0x02, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x62, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x72, 0x61, + 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, + 0x6e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x2c, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, + 0x6e, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x32, 0xc1, 0x03, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x63, + 0x49, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x49, + 0x6e, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x49, + 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x21, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x43, 0x4b, + 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x43, 0x4b, + 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x24, + 0x0a, 0x07, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4f, + 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, + 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, + 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x07, 0x50, 0x75, 0x73, 0x68, 0x41, 0x6c, + 0x6c, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x41, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x09, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, + 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x11, 0x2e, 0x70, + 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, + 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x0d, 0x5a, 0x0b, 0x67, 0x69, + 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_logic_int_proto_rawDescOnce sync.Once + file_logic_int_proto_rawDescData = file_logic_int_proto_rawDesc +) + +func file_logic_int_proto_rawDescGZIP() []byte { + file_logic_int_proto_rawDescOnce.Do(func() { + file_logic_int_proto_rawDescData = protoimpl.X.CompressGZIP(file_logic_int_proto_rawDescData) + }) + return file_logic_int_proto_rawDescData +} + +var file_logic_int_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_logic_int_proto_goTypes = []interface{}{ + (*ConnSignInReq)(nil), // 0: pb.ConnSignInReq + (*SyncReq)(nil), // 1: pb.SyncReq + (*SyncResp)(nil), // 2: pb.SyncResp + (*MessageACKReq)(nil), // 3: pb.MessageACKReq + (*OfflineReq)(nil), // 4: pb.OfflineReq + (*SubscribeRoomReq)(nil), // 5: pb.SubscribeRoomReq + (*PushAllReq)(nil), // 6: pb.PushAllReq + (*GetDeviceReq)(nil), // 7: pb.GetDeviceReq + (*GetDeviceResp)(nil), // 8: pb.GetDeviceResp + (*Device)(nil), // 9: pb.Device + (*ServerStopReq)(nil), // 10: pb.ServerStopReq + (*Message)(nil), // 11: pb.Message + (MessageType)(0), // 12: pb.MessageType + (*SendMessageReq)(nil), // 13: pb.SendMessageReq + (*PushRoomReq)(nil), // 14: pb.PushRoomReq + (*Empty)(nil), // 15: pb.Empty + (*SendMessageResp)(nil), // 16: pb.SendMessageResp +} +var file_logic_int_proto_depIdxs = []int32{ + 11, // 0: pb.SyncResp.messages:type_name -> pb.Message + 12, // 1: pb.PushAllReq.message_type:type_name -> pb.MessageType + 9, // 2: pb.GetDeviceResp.device:type_name -> pb.Device + 0, // 3: pb.LogicInt.ConnSignIn:input_type -> pb.ConnSignInReq + 1, // 4: pb.LogicInt.Sync:input_type -> pb.SyncReq + 3, // 5: pb.LogicInt.MessageACK:input_type -> pb.MessageACKReq + 4, // 6: pb.LogicInt.Offline:input_type -> pb.OfflineReq + 5, // 7: pb.LogicInt.SubscribeRoom:input_type -> pb.SubscribeRoomReq + 13, // 8: pb.LogicInt.SendMessage:input_type -> pb.SendMessageReq + 14, // 9: pb.LogicInt.PushRoom:input_type -> pb.PushRoomReq + 6, // 10: pb.LogicInt.PushAll:input_type -> pb.PushAllReq + 7, // 11: pb.LogicInt.GetDevice:input_type -> pb.GetDeviceReq + 10, // 12: pb.LogicInt.ServerStop:input_type -> pb.ServerStopReq + 15, // 13: pb.LogicInt.ConnSignIn:output_type -> pb.Empty + 2, // 14: pb.LogicInt.Sync:output_type -> pb.SyncResp + 15, // 15: pb.LogicInt.MessageACK:output_type -> pb.Empty + 15, // 16: pb.LogicInt.Offline:output_type -> pb.Empty + 15, // 17: pb.LogicInt.SubscribeRoom:output_type -> pb.Empty + 16, // 18: pb.LogicInt.SendMessage:output_type -> pb.SendMessageResp + 15, // 19: pb.LogicInt.PushRoom:output_type -> pb.Empty + 15, // 20: pb.LogicInt.PushAll:output_type -> pb.Empty + 8, // 21: pb.LogicInt.GetDevice:output_type -> pb.GetDeviceResp + 15, // 22: pb.LogicInt.ServerStop:output_type -> pb.Empty + 13, // [13:23] is the sub-list for method output_type + 3, // [3:13] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_logic_int_proto_init() } +func file_logic_int_proto_init() { + if File_logic_int_proto != nil { + return + } + file_common_ext_proto_init() + file_connect_ext_proto_init() + file_logic_ext_proto_init() + if !protoimpl.UnsafeEnabled { + file_logic_int_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnSignInReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageACKReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OfflineReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribeRoomReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PushAllReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDeviceReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDeviceResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Device); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_int_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerStopReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_logic_int_proto_rawDesc, + NumEnums: 0, + NumMessages: 11, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_logic_int_proto_goTypes, + DependencyIndexes: file_logic_int_proto_depIdxs, + MessageInfos: file_logic_int_proto_msgTypes, + }.Build() + File_logic_int_proto = out.File + file_logic_int_proto_rawDesc = nil + file_logic_int_proto_goTypes = nil + file_logic_int_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated comm +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// LogicIntClient is the client API for LogicInt service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type LogicIntClient interface { + // 登录 + ConnSignIn(ctx context.Context, in *ConnSignInReq, opts ...grpc.CallOption) (*Empty, error) + // 消息同步 + Sync(ctx context.Context, in *SyncReq, opts ...grpc.CallOption) (*SyncResp, error) + // 设备收到消息回执 + MessageACK(ctx context.Context, in *MessageACKReq, opts ...grpc.CallOption) (*Empty, error) + // 设备离线 + Offline(ctx context.Context, in *OfflineReq, opts ...grpc.CallOption) (*Empty, error) + // 订阅房间 + SubscribeRoom(ctx context.Context, in *SubscribeRoomReq, opts ...grpc.CallOption) (*Empty, error) + // 发送消息 + SendMessage(ctx context.Context, in *SendMessageReq, opts ...grpc.CallOption) (*SendMessageResp, error) + // 推送消息到房间 + PushRoom(ctx context.Context, in *PushRoomReq, opts ...grpc.CallOption) (*Empty, error) + // 全服推送 + PushAll(ctx context.Context, in *PushAllReq, opts ...grpc.CallOption) (*Empty, error) + // 获取设备信息 + GetDevice(ctx context.Context, in *GetDeviceReq, opts ...grpc.CallOption) (*GetDeviceResp, error) + // 服务停止 + ServerStop(ctx context.Context, in *ServerStopReq, opts ...grpc.CallOption) (*Empty, error) +} + +type logicIntClient struct { + cc grpc.ClientConnInterface +} + +func NewLogicIntClient(cc grpc.ClientConnInterface) LogicIntClient { + return &logicIntClient{cc} +} + +func (c *logicIntClient) ConnSignIn(ctx context.Context, in *ConnSignInReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/ConnSignIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) Sync(ctx context.Context, in *SyncReq, opts ...grpc.CallOption) (*SyncResp, error) { + out := new(SyncResp) + err := c.cc.Invoke(ctx, "/pb.LogicInt/Sync", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) MessageACK(ctx context.Context, in *MessageACKReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/MessageACK", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) Offline(ctx context.Context, in *OfflineReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/Offline", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) SubscribeRoom(ctx context.Context, in *SubscribeRoomReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/SubscribeRoom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) SendMessage(ctx context.Context, in *SendMessageReq, opts ...grpc.CallOption) (*SendMessageResp, error) { + out := new(SendMessageResp) + err := c.cc.Invoke(ctx, "/pb.LogicInt/SendMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) PushRoom(ctx context.Context, in *PushRoomReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/PushRoom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) PushAll(ctx context.Context, in *PushAllReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/PushAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) GetDevice(ctx context.Context, in *GetDeviceReq, opts ...grpc.CallOption) (*GetDeviceResp, error) { + out := new(GetDeviceResp) + err := c.cc.Invoke(ctx, "/pb.LogicInt/GetDevice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *logicIntClient) ServerStop(ctx context.Context, in *ServerStopReq, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.LogicInt/ServerStop", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// LogicIntServer is the server API for LogicInt service. +type LogicIntServer interface { + // 登录 + ConnSignIn(context.Context, *ConnSignInReq) (*Empty, error) + // 消息同步 + Sync(context.Context, *SyncReq) (*SyncResp, error) + // 设备收到消息回执 + MessageACK(context.Context, *MessageACKReq) (*Empty, error) + // 设备离线 + Offline(context.Context, *OfflineReq) (*Empty, error) + // 订阅房间 + SubscribeRoom(context.Context, *SubscribeRoomReq) (*Empty, error) + // 发送消息 + SendMessage(context.Context, *SendMessageReq) (*SendMessageResp, error) + // 推送消息到房间 + PushRoom(context.Context, *PushRoomReq) (*Empty, error) + // 全服推送 + PushAll(context.Context, *PushAllReq) (*Empty, error) + // 获取设备信息 + GetDevice(context.Context, *GetDeviceReq) (*GetDeviceResp, error) + // 服务停止 + ServerStop(context.Context, *ServerStopReq) (*Empty, error) +} + +// UnimplementedLogicIntServer can be embedded to have forward compatible implementations. +type UnimplementedLogicIntServer struct { +} + +func (*UnimplementedLogicIntServer) ConnSignIn(context.Context, *ConnSignInReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConnSignIn not implemented") +} +func (*UnimplementedLogicIntServer) Sync(context.Context, *SyncReq) (*SyncResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Sync not implemented") +} +func (*UnimplementedLogicIntServer) MessageACK(context.Context, *MessageACKReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method MessageACK not implemented") +} +func (*UnimplementedLogicIntServer) Offline(context.Context, *OfflineReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Offline not implemented") +} +func (*UnimplementedLogicIntServer) SubscribeRoom(context.Context, *SubscribeRoomReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubscribeRoom not implemented") +} +func (*UnimplementedLogicIntServer) SendMessage(context.Context, *SendMessageReq) (*SendMessageResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") +} +func (*UnimplementedLogicIntServer) PushRoom(context.Context, *PushRoomReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method PushRoom not implemented") +} +func (*UnimplementedLogicIntServer) PushAll(context.Context, *PushAllReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method PushAll not implemented") +} +func (*UnimplementedLogicIntServer) GetDevice(context.Context, *GetDeviceReq) (*GetDeviceResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDevice not implemented") +} +func (*UnimplementedLogicIntServer) ServerStop(context.Context, *ServerStopReq) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method ServerStop not implemented") +} + +func RegisterLogicIntServer(s *grpc.Server, srv LogicIntServer) { + s.RegisterService(&_LogicInt_serviceDesc, srv) +} + +func _LogicInt_ConnSignIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConnSignInReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).ConnSignIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/ConnSignIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).ConnSignIn(ctx, req.(*ConnSignInReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_Sync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SyncReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).Sync(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/Sync", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).Sync(ctx, req.(*SyncReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_MessageACK_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MessageACKReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).MessageACK(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/MessageACK", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).MessageACK(ctx, req.(*MessageACKReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_Offline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OfflineReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).Offline(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/Offline", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).Offline(ctx, req.(*OfflineReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_SubscribeRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SubscribeRoomReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).SubscribeRoom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/SubscribeRoom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).SubscribeRoom(ctx, req.(*SubscribeRoomReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMessageReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).SendMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/SendMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).SendMessage(ctx, req.(*SendMessageReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_PushRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PushRoomReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).PushRoom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/PushRoom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).PushRoom(ctx, req.(*PushRoomReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_PushAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PushAllReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).PushAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/PushAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).PushAll(ctx, req.(*PushAllReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_GetDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDeviceReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).GetDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/GetDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).GetDevice(ctx, req.(*GetDeviceReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _LogicInt_ServerStop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ServerStopReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicIntServer).ServerStop(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicInt/ServerStop", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicIntServer).ServerStop(ctx, req.(*ServerStopReq)) + } + return interceptor(ctx, in, info, handler) +} + +var _LogicInt_serviceDesc = grpc.ServiceDesc{ + ServiceName: "pb.LogicInt", + HandlerType: (*LogicIntServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ConnSignIn", + Handler: _LogicInt_ConnSignIn_Handler, + }, + { + MethodName: "Sync", + Handler: _LogicInt_Sync_Handler, + }, + { + MethodName: "MessageACK", + Handler: _LogicInt_MessageACK_Handler, + }, + { + MethodName: "Offline", + Handler: _LogicInt_Offline_Handler, + }, + { + MethodName: "SubscribeRoom", + Handler: _LogicInt_SubscribeRoom_Handler, + }, + { + MethodName: "SendMessage", + Handler: _LogicInt_SendMessage_Handler, + }, + { + MethodName: "PushRoom", + Handler: _LogicInt_PushRoom_Handler, + }, + { + MethodName: "PushAll", + Handler: _LogicInt_PushAll_Handler, + }, + { + MethodName: "GetDevice", + Handler: _LogicInt_GetDevice_Handler, + }, + { + MethodName: "ServerStop", + Handler: _LogicInt_ServerStop_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "logic.int.proto_back", +} diff --git a/pkg/pb/im.push.ext.pb.go b/pkg/pb/im.push.ext.pb.go new file mode 100644 index 0000000..2e7bfd9 --- /dev/null +++ b/pkg/pb/im.push.ext.pb.go @@ -0,0 +1,623 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.20.0--rc1 +// source: im.push.ext.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type PushCode int32 + +const ( + PushCode_PC_ADD_DEFAULT PushCode = 0 + PushCode_PC_ADD_FRIEND PushCode = 100 // 添加好友请求 + PushCode_PC_AGREE_ADD_FRIEND PushCode = 101 // 同意添加好友 + PushCode_PC_UPDATE_GROUP PushCode = 110 // 更新群组 + PushCode_PC_ADD_GROUP_MEMBERS PushCode = 120 // 添加群组成员 + PushCode_PC_REMOVE_GROUP_MEMBER PushCode = 121 // 移除群组成员 +) + +// Enum value maps for PushCode. +var ( + PushCode_name = map[int32]string{ + 0: "PC_ADD_DEFAULT", + 100: "PC_ADD_FRIEND", + 101: "PC_AGREE_ADD_FRIEND", + 110: "PC_UPDATE_GROUP", + 120: "PC_ADD_GROUP_MEMBERS", + 121: "PC_REMOVE_GROUP_MEMBER", + } + PushCode_value = map[string]int32{ + "PC_ADD_DEFAULT": 0, + "PC_ADD_FRIEND": 100, + "PC_AGREE_ADD_FRIEND": 101, + "PC_UPDATE_GROUP": 110, + "PC_ADD_GROUP_MEMBERS": 120, + "PC_REMOVE_GROUP_MEMBER": 121, + } +) + +func (x PushCode) Enum() *PushCode { + p := new(PushCode) + *p = x + return p +} + +func (x PushCode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PushCode) Descriptor() protoreflect.EnumDescriptor { + return file_push_ext_proto_enumTypes[0].Descriptor() +} + +func (PushCode) Type() protoreflect.EnumType { + return &file_push_ext_proto_enumTypes[0] +} + +func (x PushCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PushCode.Descriptor instead. +func (PushCode) EnumDescriptor() ([]byte, []int) { + return file_push_ext_proto_rawDescGZIP(), []int{0} +} + +// 推送码 PC_ADD_FRIEND = 100 +type AddFriendPush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FriendId int64 `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 好友id + Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` // 描述 +} + +func (x *AddFriendPush) Reset() { + *x = AddFriendPush{} + if protoimpl.UnsafeEnabled { + mi := &file_push_ext_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddFriendPush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddFriendPush) ProtoMessage() {} + +func (x *AddFriendPush) ProtoReflect() protoreflect.Message { + mi := &file_push_ext_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddFriendPush.ProtoReflect.Descriptor instead. +func (*AddFriendPush) Descriptor() ([]byte, []int) { + return file_push_ext_proto_rawDescGZIP(), []int{0} +} + +func (x *AddFriendPush) GetFriendId() int64 { + if x != nil { + return x.FriendId + } + return 0 +} + +func (x *AddFriendPush) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *AddFriendPush) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *AddFriendPush) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +// 推送码 PC_AGREE_ADD_FRIEND = 101 +type AgreeAddFriendPush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FriendId int64 `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 好友id + Nickname string `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 +} + +func (x *AgreeAddFriendPush) Reset() { + *x = AgreeAddFriendPush{} + if protoimpl.UnsafeEnabled { + mi := &file_push_ext_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AgreeAddFriendPush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AgreeAddFriendPush) ProtoMessage() {} + +func (x *AgreeAddFriendPush) ProtoReflect() protoreflect.Message { + mi := &file_push_ext_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AgreeAddFriendPush.ProtoReflect.Descriptor instead. +func (*AgreeAddFriendPush) Descriptor() ([]byte, []int) { + return file_push_ext_proto_rawDescGZIP(), []int{1} +} + +func (x *AgreeAddFriendPush) GetFriendId() int64 { + if x != nil { + return x.FriendId + } + return 0 +} + +func (x *AgreeAddFriendPush) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *AgreeAddFriendPush) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +// 更新群组 PC_UPDATE_GROUP = 110 +type UpdateGroupPush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OptId int64 `protobuf:"varint,1,opt,name=opt_id,json=optId,proto3" json:"opt_id,omitempty"` // 操作人用户id + OptName string `protobuf:"bytes,2,opt,name=opt_name,json=optName,proto3" json:"opt_name,omitempty"` // 操作人昵称 + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // 群组名称 + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 群组头像 + Introduction string `protobuf:"bytes,5,opt,name=introduction,proto3" json:"introduction,omitempty"` // 群组简介 + Extra string `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 +} + +func (x *UpdateGroupPush) Reset() { + *x = UpdateGroupPush{} + if protoimpl.UnsafeEnabled { + mi := &file_push_ext_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateGroupPush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateGroupPush) ProtoMessage() {} + +func (x *UpdateGroupPush) ProtoReflect() protoreflect.Message { + mi := &file_push_ext_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateGroupPush.ProtoReflect.Descriptor instead. +func (*UpdateGroupPush) Descriptor() ([]byte, []int) { + return file_push_ext_proto_rawDescGZIP(), []int{2} +} + +func (x *UpdateGroupPush) GetOptId() int64 { + if x != nil { + return x.OptId + } + return 0 +} + +func (x *UpdateGroupPush) GetOptName() string { + if x != nil { + return x.OptName + } + return "" +} + +func (x *UpdateGroupPush) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UpdateGroupPush) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *UpdateGroupPush) GetIntroduction() string { + if x != nil { + return x.Introduction + } + return "" +} + +func (x *UpdateGroupPush) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +// 添加群组成员 PC_AGREE_ADD_GROUPS = 120 +type AddGroupMembersPush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OptId int64 `protobuf:"varint,1,opt,name=opt_id,json=optId,proto3" json:"opt_id,omitempty"` // 操作人用户id + OptName string `protobuf:"bytes,2,opt,name=opt_name,json=optName,proto3" json:"opt_name,omitempty"` // 操作人昵称 + Members []*GroupMember `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"` // 群组成员 +} + +func (x *AddGroupMembersPush) Reset() { + *x = AddGroupMembersPush{} + if protoimpl.UnsafeEnabled { + mi := &file_push_ext_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddGroupMembersPush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddGroupMembersPush) ProtoMessage() {} + +func (x *AddGroupMembersPush) ProtoReflect() protoreflect.Message { + mi := &file_push_ext_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddGroupMembersPush.ProtoReflect.Descriptor instead. +func (*AddGroupMembersPush) Descriptor() ([]byte, []int) { + return file_push_ext_proto_rawDescGZIP(), []int{3} +} + +func (x *AddGroupMembersPush) GetOptId() int64 { + if x != nil { + return x.OptId + } + return 0 +} + +func (x *AddGroupMembersPush) GetOptName() string { + if x != nil { + return x.OptName + } + return "" +} + +func (x *AddGroupMembersPush) GetMembers() []*GroupMember { + if x != nil { + return x.Members + } + return nil +} + +// 删除群组成员 PC_REMOVE_GROUP_MEMBER = 121 +type RemoveGroupMemberPush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OptId int64 `protobuf:"varint,1,opt,name=opt_id,json=optId,proto3" json:"opt_id,omitempty"` // 操作人用户id + OptName string `protobuf:"bytes,2,opt,name=opt_name,json=optName,proto3" json:"opt_name,omitempty"` // 操作人昵称 + DeletedUserId int64 `protobuf:"varint,3,opt,name=deleted_user_id,json=deletedUserId,proto3" json:"deleted_user_id,omitempty"` // 被删除的成员id + DeletedUserName string `protobuf:"bytes,4,opt,name=deleted_user_name,json=deletedUserName,proto3" json:"deleted_user_name,omitempty"` // 被删除的成员昵称 +} + +func (x *RemoveGroupMemberPush) Reset() { + *x = RemoveGroupMemberPush{} + if protoimpl.UnsafeEnabled { + mi := &file_push_ext_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RemoveGroupMemberPush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveGroupMemberPush) ProtoMessage() {} + +func (x *RemoveGroupMemberPush) ProtoReflect() protoreflect.Message { + mi := &file_push_ext_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemoveGroupMemberPush.ProtoReflect.Descriptor instead. +func (*RemoveGroupMemberPush) Descriptor() ([]byte, []int) { + return file_push_ext_proto_rawDescGZIP(), []int{4} +} + +func (x *RemoveGroupMemberPush) GetOptId() int64 { + if x != nil { + return x.OptId + } + return 0 +} + +func (x *RemoveGroupMemberPush) GetOptName() string { + if x != nil { + return x.OptName + } + return "" +} + +func (x *RemoveGroupMemberPush) GetDeletedUserId() int64 { + if x != nil { + return x.DeletedUserId + } + return 0 +} + +func (x *RemoveGroupMemberPush) GetDeletedUserName() string { + if x != nil { + return x.DeletedUserName + } + return "" +} + +var File_push_ext_proto protoreflect.FileDescriptor + +var file_push_ext_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x02, 0x70, 0x62, 0x1a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x50, 0x75, 0x73, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x6c, 0x0a, 0x12, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x50, 0x75, 0x73, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x22, + 0xb0, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, + 0x75, 0x73, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x6f, 0x70, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, + 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x72, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x50, 0x75, 0x73, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x70, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6f, 0x70, 0x74, 0x49, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, + 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, + 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x6f, 0x70, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x55, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0x95, 0x01, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x43, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x43, 0x5f, 0x41, 0x44, + 0x44, 0x5f, 0x46, 0x52, 0x49, 0x45, 0x4e, 0x44, 0x10, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x43, + 0x5f, 0x41, 0x47, 0x52, 0x45, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x46, 0x52, 0x49, 0x45, 0x4e, + 0x44, 0x10, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x43, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, + 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x43, 0x5f, 0x41, + 0x44, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, + 0x10, 0x78, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x43, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, + 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x79, 0x42, 0x0d, + 0x5a, 0x0b, 0x67, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_push_ext_proto_rawDescOnce sync.Once + file_push_ext_proto_rawDescData = file_push_ext_proto_rawDesc +) + +func file_push_ext_proto_rawDescGZIP() []byte { + file_push_ext_proto_rawDescOnce.Do(func() { + file_push_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_push_ext_proto_rawDescData) + }) + return file_push_ext_proto_rawDescData +} + +var file_push_ext_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_push_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_push_ext_proto_goTypes = []interface{}{ + (PushCode)(0), // 0: pb.PushCode + (*AddFriendPush)(nil), // 1: pb.AddFriendPush + (*AgreeAddFriendPush)(nil), // 2: pb.AgreeAddFriendPush + (*UpdateGroupPush)(nil), // 3: pb.UpdateGroupPush + (*AddGroupMembersPush)(nil), // 4: pb.AddGroupMembersPush + (*RemoveGroupMemberPush)(nil), // 5: pb.RemoveGroupMemberPush + (*GroupMember)(nil), // 6: pb.GroupMember +} +var file_push_ext_proto_depIdxs = []int32{ + 6, // 0: pb.AddGroupMembersPush.members:type_name -> pb.GroupMember + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_push_ext_proto_init() } +func file_push_ext_proto_init() { + if File_push_ext_proto != nil { + return + } + file_logic_ext_proto_init() + if !protoimpl.UnsafeEnabled { + file_push_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddFriendPush); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_push_ext_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AgreeAddFriendPush); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_push_ext_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateGroupPush); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_push_ext_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddGroupMembersPush); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_push_ext_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveGroupMemberPush); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_push_ext_proto_rawDesc, + NumEnums: 1, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_push_ext_proto_goTypes, + DependencyIndexes: file_push_ext_proto_depIdxs, + EnumInfos: file_push_ext_proto_enumTypes, + MessageInfos: file_push_ext_proto_msgTypes, + }.Build() + File_push_ext_proto = out.File + file_push_ext_proto_rawDesc = nil + file_push_ext_proto_goTypes = nil + file_push_ext_proto_depIdxs = nil +} diff --git a/pkg/proto/im.business.ext.proto b/pkg/proto/im.business.ext.proto new file mode 100644 index 0000000..ddd1375 --- /dev/null +++ b/pkg/proto/im.business.ext.proto @@ -0,0 +1,128 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +import "im.common.ext.proto"; + +service BusinessExt { + // 登录 + rpc SignIn (SignInReq) returns (SignInResp); + // 获取用户信息 + rpc GetUser (GetUserReq) returns (GetUserResp); + // 更新用户信息 + rpc UpdateUser (UpdateUserReq) returns (Empty); + // 搜索用户(这里简单数据库实现,生产环境建议使用ES) + rpc SearchUser (SearchUserReq) returns (SearchUserResp); + // 上传文件至云端 + rpc CloudUploadFile (CloudUploadFileReq) returns (CloudUploadFileResp); + // 获取表情 + rpc EmoticonList (Empty) returns (EmoticonListResp); + // 判断是否为好友关系 + rpc IsFriends (IsFriendsReq) returns (IsFriendsResp); + // 投诉群 + rpc ComplainGroup (ComplainGroupReq) returns (Empty); +} + + +message ComplainGroupReq { + int64 group_id = 1; + ComplainType complain_type = 2; // 投诉类型 + string text = 3; // 投诉内容 + repeated string image_list = 4; // 图片 +} + +// 消息类型 +enum ComplainType { + CT_UNKNOWN = 0; // 未知 + CT_GAMBLE = 1; // 存在赌博行为 + MT_DEFRAUD = 2; // 存在骗钱行为 + MT_HARASS = 3; // 不当信息骚扰 + MT_RUMOUR = 4; // 传播谣言 + MT_COUNTERFEIT_GOODS_INFO = 5; // 发布假冒商品信息 + MT_VIOLATION_OF_MINORS = 6; // 侵犯未成年人权益 + MT_OTHER = 7; // 其他 +} + + +message IsFriendsReq { + string user_phone = 1; + string friend_phone = 2; +} + +message IsFriendsResp { + int64 is_friend = 1; + User user = 2; // 用户信息 +} + +message Emoticon { + string name = 1; // 名称 + string img_url = 2; // 图片地址 + string memo = 3; // 备注 + int32 sort = 4; // 排序 +} +message EmoticonListResp { + repeated Emoticon emoticons = 1; +} +message SignInReq { + string phone_number = 1; // 手机号 + string code = 2; // 验证码 + int64 device_id = 3; // 设备id + int64 master_id = 4; // 站长id + string push_alia = 5; // 极光推送-别名 + string nickname = 6; // 昵称 + string avatar_url = 7; // 头像地址 +} +message SignInResp { + bool is_new = 1; // 是否是新用户 + int64 user_id = 2; // 用户id + string token = 3; // token + int64 master_id = 4; // 站长id +} +message CloudUploadFileReq { + string dir = 1; // 目录名 + string file_name = 2; // 上传原文件名称 + string file_size = 3; // 文件大小 +} +message CloudUploadFileResp { + string method = 1; // 请求方式 + string host = 2; // 域名 + string key = 3; // key + string token = 4; // token +} + +message User { + int64 user_id = 1; // 用户id + string nickname = 2; // 昵称 + int32 sex = 3; // 性别 + string avatar_url = 4; // 头像地址 + string extra = 5; // 附加字段 + int64 create_time = 6; // 创建时间 + int64 update_time = 7; // 更新时间 + int64 master_id = 8; // 站长id + int64 is_auto_added_friends = 9; // 是否自动被添加好友 + string phone_number = 10; // 手机号 +} + +message GetUserReq { + int64 user_id = 1; // 用户id + string phone = 2; // 用户手机号 +} +message GetUserResp { + User user = 1; // 用户信息 +} + +message UpdateUserReq { + string nickname = 1; // 昵称 + int32 sex = 2; // 性别 + string avatar_url = 3; // 头像地址 + string extra = 4; // 附加字段 +} + +message SearchUserReq{ + string key = 1; + int64 master_id = 2; +} +message SearchUserResp{ + repeated User users = 1; +} + diff --git a/pkg/proto/im.business.int.proto b/pkg/proto/im.business.int.proto new file mode 100644 index 0000000..6e8da25 --- /dev/null +++ b/pkg/proto/im.business.int.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +import "im.common.ext.proto"; +import "im.business.ext.proto"; + +service BusinessInt { + // 站长权限校验 + rpc MasterAuth (MasterAuthReq) returns (Empty); + // 权限校验 + rpc Auth (AuthReq) returns (Empty); + // 批量获取用户信息 + rpc GetUser (GetUserReq) returns (GetUserResp); + // 批量获取用户信息 + rpc GetUsers (GetUsersReq) returns (GetUsersResp); +} + +message MasterAuthReq { + string master_id = 1; +} + +message AuthReq { + int64 user_id = 1; + int64 device_id = 2; + string token = 3; +} + +message GetUsersReq { + map user_ids = 1; // 用户id +} +message GetUsersResp { + map users = 1; // 用户信息 +} diff --git a/pkg/proto/im.common.ext.proto b/pkg/proto/im.common.ext.proto new file mode 100644 index 0000000..62448cb --- /dev/null +++ b/pkg/proto/im.common.ext.proto @@ -0,0 +1,5 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +message Empty{} \ No newline at end of file diff --git a/pkg/proto/im.connect.ext.proto b/pkg/proto/im.connect.ext.proto new file mode 100644 index 0000000..4d7d161 --- /dev/null +++ b/pkg/proto/im.connect.ext.proto @@ -0,0 +1,232 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +enum PackageType { + PT_UNKNOWN = 0; // 未知 + PT_SIGN_IN = 1; // 设备登录请求 + PT_SYNC = 2; // 消息同步触发 + PT_HEARTBEAT = 3; // 心跳 + PT_MESSAGE = 4; // 消息投递 + PT_SUBSCRIBE_ROOM = 5; // 订阅房间 +} + +/************************************消息体定义开始************************************/ +// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 +message Message { + Sender sender = 1; // 发送者 + ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group + int64 receiver_id = 3; // 用户id或者群组id + repeated int64 to_user_ids = 4; // 需要@的用户id列表 + MessageType message_type = 5; // 消息类型 + bytes message_content = 6; // 消息内容 + int64 seq = 7; // 用户消息发送序列号 + int64 send_time = 8; // 消息发送时间戳,精确到毫秒 + MessageStatus status = 9; // 消息状态 +} + +message Sender { + SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 + int64 sender_id = 2; // 发送者id + int64 device_id = 3; // 发送者设备id + string avatar_url = 4; // 头像 + string nickname = 5; // 昵称 + string extra = 6; // 扩展字段 +} + +// 消息类型 +enum MessageType { + MT_UNKNOWN = 0; // 未知 + MT_TEXT = 1; // 文本 + MT_FACE = 2; // 表情 + MT_VOICE = 3; // 语音消息 + MT_IMAGE = 4; // 图片 + MT_FILE = 5; // 文件 + MT_LOCATION = 6; // 地理位置 + MT_COMMAND = 7; // 指令推送 + MT_CUSTOM = 8; // 自定义 + MT_RECALL = 9; // 撤回消息 + MT_RED_PACKAGE = 10; // 红包消息 +} + +// 红包类型 +enum RedPacketType { + RPT_UNKNOWN = 0; // 未知 + RPT_FRIEND = 1; // 好友红包 + RPT_GROUP_NORMAL = 2; // 群组普通红包 + RPT_GROUP_LUCK = 3; // 群组手气红包 + RPT_GROUP_SPECIALLY = 4; // 群组专属红包 + RPT_SYSTEM_FOR = 5; // 系统红包 +} + +// 红包消息类型 +enum RedPacketMessageType { + RMT_UNKNOWN = 0; // 未知 + RMT_SEND = 1; // 发红包 + RMT_GRAB = 2; // 抢红包 +} + +// 红包状态类型 +enum RedPacketStatusType { + RPS_NOT_DRAW = 0; // 未领取 + RPS_DRAWING = 1; // 领取中 + RPS_DRAW_OVER = 2; // 领取完 + RPS_EXPIRE = 3; //已过期 +} + +// 文本消息 +message Text { + string text = 1; // 文本消息内容 +} + +// 表情消息 +message Face { + int64 face_id = 1; + string face_url = 2; +} + +// 语音消息 +message Voice { + string id = 1; // 语音包id + int32 size = 2; // 语音包大小 + int32 duration = 3; // 语音时长 + string url = 4; // 语音文件URL +} + +// 图片消息 +message Image { + string id = 1; // 图片id + int32 width = 2; // 图片宽度 + int32 height = 3; // 图片长度 + string url = 4; // 图片URL + string thumbnail_url = 5; // 图片缩略图url +} + +// 文件消息 +message File { + int64 id = 12; // 文件id + string name = 13; // 文件名 + int64 size = 14; // 文件大小 + string url = 15; // 文件url +} + +// 地理位置消息 +message Location { + string desc = 1; // 描述 + double latitude = 2; // 经度 + double longitude = 3; // 纬度 +} + +// Command 指令推送,1000以下,IM内部用,1000以上,留给业务用 +message Command { + int32 code = 1; // 指令码 + bytes data = 2; // 数据内容 +} + +// 自定义消息 +message Custom { + string data = 1; // 自定义数据 +} + +// 撤回消息 +message RECALL { + int64 recall_seq = 1; // 撤回消息seq +} + + +// 红包消息 +message RED_PACKAGE { + RedPacketMessageType red_message_type = 1;// 红包消息类型 + RedPacketType red_packet_type = 2; // 红包类型 + string red_packet_content = 3; // 红包文字内容 + float red_packet_amount = 6; // 红包金额 + int32 red_packet_nums = 5; // 红包数量 + float red_packet_balance_amount = 7; // 红包余额 + int64 received_user_id = 8; // 领取用户id + float received_user_amount = 9; // 领取用户金额 + string received_user_nickname = 10; // 领取用户昵称 + RedPacketStatusType red_packet_status_type = 11; // 领取状态 + int64 red_packet_id = 12; // 红包id + int64 send_red_packet_uid = 13; // 红包发送者uid + string send_red_packet_nickname = 14; // 红包发送者昵称 + string send_red_packet_avatar_url = 15; // 红包发送者头像 + string red_packet_small_content = 16; // 红包小文字内容 +} + +/************************************消息体定义结束************************************/ + +// 上行数据 +message Input { + PackageType type = 1; // 包的类型 + int64 request_id = 2; // 请求id + bytes data = 3; // 数据 +} + +// 下行数据 +message Output { + PackageType type = 1; // 包的类型 + int64 request_id = 2; // 请求id + int32 code = 3; // 错误码 + string message = 4; // 错误信息 + bytes data = 5; // 数据 +} + +// 设备登录,package_type:1 +message SignInInput { + int64 device_id = 1; // 设备id + int64 user_id = 2; // 用户id + string token = 3; // 秘钥 +} + +// 消息同步请求,package_type:2 +message SyncInput { + int64 seq = 1; // 客户端已经同步的序列号 +} +// 消息同步响应,package_type:2 +message SyncOutput { + repeated Message messages = 1; // 消息列表 + bool has_more = 2; // 是否有更多数据 +} + +// 订阅房间请求 +message SubscribeRoomInput { + int64 room_id = 1; // 房间ID,如果为0,取消房间订阅 + int64 seq = 2; // 消息消息序列号, +} + +enum ReceiverType { + RT_UNKNOWN = 0; // 未知 + RT_USER = 1; // 用户 + RT_GROUP = 2; // 群组 + RT_ROOM = 3; // 房间 +} + +// 消息投递,package_type:4 +message MessageSend { + Message message = 1; // 消息 +} + +enum SenderType { + ST_UNKNOWN = 0; // 未知的 + ST_SYSTEM = 1; // IM系统 + ST_USER = 2; // 用户 + ST_BUSINESS = 3; // 业务方 +} + +enum MessageStatus { + MS_UNKNOWN = 0; // 未知的 + MS_NORMAL = 1; // 正常的 + MS_RECALL = 2; // 撤回 +} + +// 投递消息回执,package_type:4 +message MessageACK { + int64 device_ack = 2; // 设备收到消息的确认号 + int64 receive_time = 3; // 消息接收时间戳,精确到毫秒 +} + +// 群组用户状态 +enum GroupUserStatusType { + GROUP_USER_STATUS_NORMAL = 0; // 正常 + GROUP_USER_STATUS_Banned = 1; // 禁言 +} \ No newline at end of file diff --git a/pkg/proto/im.connect.int.proto b/pkg/proto/im.connect.int.proto new file mode 100644 index 0000000..454d18c --- /dev/null +++ b/pkg/proto/im.connect.int.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +import "im.common.ext.proto"; +import "im.connect.ext.proto"; + +service ConnectInt { + // 消息投递 + rpc DeliverMessage (DeliverMessageReq) returns (Empty); +} + +message DeliverMessageReq { + int64 device_id = 1; // 设备id + MessageSend message_send = 2; // 数据 +} + +// 房间推送 +message PushRoomMsg{ + int64 room_id = 1; // 设备id + MessageSend message_send = 2; // 数据 +} + +// 房间推送 +message PushAllMsg{ + MessageSend message_send = 2; // 数据 +} + diff --git a/pkg/proto/im.logic.ext.proto b/pkg/proto/im.logic.ext.proto new file mode 100644 index 0000000..8a1a89c --- /dev/null +++ b/pkg/proto/im.logic.ext.proto @@ -0,0 +1,238 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +import "im.common.ext.proto"; +import "im.connect.ext.proto"; + +service LogicExt { + // 注册设备 + rpc RegisterDevice (RegisterDeviceReq) returns (RegisterDeviceResp); + + // 发送消息 + rpc SendMessage (SendMessageReq) returns (SendMessageResp); + // 撤回消息 + rpc RecallMessage (RecallMessageReq) returns (RecallMessageResp); + // 推送消息到房间 + rpc PushRoom(PushRoomReq)returns(Empty); + + // 发送红包 + rpc SendRedPacket (SendRedPacketReq) returns (SendRedPacketResp); + + // 添加好友 + rpc AddFriend (AddFriendReq) returns (Empty); + // 同意添加好友 + rpc AgreeAddFriend (AgreeAddFriendReq) returns (Empty); + // 删除好友 + rpc DeleteFriend (DeleteFriendReq) returns (Empty); + // 设置好友信息 + rpc SetFriend (SetFriendReq) returns (SetFriendResp); + // 获取好友列表 + rpc GetFriends (Empty) returns (GetFriendsResp); + + // 创建群组 + rpc CreateGroup (CreateGroupReq) returns (CreateGroupResp); + // 更新群组 + rpc UpdateGroup (UpdateGroupReq) returns (Empty); + // 获取群组信息 + rpc GetGroup (GetGroupReq) returns (GetGroupResp); + // 获取用户加入的所有群组 + rpc GetGroups (Empty) returns (GetGroupsResp); + + // 添加群组成员 + rpc AddGroupMembers (AddGroupMembersReq) returns (AddGroupMembersResp); + // 更新群组成员信息 + rpc UpdateGroupMember (UpdateGroupMemberReq) returns (Empty); + // 添加群组成员 + rpc DeleteGroupMember (DeleteGroupMemberReq) returns (Empty); + // 获取群组成员 + rpc GetGroupMembers (GetGroupMembersReq) returns (GetGroupMembersResp); +} + +message RegisterDeviceReq { + int32 type = 2; // 设备类型 + string brand = 3; // 厂商 + string model = 4; // 机型 + string system_version = 5; // 系统版本 + string sdk_version = 6; // sdk版本号 +} +message RegisterDeviceResp { + int64 device_id = 1; // 设备id +} + +message SendMessageReq { + ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group + int64 receiver_id = 2; // 用户id或者群组id + repeated int64 to_user_ids = 3; // 需要@的用户id列表 + MessageType message_type = 4; // 消息类型 + bytes message_content = 5; // 消息内容 + int64 send_time = 6; // 消息发送时间戳,精确到毫秒 + bool is_persist = 7; // 是否将消息持久化到数据库 + string message_content_back = 8; +} +message SendMessageResp { + int64 seq = 1; // 消息序列号 +} + +message RecallMessageReq { + ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group + int64 receiver_id = 2; // 用户id或者群组id + repeated int64 to_user_ids = 3; // 需要@的用户id列表 + MessageType message_type = 4; // 消息类型 + bytes message_content = 5; // 消息内容 + int64 send_time = 6; // 消息发送时间戳,精确到毫秒 + bool is_persist = 7; // 是否将消息持久化到数据库 + string message_content_back = 8; +} +message RecallMessageResp { + int64 seq = 1; // 消息序列号 +} + + +message SendRedPacketReq { + ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group + int64 receiver_id = 2; // 用户id或者群组id + MessageType message_type = 3; // 消息类型 + bytes message_content = 4; // 消息内容 + int64 send_time = 5; // 消息发送时间戳,精确到毫秒 + repeated int64 to_user_ids = 6; // 红包给到哪些用户(专属红包) + string message_content_back = 7; +} +message SendRedPacketResp { + int64 seq = 1; // 消息序列号 +} + +message PushRoomReq{ + int64 room_id = 1; // 房间id + MessageType message_type = 2; // 消息类型 + bytes message_content = 3; // 消息内容 + int64 send_time = 4; // 消息发送时间戳,精确到毫秒 + bool is_persist = 5; // 是否将消息持久化 + bool is_priority = 6; // 是否优先推送 +} + +message AddFriendReq { + int64 friend_id = 1; // 用户id + string remarks = 2; // 备注 + string description = 3; // 描述 +} + +message DeleteFriendReq { + int64 user_id = 1; // 用户id +} + + +message AgreeAddFriendReq { + int64 user_id = 1; // 用户id + string remarks = 2; // 备注 +} + +message SetFriendReq { + int64 friend_id = 1; // 好友id + string remarks = 2; // 备注 + string extra = 8; // 附加字段 +} +message SetFriendResp { + int64 friend_id = 1; // 好友id + string remarks = 2; // 备注 + string extra = 8; // 附加字段 +} + +message Friend { + int64 user_id = 1; // 用户id + string phone_number = 2; // 电话号码 + string nickname = 3; // 昵称 + int32 sex = 4; // 性别 + string avatar_url = 5; // 头像地址 + string user_extra = 6; // 用户附加字段 + string remarks = 7; // 备注 + string extra = 8; // 附加字段 +} +message GetFriendsResp { + repeated Friend friends = 1; +} + +message CreateGroupReq { + string name = 1; // 名称 + string avatar_url = 2; // 头像 + string introduction = 3; // 简介 + string extra = 4; // 附加字段 + repeated int64 member_ids = 5; // 群组成员ID列表 +} +message CreateGroupResp { + int64 group_id = 1; // 群组id +} + +message UpdateGroupReq { + int64 group_id = 1; // 群组id + string avatar_url = 2; // 头像 + string name = 3; // 名称 + string introduction = 4; // 简介 + string extra = 5; // 附加字段 +} + +message GetGroupReq { + int64 group_id = 1; +} +message GetGroupResp { + Group group = 1; +} + +message Group { + int64 group_id = 1; // 群组id + string name = 2; // 名称 + string avatar_url = 3; // 头像 + string introduction = 4; // 简介 + int32 user_mum = 5; // 用户数 + string extra = 6; // 附加字段 + int64 create_time = 7; // 创建时间 + int64 update_time = 8; // 更新时间 +} + +message GetGroupsResp { + repeated Group groups = 1; +} + +message AddGroupMembersReq { + int64 group_id = 1; // 群组id + repeated int64 user_ids = 2; // 用户id列表 +} +message AddGroupMembersResp { + repeated int64 user_ids = 1; // 已经在群组的用户id列表 +} + +enum MemberType { + GMT_UNKNOWN = 0; // 未知 + GMT_ADMIN = 1; // 管理员 + GMT_MEMBER = 2; // 成员 +} + +message UpdateGroupMemberReq { + int64 group_id = 1; // 群组id + int64 user_id = 2; // 用户id + MemberType member_type = 3; // 成员类型 + string remarks = 4; // 备注 + string extra = 5; // 附加字段 +} + +message DeleteGroupMemberReq { + int64 group_id = 1; // 群组id + int64 user_id = 2; // 用户id +} + +message GetGroupMembersReq { + int64 group_id = 1; +} +message GetGroupMembersResp { + repeated GroupMember members = 1; +} +message GroupMember { + int64 user_id = 1; + string nickname = 2; // 昵称 + int32 sex = 3; // 性别 + string avatar_url = 4; // 头像地址 + string user_extra = 5; // 用户附加字段 + MemberType member_type = 6; // 成员类型 + string remarks = 7; // 备注 + string extra = 8; // 群组成员附加字段 +} \ No newline at end of file diff --git a/pkg/proto/im.logic.int.proto b/pkg/proto/im.logic.int.proto new file mode 100644 index 0000000..3a0dd5d --- /dev/null +++ b/pkg/proto/im.logic.int.proto @@ -0,0 +1,102 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +import "im.common.ext.proto"; +import "im.connect.ext.proto"; +import "im.logic.ext.proto"; + +service LogicInt { + // 登录 + rpc ConnSignIn (ConnSignInReq) returns (Empty); + // 消息同步 + rpc Sync (SyncReq) returns (SyncResp); + // 设备收到消息回执 + rpc MessageACK (MessageACKReq) returns (Empty); + // 设备离线 + rpc Offline (OfflineReq) returns (Empty); + // 订阅房间 + rpc SubscribeRoom(SubscribeRoomReq)returns(Empty); + // 发送消息 + rpc SendMessage (SendMessageReq) returns (SendMessageResp); + // 推送消息到房间 + rpc PushRoom(PushRoomReq)returns(Empty); + // 全服推送 + rpc PushAll(PushAllReq)returns(Empty); + + // 获取设备信息 + rpc GetDevice (GetDeviceReq) returns (GetDeviceResp); + // 服务停止 + rpc ServerStop (ServerStopReq) returns (Empty); +} + +message ConnSignInReq { + int64 device_id = 1; // 设备id + int64 user_id = 2; // 用户id + string token = 3; // 秘钥 + string conn_addr = 4; // 服务器地址 + string client_addr = 5; // 客户端地址 +} + +message SyncReq { + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + int64 seq = 3; // 客户端已经同步的序列号 +} +message SyncResp { + repeated Message messages = 1; // 消息列表 + bool has_more = 2; // 是否有更多数据 +} + +message MessageACKReq { + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + int64 device_ack = 3; // 设备收到消息的确认号 + int64 receive_time = 4; // 消息接收时间戳,精确到毫秒 +} + +message OfflineReq { + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + string client_addr = 3; // 客户端地址 +} + +message SubscribeRoomReq{ + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + int64 room_id = 3; // 房间id + int64 seq = 4; // 消息序列号 + string conn_addr = 5; // 服务器地址 +} + +message PushAllReq{ + MessageType message_type = 1; // 消息类型 + bytes message_content = 2; // 消息内容 + int64 send_time = 3; // 消息发送时间戳,精确到毫秒 +} + +message GetDeviceReq { + int64 device_id = 1; +} +message GetDeviceResp { + Device device = 1; +} + +message Device { + int64 device_id = 1; // 设备id + int64 user_id = 2; // 用户id + int32 type = 3; // 设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web + string brand = 4; // 手机厂商 + string model = 5; // 机型 + string system_version = 6; // 系统版本 + string sdk_version = 7; // SDK版本 + int32 status = 8; // 在线状态,0:不在线;1:在线 + string conn_addr = 9; // 服务端连接地址 + string client_addr = 10; // 客户端地址 + int64 create_time = 11; // 创建时间 + int64 update_time = 12; // 更新时间 +} + +message ServerStopReq { + string conn_addr = 1; +} diff --git a/pkg/proto/im.push.ext.proto b/pkg/proto/im.push.ext.proto new file mode 100644 index 0000000..f78e71b --- /dev/null +++ b/pkg/proto/im.push.ext.proto @@ -0,0 +1,58 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +import "im.logic.ext.proto"; + +enum PushCode { + PC_ADD_DEFAULT = 0; + + PC_ADD_FRIEND = 100; // 添加好友请求 + PC_AGREE_ADD_FRIEND = 101; // 同意添加好友 + + PC_UPDATE_GROUP = 110; // 更新群组 + + PC_ADD_GROUP_MEMBERS = 120; // 添加群组成员 + PC_REMOVE_GROUP_MEMBER = 121; // 移除群组成员 + +} + +// 推送码 PC_ADD_FRIEND = 100 +message AddFriendPush { + int64 friend_id = 1; // 好友id + string nickname = 2; // 昵称 + string avatar_url = 3; // 头像 + string description = 4; // 描述 +} + +// 推送码 PC_AGREE_ADD_FRIEND = 101 +message AgreeAddFriendPush { + int64 friend_id = 1; // 好友id + string nickname = 2; // 昵称 + string avatar_url = 3; // 头像 +} + +// 更新群组 PC_UPDATE_GROUP = 110 +message UpdateGroupPush { + int64 opt_id = 1; // 操作人用户id + string opt_name = 2; // 操作人昵称 + string name = 3; // 群组名称 + string avatar_url = 4; // 群组头像 + string introduction = 5; // 群组简介 + string extra = 6; // 附加字段 +} + +// 添加群组成员 PC_AGREE_ADD_GROUPS = 120 +message AddGroupMembersPush { + int64 opt_id = 1; // 操作人用户id + string opt_name = 2; // 操作人昵称 + repeated GroupMember members = 3; // 群组成员 +} + +// 删除群组成员 PC_REMOVE_GROUP_MEMBER = 121 +message RemoveGroupMemberPush { + int64 opt_id = 1; // 操作人用户id + string opt_name = 2; // 操作人昵称 + int64 deleted_user_id = 3; // 被删除的成员id + string deleted_user_name = 4; // 被删除的成员昵称 +} diff --git a/static/bat/phone.dat b/static/bat/phone.dat new file mode 100644 index 0000000..34bcab7 Binary files /dev/null and b/static/bat/phone.dat differ diff --git a/static/bat/sat.txt b/static/bat/sat.txt new file mode 100644 index 0000000..f003566 --- /dev/null +++ b/static/bat/sat.txt @@ -0,0 +1,2 @@ +啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸尽劲荆兢觉决诀绝均菌钧军君峻俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座锕嗳嫒瑷暧霭谙铵鹌媪骜鳌钯呗钣鸨龅鹎贲锛荜哔滗铋筚跸苄缏笾骠飑飙镖镳鳔傧缤槟殡膑镔髌鬓禀饽钹鹁钸骖黪恻锸侪钗冁谄谶蒇忏婵骣觇禅镡伥苌怅阊鲳砗伧谌榇碜龀枨柽铖铛饬鸱铳俦帱雠刍绌蹰钏怆缍鹑辍龊鹚苁骢枞辏撺锉鹾哒鞑骀绐殚赕瘅箪谠砀裆焘镫籴诋谛绨觌镝巅钿癫铫鲷鲽铤铥岽鸫窦渎椟牍笃黩簖怼镦炖趸铎谔垩阏轭锇锷鹗颚颛鳄诶迩铒鸸鲕钫鲂绯镄鲱偾沣凫驸绂绋赙麸鲋鳆钆赅尴擀绀戆睾诰缟锆纥镉颍亘赓绠鲠诟缑觏诂毂钴锢鸪鹄鹘鸹掴诖掼鹳鳏犷匦刿妫桧鲑鳜衮绲鲧埚呙帼椁蝈铪阚绗颉灏颢诃阖蛎黉讧荭闳鲎浒鹕骅桦铧奂缳锾鲩鳇诙荟哕浍缋珲晖诨馄阍钬镬讦诘荠叽哜骥玑觊齑矶羁虿跻霁鲚鲫郏浃铗镓蛲谏缣戋戬睑鹣笕鲣鞯绛缰挢峤鹪鲛疖颌鲒卺荩馑缙赆觐刭泾迳弪胫靓阄鸠鹫讵屦榉飓钜锔窭龃锩镌隽谲珏皲剀垲忾恺铠锴龛闶钪铐骒缂轲钶锞颔龈铿喾郐哙脍狯髋诓诳邝圹纩贶匮蒉愦聩篑阃锟鲲蛴崃徕涞濑赉睐铼癞籁岚榄斓镧褴阆锒唠崂铑铹痨鳓诔缧俪郦坜苈莅蓠呖逦骊缡枥栎轹砺锂鹂疠粝跞雳鲡鳢蔹奁潋琏殓裢裣鲢魉缭钌鹩蔺廪檩辚躏绫棂蛏鲮浏骝绺镏鹨茏泷珑栊胧砻偻蒌喽嵝镂瘘耧蝼髅垆撸噜闾泸渌栌橹轳辂辘氇胪鸬鹭舻鲈脔娈栾鸾銮囵荦猡泺椤脶镙榈褛锊呒唛嬷杩劢缦镘颡鳗麽扪焖懑钔芈谧猕祢渑腼黾缈缪闵缗谟蓦馍殁镆钼铙讷铌鲵辇鲶茑袅陧蘖嗫颟蹑苎咛聍侬哝驽钕傩讴怄瓯蹒疱辔纰罴铍谝骈缥嫔钋镤镨蕲骐绮桤碛颀颃鳍佥荨悭骞缱椠钤嫱樯戗炝锖锵镪羟跄诮谯荞缲硗跷惬锲箧锓揿鲭茕蛱巯赇虮鳅诎岖阒觑鸲诠绻辁铨阕阙悫荛娆桡饪轫嵘蝾缛铷颦蚬飒毵糁缫啬铯穑铩鲨酾讪姗骟钐鳝垧殇觞厍滠畲诜谂渖谥埘莳弑轼贳铈鲥绶摅纾闩铄厮驷缌锶鸶薮馊飕锼谡稣谇荪狲唢睃闼铊鳎钛鲐昙钽锬顸傥饧铴镗韬铽缇鹈阗粜龆鲦恸钭钍抟饨箨鼍娲腽纨绾辋诿帏闱沩涠玮韪炜鲔阌莴龌邬庑怃妩骛鹉鹜饩阋玺觋硖苋莶藓岘猃娴鹇痫蚝籼跹芗饷骧缃飨哓潇骁绡枭箫亵撷绁缬陉荥馐鸺诩顼谖铉镟谑泶鳕埙浔鲟垭娅桠氩厣赝俨兖谳恹闫酽魇餍鼹炀轺鹞鳐靥谒邺晔烨诒呓峄饴怿驿缢轶贻钇镒镱瘗舣铟瘾茔莺萦蓥撄嘤滢潆璎鹦瘿颏罂镛莸铕鱿伛俣谀谕蓣嵛饫阈妪纡觎欤钰鹆鹬龉橼鸢鼋钺郓芸恽愠纭韫殒氲瓒趱錾驵赜啧帻箦谮缯谵诏钊谪辄鹧浈缜桢轸赈祯鸩诤峥钲铮筝骘栉栀轵轾贽鸷蛳絷踬踯觯锺纣绉伫槠铢啭馔颞骓缒诼镯谘缁辎赀眦锱龇鲻偬诹驺鲰镞缵躜鳟讠谫郄勐凼坂垅垴埯埝苘荬荮莜莼菰藁揸吒吣咔咝咴噘噼嚯幞岙嵴彷徼犸狍馀馇馓馕愣憷懔丬溆滟溷漤潴澹甯纟绔绱珉枧桊桉槔橥轱轷赍肷胨飚煳煅熘愍淼砜磙眍钚钷铘铞锃锍锎锏锘锝锪锫锿镅镎镢镥镩镲稆鹋鹛鹱疬疴痖癯裥襁耢颥螨麴鲅鲆鲇鲞鲴鲺鲼鳊鳋鳘鳙鞒鞴齄 +啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨安俺按暗岸胺案骯昂盎凹敖熬翺襖傲奧懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙壩霸罷爸白柏百擺佰敗拜稗斑班搬扳般頒板版扮拌伴瓣半辦絆邦幫梆榜膀綁棒磅蚌鎊傍謗苞胞包褒剝薄雹保堡飽寶抱報暴豹鮑爆杯碑悲卑北輩背貝鋇倍狽備憊焙被奔苯本笨崩繃甭泵蹦迸逼鼻比鄙筆彼碧蓖蔽畢斃毖幣庇痹閉敝弊必辟壁臂避陛鞭邊編貶扁便變卞辨辯辮遍標彪膘表鱉憋別癟彬斌瀕濱賓擯兵冰柄丙秉餅炳病並玻菠播撥缽波博勃搏鉑箔伯帛舶脖膊渤泊駁捕蔔哺補埠不布步簿部怖擦猜裁材才財睬踩采彩菜蔡餐參蠶殘慚慘燦蒼艙倉滄藏操糙槽曹草廁策側冊測層蹭插叉茬茶查碴搽察岔差詫拆柴豺攙摻蟬饞讒纏鏟產闡顫昌猖場嘗常長償腸廠敞暢唱倡超抄鈔朝嘲潮巢吵炒車扯撤掣徹澈郴臣辰塵晨忱沈陳趁襯撐稱城橙成呈乘程懲澄誠承逞騁秤吃癡持匙池遲弛馳恥齒侈尺赤翅斥熾充沖蟲崇寵抽酬疇躊稠愁籌仇綢瞅醜臭初出櫥廚躇鋤雛滁除楚礎儲矗搐觸處揣川穿椽傳船喘串瘡窗幢床闖創吹炊捶錘垂春椿醇唇淳純蠢戳綽疵茨磁雌辭慈瓷詞此刺賜次聰蔥囪匆從叢湊粗醋簇促躥篡竄摧崔催脆瘁粹淬翠村存寸磋撮搓措挫錯搭達答瘩打大呆歹傣戴帶殆代貸袋待逮怠耽擔丹單鄲撣膽旦氮但憚淡誕彈蛋當擋黨蕩檔刀搗蹈倒島禱導到稻悼道盜德得的蹬燈登等瞪凳鄧堤低滴迪敵笛狄滌翟嫡抵底地蒂第帝弟遞締顛掂滇碘點典靛墊電佃甸店惦奠澱殿碉叼雕雕刁掉吊釣調跌爹碟蝶叠諜疊丁盯叮釘頂鼎錠定訂丟東冬董懂動棟侗恫凍洞兜抖鬥陡豆逗痘都督毒犢獨讀堵睹賭杜鍍肚度渡妒端短鍛段斷緞堆兌隊對墩噸蹲敦頓囤鈍盾遁掇哆多奪垛躲朵跺舵剁惰墮蛾峨鵝俄額訛娥惡厄扼遏鄂餓恩而兒耳爾餌洱二貳發罰筏伐乏閥法琺藩帆番翻樊礬釩繁凡煩反返範販犯飯泛坊芳方肪房防妨仿訪紡放菲非啡飛肥匪誹吠肺廢沸費芬酚吩氛分紛墳焚汾粉奮份忿憤糞豐封楓蜂峰鋒風瘋烽逢馮縫諷奉鳳佛否夫敷膚孵扶拂輻幅氟符伏俘服浮涪福袱弗甫撫輔俯釜斧脯腑府腐赴副覆賦復傅付阜父腹負富訃附婦縛咐噶嘎該改概鈣蓋溉幹甘桿柑竿肝趕感稈敢贛岡剛鋼缸肛綱崗港杠篙臯高膏羔糕搞鎬稿告哥歌擱戈鴿胳疙割革葛格蛤閣隔鉻個各給根跟耕更庚羹埂耿梗工攻功恭龔供躬公宮弓鞏汞拱貢共鉤勾溝茍狗垢構購夠辜菇咕箍估沽孤姑鼓古蠱骨谷股故顧固雇刮瓜剮寡掛褂乖拐怪棺關官冠觀管館罐慣灌貫光廣逛瑰規圭矽歸龜閨軌鬼詭癸桂櫃跪貴劊輥滾棍鍋郭國果裹過哈骸孩海氦亥害駭酣憨邯韓含涵寒函喊罕翰撼捍旱憾悍焊汗漢夯杭航壕嚎豪毫郝好耗號浩呵喝荷菏核禾和何合盒貉閡河涸赫褐鶴賀嘿黑痕很狠恨哼亨橫衡恒轟哄烘虹鴻洪宏弘紅喉侯猴吼厚候後呼乎忽瑚壺葫胡蝴狐糊湖弧虎唬護互滬戶花嘩華猾滑畫劃化話槐徊懷淮壞歡環桓還緩換患喚瘓豢煥渙宦幻荒慌黃磺蝗簧皇凰惶煌晃幌恍謊灰揮輝徽恢蛔回毀悔慧卉惠晦賄穢會燴匯諱誨繪葷昏婚魂渾混豁活夥火獲或惑霍貨禍擊圾基機畸稽積箕肌饑跡激譏雞姬績緝吉極棘輯籍集及急疾汲即嫉級擠幾脊己薊技冀季伎祭劑悸濟寄寂計記既忌際繼紀嘉枷夾佳家加莢頰賈甲鉀假稼價架駕嫁殲監堅尖箋間煎兼肩艱奸緘繭檢柬堿鹼揀撿簡儉剪減薦檻鑒踐賤見鍵箭件健艦劍餞漸濺澗建僵姜將漿江疆蔣槳獎講匠醬降蕉椒礁焦膠交郊澆驕嬌嚼攪鉸矯僥腳狡角餃繳絞剿教酵轎較叫窖揭接皆稭街階截劫節莖睛晶鯨京驚精粳經井警景頸靜境敬鏡徑痙靖竟競凈炯窘揪究糾玖韭久灸九酒廄救舊臼舅咎就疚鞠拘狙疽居駒菊局咀矩舉沮聚拒據巨具距踞鋸俱句懼炬劇捐鵑娟倦眷卷絹撅攫抉掘倔爵桔傑捷睫竭潔結解姐戒藉芥界借介疥誡屆巾筋斤金今津襟緊錦僅謹進靳晉禁近燼浸盡勁荊兢覺決訣絕均菌鈞軍君峻俊竣浚郡駿喀咖卡咯開揩楷凱慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕顆科殼咳可渴克刻客課肯啃墾懇坑吭空恐孔控摳口扣寇枯哭窟苦酷庫褲誇垮挎跨胯塊筷儈快寬款匡筐狂框礦眶曠況虧盔巋窺葵奎魁傀饋愧潰坤昆捆困括擴廓闊垃拉喇蠟臘辣啦萊來賴藍婪欄攔籃闌蘭瀾讕攬覽懶纜爛濫瑯榔狼廊郎朗浪撈勞牢老佬姥酪烙澇勒樂雷鐳蕾磊累儡壘擂肋類淚棱楞冷厘梨犁黎籬貍離漓理李裏鯉禮莉荔吏栗麗厲勵礫歷利傈例俐痢立粒瀝隸力璃哩倆聯蓮連鐮廉憐漣簾斂臉鏈戀煉練糧涼梁粱良兩輛量晾亮諒撩聊僚療燎寥遼潦了撂鐐廖料列裂烈劣獵琳林磷霖臨鄰鱗淋凜賃吝拎玲菱零齡鈴伶羚淩靈陵嶺領另令溜琉榴硫餾留劉瘤流柳六龍聾嚨籠窿隆壟攏隴樓婁摟簍漏陋蘆盧顱廬爐擄鹵虜魯麓碌露路賂鹿潞祿錄陸戮驢呂鋁侶旅履屢縷慮氯律率濾綠巒攣孿灤卵亂掠略掄輪倫侖淪綸論蘿螺羅邏鑼籮騾裸落洛駱絡媽麻瑪碼螞馬罵嘛嗎埋買麥賣邁脈瞞饅蠻滿蔓曼慢漫謾芒茫盲氓忙莽貓茅錨毛矛鉚卯茂冒帽貌貿麽玫枚梅酶黴煤沒眉媒鎂每美昧寐妹媚門悶們萌蒙檬盟錳猛夢孟瞇醚靡糜迷謎彌米秘覓泌蜜密冪棉眠綿冕免勉娩緬面苗描瞄藐秒渺廟妙蔑滅民抿皿敏憫閩明螟鳴銘名命謬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌謀牟某拇牡畝姆母墓暮幕募慕木目睦牧穆拿哪吶鈉那娜納氖乃奶耐奈南男難囊撓腦惱鬧淖呢餒內嫩能妮霓倪泥尼擬你匿膩逆溺蔫拈年碾攆撚念娘釀鳥尿捏聶孽嚙鑷鎳涅您檸獰凝寧擰濘牛扭鈕紐膿濃農弄奴努怒女暖虐瘧挪懦糯諾哦歐鷗毆藕嘔偶漚啪趴爬帕怕琶拍排牌徘湃派攀潘盤磐盼畔判叛乓龐旁耪胖拋咆刨炮袍跑泡呸胚培裴賠陪配佩沛噴盆砰抨烹澎彭蓬棚硼篷膨朋鵬捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片騙飄漂瓢票撇瞥拼頻貧品聘乒坪蘋萍平憑瓶評屏坡潑頗婆破魄迫粕剖撲鋪仆莆葡菩蒲埔樸圃普浦譜曝瀑期欺棲戚妻七淒漆柒沏其棋奇歧畦崎臍齊旗祈祁騎起豈乞企啟契砌器氣迄棄汽泣訖掐洽牽扡釬鉛千遷簽仟謙乾黔錢鉗前潛遣淺譴塹嵌欠歉槍嗆腔羌墻薔強搶橇鍬敲悄橋瞧喬僑巧鞘撬翹峭俏竅切茄且怯竊欽侵親秦琴勤芹擒禽寢沁青輕氫傾卿清擎晴氰情頃請慶瓊窮秋丘邱球求囚酋泅趨區蛆曲軀屈驅渠取娶齲趣去圈顴權醛泉全痊拳犬券勸缺炔瘸卻鵲榷確雀裙群然燃冉染瓤壤攘嚷讓饒擾繞惹熱壬仁人忍韌任認刃妊紉扔仍日戎茸蓉榮融熔溶容絨冗揉柔肉茹蠕儒孺如辱乳汝入褥軟阮蕊瑞銳閏潤若弱撒灑薩腮鰓塞賽三三傘散桑嗓喪搔騷掃嫂瑟色澀森僧莎砂殺剎沙紗傻啥煞篩曬珊苫杉山刪煽衫閃陜擅贍膳善汕扇繕墑傷商賞晌上尚裳梢捎稍燒芍勺韶少哨邵紹奢賒蛇舌舍赦攝射懾涉社設砷申呻伸身深娠紳神沈審嬸甚腎慎滲聲生甥牲升繩省盛剩勝聖師失獅施濕詩屍虱十石拾時什食蝕實識史矢使屎駛始式示士世柿事拭誓逝勢是嗜噬適仕侍釋飾氏市恃室視試收手首守壽授售受瘦獸蔬樞梳殊抒輸叔舒淑疏書贖孰熟薯暑曙署蜀黍鼠屬術述樹束戍豎墅庶數漱恕刷耍摔衰甩帥栓拴霜雙爽誰水睡稅吮瞬順舜說碩朔爍斯撕嘶思私司絲死肆寺嗣四伺似飼巳松聳慫頌送宋訟誦搜艘擻嗽蘇酥俗素速粟僳塑溯宿訴肅酸蒜算雖隋隨綏髓碎歲穗遂隧祟孫損筍蓑梭唆縮瑣索鎖所塌他它她塔獺撻蹋踏胎苔擡臺泰酞太態汰坍攤貪癱灘壇檀痰潭譚談坦毯袒碳探嘆炭湯塘搪堂棠膛唐糖倘躺淌趟燙掏濤滔絳萄桃逃淘陶討套特藤騰疼謄梯剔踢銻提題蹄啼體替嚏惕涕剃屜天添填田甜恬舔腆挑條迢眺跳貼鐵帖廳聽烴汀廷停亭庭挺艇通桐酮瞳同銅彤童桶捅筒統痛偷投頭透凸禿突圖徒途塗屠土吐兔湍團推頹腿蛻褪退吞屯臀拖托脫鴕陀馱駝橢妥拓唾挖哇蛙窪娃瓦襪歪外豌彎灣玩頑丸烷完碗挽晚皖惋宛婉萬腕汪王亡枉網往旺望忘妄威巍微危韋違桅圍唯惟為濰維葦萎委偉偽尾緯未蔚味畏胃餵魏位渭謂尉慰衛瘟溫蚊文聞紋吻穩紊問嗡翁甕撾蝸渦窩我斡臥握沃巫嗚鎢烏汙誣屋無蕪梧吾吳毋武五捂午舞伍侮塢戊霧晤物勿務悟誤昔熙析西硒矽晰嘻吸錫犧稀息希悉膝夕惜熄烯溪汐犀檄襲席習媳喜銑洗系隙戲細瞎蝦匣霞轄暇峽俠狹下廈夏嚇掀鍁先仙鮮纖鹹賢銜舷閑涎弦嫌顯險現獻縣腺餡羨憲陷限線相廂鑲香箱襄湘鄉翔祥詳想響享項巷橡像向象蕭硝霄削哮囂銷消宵淆曉小孝校肖嘯笑效楔些歇蠍鞋協挾攜邪斜脅諧寫械卸蟹懈泄瀉謝屑薪芯鋅欣辛新忻心信釁星腥猩惺興刑型形邢行醒幸杏性姓兄兇胸匈洶雄熊休修羞朽嗅銹秀袖繡墟戌需虛噓須徐許蓄酗敘旭序畜恤絮婿緒續軒喧宣懸旋玄選癬眩絢靴薛學穴雪血勛熏循旬詢尋馴巡殉汛訓訊遜迅壓押鴉鴨呀丫芽牙蚜崖衙涯雅啞亞訝焉咽閹煙淹鹽嚴研蜒巖延言顏閻炎沿奄掩眼衍演艷堰燕厭硯雁唁彥焰宴諺驗殃央鴦秧楊揚佯瘍羊洋陽氧仰癢養樣漾邀腰妖瑤搖堯遙窯謠姚咬舀藥要耀椰噎耶爺野冶也頁掖業葉曳腋夜液一壹醫揖銥依伊衣頤夷遺移儀胰疑沂宜姨彜椅蟻倚已乙矣以藝抑易邑屹億役臆逸肄疫亦裔意毅憶義益溢詣議誼譯異翼翌繹茵蔭因殷音陰姻吟銀淫寅飲尹引隱印英櫻嬰鷹應纓瑩螢營熒蠅迎贏盈影穎硬映喲擁傭臃癰庸雍踴蛹詠泳湧永恿勇用幽優悠憂尤由郵鈾猶油遊酉有友右佑釉誘又幼迂淤於盂榆虞愚輿余俞逾魚愉渝漁隅予娛雨與嶼禹宇語羽玉域芋郁籲遇喻峪禦愈欲獄育譽浴寓裕預豫馭鴛淵冤元垣袁原援轅園員圓猿源緣遠苑願怨院曰約越躍鑰嶽粵月悅閱耘雲鄖勻隕允運蘊醞暈韻孕匝砸雜栽哉災宰載再在咱攢暫贊贓臟葬遭糟鑿藻棗早澡蚤躁噪造皂竈燥責擇則澤賊怎增憎曾贈紮喳渣劄軋鍘閘眨柵榨咋乍炸詐摘齋宅窄債寨瞻氈詹粘沾盞斬輾嶄展蘸棧占戰站湛綻樟章彰漳張掌漲杖丈帳賬仗脹瘴障招昭找沼趙照罩兆肇召遮折哲蟄轍者鍺蔗這浙珍斟真甄砧臻貞針偵枕疹診震振鎮陣蒸掙睜征猙爭怔整拯正政幀癥鄭證芝枝支吱蜘知肢脂汁之織職直植殖執值侄址指止趾只旨紙誌摯擲至致置幟峙製智秩稚質炙痔滯治窒中盅忠鐘衷終種腫重仲眾舟周州洲謅粥軸肘帚咒皺宙晝驟珠株蛛朱豬諸誅逐竹燭煮拄矚囑主著柱助蛀貯鑄築住註祝駐抓爪拽專磚轉撰賺篆樁莊裝妝撞壯狀椎錐追贅墜綴諄準捉拙卓桌琢茁酌啄著灼濁茲咨資姿滋淄孜紫仔籽滓子自漬字鬃棕蹤宗綜總縱鄒走奏揍租足卒族祖詛阻組鉆纂嘴醉最罪尊遵昨左佐柞做作坐座錒噯嬡璦曖靄諳銨鵪媼驁鰲鈀唄鈑鴇齙鵯賁錛蓽嗶潷鉍篳蹕芐緶籩驃颮飆鏢鑣鰾儐繽檳殯臏鑌髕鬢稟餑鈸鵓鈽驂黲惻鍤儕釵囅諂讖蕆懺嬋驏覘禪鐔倀萇悵閶鯧硨傖諶櫬磣齔棖檉鋮鐺飭鴟銃儔幬讎芻絀躕釧愴綞鶉輟齪鶿蓯驄樅輳攛銼鹺噠韃駘紿殫賧癉簞讜碭襠燾鐙糴詆諦綈覿鏑巔鈿癲銚鯛鰈鋌銩崠鶇竇瀆櫝牘篤黷籪懟鐓燉躉鐸諤堊閼軛鋨鍔鶚顎顓鱷誒邇鉺鴯鮞鈁魴緋鐨鯡僨灃鳧駙紱紼賻麩鮒鰒釓賅尷搟紺戇睪誥縞鋯紇鎘潁亙賡綆鯁詬緱覯詁轂鈷錮鴣鵠鶻鴰摑詿摜鸛鰥獷匭劌媯檜鮭鱖袞緄鯀堝咼幗槨蟈鉿闞絎頡灝顥訶闔蠣黌訌葒閎鱟滸鶘驊樺鏵奐繯鍰鯇鰉詼薈噦澮繢琿暉諢餛閽鈥鑊訐詰薺嘰嚌驥璣覬齏磯羈蠆躋霽鱭鯽郟浹鋏鎵蟯諫縑戔戩瞼鶼筧鰹韉絳韁撟嶠鷦鮫癤頜鮚巹藎饉縉贐覲剄涇逕弳脛靚鬮鳩鷲詎屨櫸颶鉅鋦窶齟錈鐫雋譎玨皸剴塏愾愷鎧鍇龕閌鈧銬騍緙軻鈳錁頷齦鏗嚳鄶噲膾獪髖誆誑鄺壙纊貺匱蕢憒聵簣閫錕鯤蠐崍徠淶瀨賚睞錸癩籟嵐欖斕鑭襤閬鋃嘮嶗銠鐒癆鰳誄縲儷酈壢藶蒞蘺嚦邐驪縭櫪櫟轢礪鋰鸝癘糲躒靂鱺鱧蘞奩瀲璉殮褳襝鰱魎繚釕鷯藺廩檁轔躪綾欞蟶鯪瀏騮綹鎦鷚蘢瀧瓏櫳朧礱僂蔞嘍嶁鏤瘺耬螻髏壚擼嚕閭瀘淥櫨櫓轤輅轆氌臚鸕鷺艫鱸臠孌欒鸞鑾圇犖玀濼欏腡鏍櫚褸鋝嘸嘜嬤榪勱縵鏝顙鰻麼捫燜懣鍆羋謐獼禰澠靦黽緲繆閔緡謨驀饃歿鏌鉬鐃訥鈮鯢輦鯰蔦裊隉蘗囁顢躡苧嚀聹儂噥駑釹儺謳慪甌蹣皰轡紕羆鈹諞駢縹嬪釙鏷鐠蘄騏綺榿磧頎頏鰭僉蕁慳騫繾槧鈐嬙檣戧熗錆鏘鏹羥蹌誚譙蕎繰磽蹺愜鍥篋鋟撳鯖煢蛺巰賕蟣鰍詘嶇闃覷鴝詮綣輇銓闋闕愨蕘嬈橈飪軔嶸蠑縟銣顰蜆颯毿糝繅嗇銫穡鎩鯊釃訕姍騸釤鱔坰殤觴厙灄畬詵諗瀋謚塒蒔弒軾貰鈰鰣綬攄紓閂鑠廝駟緦鍶鷥藪餿颼鎪謖穌誶蓀猻嗩脧闥鉈鰨鈦鮐曇鉭錟頇儻餳鐋鏜韜鋱緹鵜闐糶齠鰷慟鈄釷摶飩籜鼉媧膃紈綰輞諉幃闈溈潿瑋韙煒鮪閿萵齷鄔廡憮嫵騖鵡鶩餼鬩璽覡硤莧薟蘚峴獫嫻鷴癇蠔秈躚薌餉驤緗饗嘵瀟驍綃梟簫褻擷紲纈陘滎饈鵂詡頊諼鉉鏇謔澩鱈塤潯鱘埡婭椏氬厴贗儼兗讞懨閆釅魘饜鼴煬軺鷂鰩靨謁鄴曄燁詒囈嶧飴懌驛縊軼貽釔鎰鐿瘞艤銦癮塋鶯縈鎣攖嚶瀅瀠瓔鸚癭頦罌鏞蕕銪魷傴俁諛諭蕷崳飫閾嫗紆覦歟鈺鵒鷸齬櫞鳶黿鉞鄆蕓惲慍紜韞殞氳瓚趲鏨駔賾嘖幘簀譖繒譫詔釗謫輒鷓湞縝楨軫賑禎鴆諍崢鉦錚箏騭櫛梔軹輊贄鷙螄縶躓躑觶鍾紂縐佇櫧銖囀饌顳騅縋諑鐲諮緇輜貲眥錙齜鯔傯諏騶鯫鏃纘躦鱒訁譾郤猛氹阪壟堖垵墊檾蕒葤蓧蒓菇槁摣咤唚哢噝噅撅劈謔襆嶴脊仿僥獁麅餘餷饊饢楞怵懍爿漵灩混濫瀦淡寧糸絝緔瑉梘棬案橰櫫軲軤賫膁腖飈糊煆溜湣渺碸滾瞘鈈鉕鋣銱鋥鋶鐦鐧鍩鍀鍃錇鎄鎇鎿鐝鑥鑹鑔穭鶓鶥鸌癧屙瘂臒襇繈耮顬蟎麯鮁鮃鮎鯗鯝鯴鱝鯿鰠鰵鱅鞽韝齇 \ No newline at end of file diff --git a/test/aces_test.go b/test/aces_test.go new file mode 100644 index 0000000..f570c46 --- /dev/null +++ b/test/aces_test.go @@ -0,0 +1,52 @@ +package test + +import ( + "applet/app/utils" + "encoding/base64" + "fmt" + "testing" +) + +func TestAesCrypt_Encrypt(t *testing.T) { + var aesCrypt = utils.AesCrypt{ + Key: []byte("e{&[^Ft(.~g]1eR-]VO"), + Iv: []byte("ZV`7<5X]/2brS@sz"), + } + + var text = `{"uid":"82","applyOrder":"821607392542143106","db":{"db_host":"119.23.182.117","db_port":"3306","db_name":"fnuoos_template","db_username":"root","db_password":"Fnuo123com@"}}` + result, err := aesCrypt.Encrypt([]byte(text)) + if err != nil { + fmt.Println(err) + return + } + + pass64 := base64.StdEncoding.EncodeToString(result) + fmt.Println(pass64) +} + +func TestAesCrypt_Decrypt(t *testing.T) { + var aesCrypt = utils.AesCrypt{ + Key: []byte("e{&[^Ft(.~g]1eR-]VO"), + Iv: []byte("ZV`7<5X]/2brS@sz"), + } + + pass64 := "JD0RXX1YbZPWKeNiVKsq0jQ1Bfnbln3fIMcmJkovU5gUCf329y9ZdqECWe4OKpoOk25/hPNaBH9VwellhIQhpw==" + bytesPass, err := base64.StdEncoding.DecodeString(pass64) + if err != nil { + fmt.Println(err) + return + } + + plainText, err := aesCrypt.Decrypt(bytesPass) + if err != nil { + fmt.Println(err) + return + } + + fmt.Println(string(plainText)) +} + +func Test_Vi(t *testing.T) { + fmt.Println("123") + fmt.Println([]byte("ZV`7<5X]/2brS@sz")) +} diff --git a/test/toke_test.go b/test/toke_test.go new file mode 100644 index 0000000..f37d853 --- /dev/null +++ b/test/toke_test.go @@ -0,0 +1,35 @@ +package test + +import ( + "applet/app/db" + "applet/app/lib/taoke" + "applet/app/svc" + "fmt" + "testing" +) + +func TestBrandList(t *testing.T) { + tkBrandStruct, err := taoke.BrandList("1", "20") + if err != nil { + t.Error(err) + } + for _, brandStruct := range *tkBrandStruct { + fmt.Println(brandStruct) + } + +} + +func TestSuperCategory(t *testing.T) { + category, err := taoke.SuperCategory() + if err != nil { + t.Error(err) + } + for _, brandStruct := range *category { + fmt.Println(brandStruct) + } +} + +func TestAddBrandDB(t *testing.T) { + engine := db.DBs["123456"] + svc.AddBrandDB(engine) +} diff --git a/test/zhimeng_api.go b/test/zhimeng_api.go new file mode 100644 index 0000000..3cfb347 --- /dev/null +++ b/test/zhimeng_api.go @@ -0,0 +1,156 @@ +package test + +import ( + "fmt" + "github.com/gocolly/colly" + "github.com/gocolly/colly/extensions" + "github.com/tidwall/gjson" + "net/http" + "regexp" + "strings" +) + +/* +目前可用接口 +[商品查询]https://www.showdoc.com.cn/59349170678610?page_id=339616554551473 +[商品详情]https://www.showdoc.com.cn/59349170678610?page_id=339687047645094 + +*/ + +// Response is SDK Response +type Response struct { + Msg string `json:"msg"` + Success int `json:"success"` + Data interface{} `json:"data"` +} + +func main() { + // // JD + // postData := map[string]string{"keyword": "联想", "p": "1", "size": "10"} + // fmt.Println(postData["time"]) + // res, _ := zm.Send("jd", "getgoods", postData) + // fmt.Println(string(res)) + // p := Response{} + // json.Unmarshal(res, &p) + // fmt.Println(p) + // // VIP + // postData = map[string]string{"keyword": "联想", "p": "1", "size": "10", "order": "0"} + // fmt.Println(postData["time"]) + // res, _ = zm.Send("wph", "seach_goods", postData) + // fmt.Println(string(res)) + // p = Response{} + // json.Unmarshal(res, &p) + // fmt.Println(p) + // // PDD + // postData = map[string]string{"keyword": "联想", "p": "1", "size": "10", "sort": "goods_price asc"} + // res, _ = zm.Send("pdd", "getgoods", postData) + // fmt.Println(string(res)) + // p = Response{} + // json.Unmarshal(res, &p) + // fmt.Println(p) + for i := 0; i < 1000; i++ { + fmt.Println(i) + scrapPDD() + } +} + +func scrapJD() { + c := colly.NewCollector(func(collector *colly.Collector) { + extensions.RandomUserAgent(collector) + }) + c.OnResponse(func(r *colly.Response) { + re, _ := regexp.Compile(`[(]//[^\s]*[)]`) + body := r.Body + fmt.Println(string(body)) + urls := re.FindAllString(string(body), -1) + fmt.Println(urls) + for _, url := range urls { + url = strip(url, "()") + url = "https:" + url + fmt.Println(url) + } + }) + c.Visit("https://wqsitem.jd.com/detail/100008309360_d100008309360_normal.html") +} + +func scrapPDD() { + var cookies = []*http.Cookie{} + var mapcookies = make(map[string]string) + url := fmt.Sprintf("https://mobile.yangkeduo.com/goods.html?goods_id=%s", "156632692649") + cs := "api_uid=CiHUKl9DZKpL6QBVK4qWAg==; _nano_fp=Xpdbl0PyX5Pxn0TynT_DTGXbst0kz5cjzGAQDnBR; ua=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F84.0.4147.135%20Safari%2F537.36; webp=1; quick_entrance_click_record=20200824%2C1; PDDAccessToken=XRC6FNX7FRBL6AJRMRBRN4CDG2PZXO3YJZYHFUA4O2PLDAWVYXHA1125821; pdd_user_id=9622705741400; pdd_user_uin=F27EAZ4V5S7EGEVMCJI2P7RFLE_GEXDA; chat_config={'host_whitelist':['.yangkeduo.com','.pinduoduo.com','.10010.com/queen/tencent/pinduoduo-fill.html','.ha.10086.cn/pay/card-sale!toforward.action','wap.ha.10086.cn','m.10010.com']}; pdd_vds=gaLMNqmfGfyYEpyYiZGWopaCicNHbXGWtDNcOZnWLqiDNfLHOXnZaqtCLDiX" + csList := strings.Split(cs, ";") + for _, c := range csList { + s := strings.Trim(c, " ") + sList := strings.SplitN(s, "=", 2) + + mapcookies[sList[len(sList)-len(sList)]] = sList[(len(sList) - len(sList) + 1)] + + } + fmt.Println(mapcookies) + for key, value := range mapcookies { + if key == "ua" { + continue + } + cookies = append(cookies, &http.Cookie{Name: key, Value: value}) + } + c := colly.NewCollector( + colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"), + ) + + c.OnResponse(func(r *colly.Response) { + re, _ := regexp.Compile(`window.rawData=.*}`) + body := r.Body + fmt.Println(string(body)) + result := re.FindString(string(body)) + // fmt.Println(result) + result = strings.SplitN(result, "=", 2)[1] + // fmt.Println(result) + value := gjson.Get(result, "store.initDataObj.goods.detailGallery") + // fmt.Println(value) + list := value.Array() + imageList := []string{} + for _, v := range list { + nv := gjson.Get(v.String(), "url") + imageList = append(imageList, nv.String()) + } + fmt.Println(imageList) + ck := c.Cookies("https://mobile.yangkeduo.com") + fmt.Println(ck) + cookies = ck + }) + + c.SetCookies("https://mobile.yangkeduo.com", cookies) + + c.Visit(url) +} + +func strip(ss string, charss string) string { + s, chars := []rune(ss), []rune(charss) + length := len(s) + max := len(s) - 1 + l, r := true, true //标记当左端或者右端找到正常字符后就停止继续寻找 + start, end := 0, max + tmpEnd := 0 + charset := make(map[rune]bool) //创建字符集,也就是唯一的字符,方便后面判断是否存在 + for i := 0; i < len(chars); i++ { + charset[chars[i]] = true + } + for i := 0; i < length; i++ { + if _, exist := charset[s[i]]; l && !exist { + start = i + l = false + } + tmpEnd = max - i + if _, exist := charset[s[tmpEnd]]; r && !exist { + end = tmpEnd + r = false + } + if !l && !r { + break + } + } + if l && r { // 如果左端和右端都没找到正常字符,那么表示该字符串没有正常字符 + return "" + } + return string(s[start : end+1]) +} diff --git a/tmp/%s.log b/tmp/%s.log new file mode 100644 index 0000000..e69de29 diff --git a/tmp/debug.log b/tmp/debug.log new file mode 100644 index 0000000..53d1f7b --- /dev/null +++ b/tmp/debug.log @@ -0,0 +1,117 @@ +2024-09-10 17:32:40.069 error e/msg.go:94 not found master_id in DBs {"app": "applet"} +applet/app/e.OutErr + E:/go_api/community_team/app/e/msg.go:94 +applet/app/mw.DB + E:/go_api/community_team/app/mw/mw_db.go:23 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.Cors + E:/go_api/community_team/app/mw/mw_cors.go:28 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1 + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/recovery.go:102 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +github.com/gin-gonic/gin.LoggerWithConfig.func1 + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/logger.go:240 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.ChangeHeader + E:/go_api/community_team/app/mw/mw_change_header.go:17 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +github.com/gin-gonic/gin.(*Engine).handleHTTPRequest + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620 +github.com/gin-gonic/gin.(*Engine).ServeHTTP + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576 +net/http.serverHandler.ServeHTTP + C:/Users/Administrator/go/go1.19/src/net/http/server.go:2947 +net/http.(*conn).serve + C:/Users/Administrator/go/go1.19/src/net/http/server.go:1991 +2024-09-10 17:51:04.914 warn mw/mw_auth_jwt.go:76 redigo: nil returned {"app": "applet"} +2024-09-10 17:52:04.095 warn mw/mw_auth_jwt.go:76 redigo: nil returned {"app": "applet"} +2024-09-10 17:52:04.176 error e/msg.go:92 已收藏: +applet/app/svc.StoreAddLike [svc_store.go:114] +applet/app/hdl.StoreAddLike [hdl_store.go:26] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +applet/app/mw.AuthJWT [mw_auth_jwt.go:78] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Context).Next[context.go:175] +github.com/gin-gonic/gin.(*Context).Next[context.go:172] +github.com/gin-gonic/gin.(*Engine).ServeHTTP[gin.go:578] +net/http.serverHandler.ServeHTTP[server.go:2948] +net/http.(*conn).serve [server.go:1992] +runtime.goexit [asm_amd64.s:1595] {"app": "applet"} +applet/app/e.OutErr + E:/go_api/community_team/app/e/msg.go:92 +applet/app/svc.StoreAddLike + E:/go_api/community_team/app/svc/svc_store.go:114 +applet/app/hdl.StoreAddLike + E:/go_api/community_team/app/hdl/hdl_store.go:25 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.NOCACHE + E:/go_api/community_team/app/mw/mw_auth_jwt.go:120 +applet/app/mw.AuthJWT + E:/go_api/community_team/app/mw/mw_auth_jwt.go:77 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.Checker + E:/go_api/community_team/app/mw/mw_checker.go:21 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.CheckSign + E:/go_api/community_team/app/mw/mw_check_sign.go:19 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.CheckBody + E:/go_api/community_team/app/mw/mw_check_sign.go:36 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.DB + E:/go_api/community_team/app/mw/mw_db.go:127 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.Cors + E:/go_api/community_team/app/mw/mw_cors.go:28 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1 + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/recovery.go:102 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +github.com/gin-gonic/gin.LoggerWithConfig.func1 + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/logger.go:240 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +applet/app/mw.ChangeHeader + E:/go_api/community_team/app/mw/mw_change_header.go:17 +github.com/gin-gonic/gin.(*Context).Next + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 +github.com/gin-gonic/gin.(*Engine).handleHTTPRequest + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620 +github.com/gin-gonic/gin.(*Engine).ServeHTTP + C:/Users/Administrator/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576 +net/http.serverHandler.ServeHTTP + C:/Users/Administrator/go/go1.19/src/net/http/server.go:2947 +net/http.(*conn).serve + C:/Users/Administrator/go/go1.19/src/net/http/server.go:1991 +2024-09-10 17:52:18.709 warn mw/mw_auth_jwt.go:76 redigo: nil returned {"app": "applet"} +2024-09-10 17:56:46.996 warn mw/mw_auth_jwt.go:76 redigo: nil returned {"app": "applet"} diff --git a/tmp/fnuoos_test1.log b/tmp/fnuoos_test1.log new file mode 100644 index 0000000..e8cda5d --- /dev/null +++ b/tmp/fnuoos_test1.log @@ -0,0 +1,143 @@ +[xorm] [info] 2024/09/10 17:32:59.486092 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_over_time] - 77.3368ms +[xorm] [info] 2024/09/10 17:32:59.616835 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 26.3208ms +[xorm] [info] 2024/09/10 17:32:59.746133 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 25.7758ms +[xorm] [info] 2024/09/10 17:32:59.797069 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [domain_setting] - 25.0253ms +[xorm] [info] 2024/09/10 17:32:59.979580 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [h5_api_secret_key] - 25.4213ms +[xorm] [info] 2024/09/10 17:33:00.107999 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [app_api_secret_key] - 24.7247ms +[xorm] [info] 2024/09/10 17:33:00.236988 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [applet_api_secret_key] - 24.8378ms +[xorm] [info] 2024/09/10 17:33:00.368939 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [integral_prec] - 25.0915ms +[xorm] [info] 2024/09/10 17:33:00.500176 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [fan_order_commission_prec] - 26.3397ms +[xorm] [info] 2024/09/10 17:33:00.628995 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [area_order_commission_prec] - 25.6141ms +[xorm] [info] 2024/09/10 17:33:00.759837 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [commission_prec] - 25.9936ms +[xorm] [info] 2024/09/10 17:33:00.887471 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [price_prec] - 25.0652ms +[xorm] [info] 2024/09/10 17:33:01.016885 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ds_check] - 25.0571ms +[xorm] [info] 2024/09/10 17:33:01.146098 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 24.9584ms +[xorm] [info] 2024/09/10 17:33:01.196993 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [app_user_default_avatar] - 25.3196ms +[xorm] [info] 2024/09/10 17:33:01.325158 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [order_virtual_coin_type] - 24.93ms +[xorm] [info] 2024/09/10 17:33:01.454961 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [order_virtual_coin_name] - 25.964ms +[xorm] [info] 2024/09/10 17:33:01.585012 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [h5_applet_must_sign] - 26.182ms +[xorm] [info] 2024/09/10 17:33:01.713940 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [android_must_sign] - 25.2669ms +[xorm] [info] 2024/09/10 17:33:01.844281 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 26.5598ms +[xorm] [info] 2024/09/10 17:33:01.895517 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [sms_type] - 25.2051ms +[xorm] [info] 2024/09/10 17:36:13.644164 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 25.428ms +[xorm] [info] 2024/09/10 17:36:13.752887 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 30.5294ms +[xorm] [info] 2024/09/10 17:36:14.124590 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 25.8156ms +[xorm] [info] 2024/09/10 17:36:14.308237 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 25.1972ms +[xorm] [info] 2024/09/10 17:36:14.364255 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [0] - 29.192ms +[xorm] [info] 2024/09/10 17:36:14.392264 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [0] - 27.4359ms +[xorm] [info] 2024/09/10 17:36:14.405749 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` ORDER BY `level_weight` ASC LIMIT 1 [] - 13.3223ms +[xorm] [info] 2024/09/10 17:36:14.419416 [SQL] *,sqrt( ( (( 0.000000 - longitude)*PI()*12656*cos((( 0.000000 +latitude)/2)*PI()/180)/180) * (( 0.000000 - longitude)*PI()*12656*cos (((0.000000+latitude)/2)*PI()/180)/180) ) + ( ((0.000000-latitude)*PI()*12656/180) * ((0.000000-latitude)*PI()*12656/180) ) ) AS km%!(EXTRA string= *,sqrt( ( (( 0.000000 - longitude)*PI()*12656*cos((( 0.000000 +latitude)/2)*PI()/180)/180) * (( 0.000000 - longitude)*PI()*12656*cos (((0.000000+latitude)/2)*PI()/180)/180) ) + ( ((0.000000-latitude)*PI()*12656/180) * ((0.000000-latitude)*PI()*12656/180) ) ) AS km, string=state=1 and store_type=0, string= order by fan desc,km asc,id asc limit 0,10) [] - 13.1602ms +[xorm] [info] 2024/09/10 17:37:34.498668 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 31.2861ms +[xorm] [info] 2024/09/10 17:37:34.632387 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 29.1701ms +[xorm] [info] 2024/09/10 17:37:35.004766 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 29.6891ms +[xorm] [info] 2024/09/10 17:37:35.191158 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 30.6765ms +[xorm] [info] 2024/09/10 17:37:35.249729 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [0] - 32.6192ms +[xorm] [info] 2024/09/10 17:37:35.281418 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [0] - 30.9454ms +[xorm] [info] 2024/09/10 17:37:35.297403 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` ORDER BY `level_weight` ASC LIMIT 1 [] - 15.9041ms +[xorm] [info] 2024/09/10 17:37:35.312910 [SQL] *,sqrt( ( (( 0.000000 - longitude)*PI()*12656*cos((( 0.000000 +latitude)/2)*PI()/180)/180) * (( 0.000000 - longitude)*PI()*12656*cos (((0.000000+latitude)/2)*PI()/180)/180) ) + ( ((0.000000-latitude)*PI()*12656/180) * ((0.000000-latitude)*PI()*12656/180) ) ) AS km%!(EXTRA string= *,sqrt( ( (( 0.000000 - longitude)*PI()*12656*cos((( 0.000000 +latitude)/2)*PI()/180)/180) * (( 0.000000 - longitude)*PI()*12656*cos (((0.000000+latitude)/2)*PI()/180)/180) ) + ( ((0.000000-latitude)*PI()*12656/180) * ((0.000000-latitude)*PI()*12656/180) ) ) AS km, string=1=1 and store_type=0, string= order by fan desc,km asc,id asc limit 0,10) [] - 15.3149ms +[xorm] [info] 2024/09/10 17:38:19.153465 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 26.3129ms +[xorm] [info] 2024/09/10 17:38:19.278001 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 24.5095ms +[xorm] [info] 2024/09/10 17:38:19.719927 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 24.5028ms +[xorm] [info] 2024/09/10 17:38:19.929033 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 24.3421ms +[xorm] [info] 2024/09/10 17:38:19.988169 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [0] - 28.1304ms +[xorm] [info] 2024/09/10 17:38:20.015412 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [0] - 26.4244ms +[xorm] [info] 2024/09/10 17:38:20.028954 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` ORDER BY `level_weight` ASC LIMIT 1 [] - 13.4627ms +[xorm] [info] 2024/09/10 17:38:20.041175 [SQL] select *,sqrt( ( (( 0.000000 - longitude)*PI()*12656*cos((( 0.000000 +latitude)/2)*PI()/180)/180) * (( 0.000000 - longitude)*PI()*12656*cos (((0.000000+latitude)/2)*PI()/180)/180) ) + ( ((0.000000-latitude)*PI()*12656/180) * ((0.000000-latitude)*PI()*12656/180) ) ) AS km from community_team_store where %%!(EXTRA string=1=1 and store_type=0, string= order by fan desc,km asc,id asc limit 0,10) [] - 12.1559ms +[xorm] [info] 2024/09/10 17:38:54.435191 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 27.0543ms +[xorm] [info] 2024/09/10 17:38:54.594032 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 27.6193ms +[xorm] [info] 2024/09/10 17:38:55.032286 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 26.3296ms +[xorm] [info] 2024/09/10 17:38:55.247411 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 29.0248ms +[xorm] [info] 2024/09/10 17:38:55.308986 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [0] - 29.927ms +[xorm] [info] 2024/09/10 17:38:55.337616 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [0] - 28.0888ms +[xorm] [info] 2024/09/10 17:38:55.350548 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` ORDER BY `level_weight` ASC LIMIT 1 [] - 12.4737ms +[xorm] [info] 2024/09/10 17:38:55.363713 [SQL] select *,sqrt( ( (( 0.000000 - longitude)*PI()*12656*cos((( 0.000000 +latitude)/2)*PI()/180)/180) * (( 0.000000 - longitude)*PI()*12656*cos (((0.000000+latitude)/2)*PI()/180)/180) ) + ( ((0.000000-latitude)*PI()*12656/180) * ((0.000000-latitude)*PI()*12656/180) ) ) AS km from community_team_store where 1=1 and store_type=0 order by fan desc,km asc,id asc limit 0,10 [] - 12.5016ms +[xorm] [info] 2024/09/10 17:41:42.224631 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 84.2585ms +[xorm] [info] 2024/09/10 17:41:42.341773 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 28.2414ms +[xorm] [info] 2024/09/10 17:41:42.754657 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 28.2839ms +[xorm] [info] 2024/09/10 17:41:42.957347 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 27.3814ms +[xorm] [info] 2024/09/10 17:41:43.021233 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [0] - 34.3021ms +[xorm] [info] 2024/09/10 17:41:43.049810 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [0] - 28.2015ms +[xorm] [info] 2024/09/10 17:41:43.064926 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` ORDER BY `level_weight` ASC LIMIT 1 [] - 14.3899ms +[xorm] [info] 2024/09/10 17:41:43.078787 [SQL] select *,sqrt( ( (( 0.000000 - lng)*PI()*12656*cos((( 0.000000 +lat)/2)*PI()/180)/180) * (( 0.000000 - lng)*PI()*12656*cos (((0.000000+lat)/2)*PI()/180)/180) ) + ( ((0.000000-lat)*PI()*12656/180) * ((0.000000-lat)*PI()*12656/180) ) ) AS km from community_team_store where 1=1 and store_type=0 order by fan desc,km asc,id asc limit 0,10 [] - 13.4718ms +[xorm] [info] 2024/09/10 17:41:43.107809 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [0 1] - 28.0164ms +[xorm] [info] 2024/09/10 17:51:04.140876 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 72.6837ms +[xorm] [info] 2024/09/10 17:51:04.274379 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 24.6158ms +[xorm] [info] 2024/09/10 17:51:04.647425 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 23.3636ms +[xorm] [info] 2024/09/10 17:51:04.831082 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 23.514ms +[xorm] [info] 2024/09/10 17:51:04.887746 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 25.938ms +[xorm] [info] 2024/09/10 17:51:04.940916 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 25.3962ms +[xorm] [info] 2024/09/10 17:51:04.965324 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 23.839ms +[xorm] [info] 2024/09/10 17:51:04.989429 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 23.836ms +[xorm] [info] 2024/09/10 17:51:05.016448 [SQL] INSERT INTO `community_team_store_like` (`uid`,`store_id`,`time`) VALUES (?,?,?) [21702 1 2024-09-10 17:51:04] - 26.8114ms +[xorm] [info] 2024/09/10 17:52:03.415731 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 76.8606ms +[xorm] [info] 2024/09/10 17:52:03.512774 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 23.8462ms +[xorm] [info] 2024/09/10 17:52:03.851991 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 24.1043ms +[xorm] [info] 2024/09/10 17:52:04.021451 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 25.6734ms +[xorm] [info] 2024/09/10 17:52:04.071451 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 25.7739ms +[xorm] [info] 2024/09/10 17:52:04.124469 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 28.0341ms +[xorm] [info] 2024/09/10 17:52:04.150607 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 25.8393ms +[xorm] [info] 2024/09/10 17:52:04.176358 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 25.2831ms +[xorm] [info] 2024/09/10 17:52:17.948485 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 25.0861ms +[xorm] [info] 2024/09/10 17:52:18.059950 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 28.1273ms +[xorm] [info] 2024/09/10 17:52:18.440279 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 25.8548ms +[xorm] [info] 2024/09/10 17:52:18.628580 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 24.3929ms +[xorm] [info] 2024/09/10 17:52:18.681993 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 26.6699ms +[xorm] [info] 2024/09/10 17:52:18.750233 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 40.6161ms +[xorm] [info] 2024/09/10 17:52:18.776628 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 25.8741ms +[xorm] [info] 2024/09/10 17:52:18.804358 [SQL] DELETE FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 26.7071ms +[xorm] [info] 2024/09/10 17:56:46.240958 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 74.7636ms +[xorm] [info] 2024/09/10 17:56:46.367919 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 23.8104ms +[xorm] [info] 2024/09/10 17:56:46.730424 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 24.2406ms +[xorm] [info] 2024/09/10 17:56:46.917286 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 23.6049ms +[xorm] [info] 2024/09/10 17:56:46.970354 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 26.9739ms +[xorm] [info] 2024/09/10 17:56:47.025192 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 28.3315ms +[xorm] [info] 2024/09/10 17:56:47.051058 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 24.8302ms +[xorm] [info] 2024/09/10 17:56:47.076308 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 24.7682ms +[xorm] [info] 2024/09/10 17:56:47.105259 [SQL] INSERT INTO `community_team_store_like` (`uid`,`store_id`,`time`) VALUES (?,?,?) [21702 1 2024-09-10 17:56:47] - 27.5973ms +[xorm] [info] 2024/09/10 17:57:16.946116 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 75.4489ms +[xorm] [info] 2024/09/10 17:57:17.060578 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 24.3978ms +[xorm] [info] 2024/09/10 17:57:17.487845 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 25.7349ms +[xorm] [info] 2024/09/10 17:57:17.695217 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 26.8809ms +[xorm] [info] 2024/09/10 17:57:17.750967 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 25.5242ms +[xorm] [info] 2024/09/10 17:57:17.778795 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 27.2128ms +[xorm] [info] 2024/09/10 17:57:17.807510 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 28.1799ms +[xorm] [info] 2024/09/10 17:57:17.820805 [SQL] cts.*,sqrt( ( (( 0.000000 - cts.lng)*PI()*12656*cos((( 0.000000 +cts.lat)/2)*PI()/180)/180) * (( 0.000000 - cts.lng)*PI()*12656*cos (((0.000000+cts.lat)/2)*PI()/180)/180) ) + ( ((0.000000-cts.lat)*PI()*12656/180) * ((0.000000-cts.lat)*PI()*12656/180) ) ) AS km%!(EXTRA string= cts.*,sqrt( ( (( 0.000000 - cts.lng)*PI()*12656*cos((( 0.000000 +cts.lat)/2)*PI()/180)/180) * (( 0.000000 - cts.lng)*PI()*12656*cos (((0.000000+cts.lat)/2)*PI()/180)/180) ) + ( ((0.000000-cts.lat)*PI()*12656/180) * ((0.000000-cts.lat)*PI()*12656/180) ) ) AS km, string=cts.state=1 and cts.store_type=0, string= order by km asc,cts.id asc limit 0,10) [] - 13.0062ms +[xorm] [info] 2024/09/10 17:58:22.716709 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 82.8724ms +[xorm] [info] 2024/09/10 17:58:22.846455 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 24.762ms +[xorm] [info] 2024/09/10 17:58:23.205608 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 24.0369ms +[xorm] [info] 2024/09/10 17:58:23.384225 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 24.2112ms +[xorm] [info] 2024/09/10 17:58:23.435979 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 25.9218ms +[xorm] [info] 2024/09/10 17:58:23.463472 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 26.7224ms +[xorm] [info] 2024/09/10 17:58:23.489342 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 25.3204ms +[xorm] [info] 2024/09/10 17:58:23.502275 [SQL] select cts.*,sqrt( ( (( 0.000000 - cts.lng)*PI()*12656*cos((( 0.000000 +cts.lat)/2)*PI()/180)/180) * (( 0.000000 - cts.lng)*PI()*12656*cos (((0.000000+cts.lat)/2)*PI()/180)/180) ) + ( ((0.000000-cts.lat)*PI()*12656/180) * ((0.000000-cts.lat)*PI()*12656/180) ) ) AS km from community_team_store_like ctsl + left join community_team_store cts on ctsl.store_id=cts.id +where %%!(EXTRA string=cts.state=1 and cts.store_type=0, string= order by km asc,cts.id asc limit 0,10) [] - 12.2003ms +[xorm] [info] 2024/09/10 18:01:58.384084 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 32.4447ms +[xorm] [info] 2024/09/10 18:01:58.498645 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 28.0723ms +[xorm] [info] 2024/09/10 18:01:58.908508 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 27.7609ms +[xorm] [info] 2024/09/10 18:01:59.106495 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 28.5754ms +[xorm] [info] 2024/09/10 18:01:59.165041 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 28.6049ms +[xorm] [info] 2024/09/10 18:01:59.196566 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 30.541ms +[xorm] [info] 2024/09/10 18:01:59.275137 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 78.0543ms +[xorm] [info] 2024/09/10 18:01:59.291005 [SQL] select cts.*,sqrt( ( (( 0.000000 - cts.lng)*PI()*12656*cos((( 0.000000 +cts.lat)/2)*PI()/180)/180) * (( 0.000000 - cts.lng)*PI()*12656*cos (((0.000000+cts.lat)/2)*PI()/180)/180) ) + ( ((0.000000-cts.lat)*PI()*12656/180) * ((0.000000-cts.lat)*PI()*12656/180) ) ) AS km from community_team_store_like ctsl + left join community_team_store cts on ctsl.store_id=cts.id +where cts.state=1 and cts.store_type=0 order by km asc,cts.id asc limit 0,10 [] - 15.8679ms +[xorm] [info] 2024/09/10 18:01:59.319371 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 28.1047ms +[xorm] [info] 2024/09/10 18:02:26.713249 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 83.0263ms +[xorm] [info] 2024/09/10 18:02:26.820089 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 26.6028ms +[xorm] [info] 2024/09/10 18:02:27.180302 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 29.5648ms +[xorm] [info] 2024/09/10 18:02:27.357571 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 26.7639ms +[xorm] [info] 2024/09/10 18:02:27.412199 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 29.4528ms +[xorm] [info] 2024/09/10 18:02:27.442438 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 30.1022ms +[xorm] [info] 2024/09/10 18:02:27.470979 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 27.9176ms +[xorm] [info] 2024/09/10 18:02:27.486361 [SQL] select *,sqrt( ( (( 0.000000 - lng)*PI()*12656*cos((( 0.000000 +lat)/2)*PI()/180)/180) * (( 0.000000 - lng)*PI()*12656*cos (((0.000000+lat)/2)*PI()/180)/180) ) + ( ((0.000000-lat)*PI()*12656/180) * ((0.000000-lat)*PI()*12656/180) ) ) AS km from community_team_store where 1=1 and store_type=0 order by km asc,id asc limit 0,10 [] - 15.0313ms +[xorm] [info] 2024/09/10 18:02:27.514004 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 27.5698ms +[xorm] [info] 2024/09/10 18:02:31.568879 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_station] - 27.8287ms +[xorm] [info] 2024/09/10 18:02:31.671836 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [close_app_version] - 26.8652ms +[xorm] [info] 2024/09/10 18:02:32.037538 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [is_show_point] - 27.5254ms +[xorm] [info] 2024/09/10 18:02:32.215664 [SQL] SELECT `key`, `val`, `memo` FROM `sys_cfg` WHERE (`key`=?) LIMIT 1 [ios_must_sign] - 27.9365ms +[xorm] [info] 2024/09/10 18:02:32.268915 [SQL] SELECT `uid`, `username`, `password`, `passcode`, `email`, `phone`, `nickname`, `level`, `is_store`, `invite_total`, `level_arrive_at`, `level_expire_at`, `create_at`, `update_at`, `last_login_at`, `delete_at`, `state`, `last_login_ip`, `register_ip`, `is_fake`, `is_marketer`, `can_change_lv`, `is_pop`, `is_not_add_moments`, `zone`, `sale_phone`, `platform`, `import_fin_total`, `fin_total` FROM `user` WHERE (uid = ?) LIMIT 1 [21702] - 28.1739ms +[xorm] [info] 2024/09/10 18:02:32.300649 [SQL] SELECT `uid`, `arkid_uid`, `parent_uid`, `arkid_token`, `avatar_url`, `custom_invite_code`, `invite_code`, `gender`, `birthday`, `acc_wx_id`, `acc_wx_openid`, `acc_taobao_nickname`, `acc_taobao_auth_time`, `acc_taobao_share_id`, `acc_taobao_self_id`, `acc_jd_self_id`, `acc_jd_share_id`, `acc_jd_free_id`, `acc_jd_cloud_id`, `acc_suning_self_id`, `acc_suning_share_id`, `acc_suning_free_id`, `acc_pdd_self_id`, `acc_pdd_cloud_id`, `acc_pdd_share_id`, `acc_pdd_free_id`, `acc_pdd_bind`, `acc_vip_self_id`, `acc_vip_share_id`, `acc_vip_free_id`, `acc_kaola_self_id`, `acc_kaola_share_id`, `acc_kaola_free_id`, `acc_duomai_share_id`, `acc_alipay`, `acc_alipay_real_name`, `cert_time`, `cert_name`, `cert_num`, `cert_state`, `fin_commission`, `fin_valid`, `fin_invalid`, `fin_self_order_count`, `fin_self_order_count_done`, `fin_self_rebate`, `fin_total`, `lat`, `lng`, `memo`, `qq`, `is_new`, `is_verify`, `is_ordered`, `from_way`, `hid_order`, `hid_contact`, `new_msg_notice`, `wx_account`, `wx_qrcode`, `third_party_taobao_oid`, `third_party_taobao_sid`, `third_party_taobao_acctoken`, `third_party_taobao_authcode`, `third_party_apple_token`, `third_party_qq_access_token`, `third_party_qq_expires_in`, `third_party_qq_openid`, `third_party_qq_unionid`, `third_party_wechat_expires_in`, `third_party_wechat_openid`, `third_party_wechat_unionid`, `third_party_wechat_mini_openid`, `third_party_wechat_h5_openid`, `free_remain_time`, `free_cumulative_time`, `second_free_remain_time`, `second_free_cumulative_time`, `third_free_remain_time`, `third_free_cumulative_time`, `is_delete`, `update_at`, `is_set`, `is_old`, `run_verify_time`, `task_id`, `task_type` FROM `user_profile` WHERE (uid = ?) LIMIT 1 [21702] - 29.8459ms +[xorm] [info] 2024/09/10 18:02:32.329124 [SQL] SELECT `id`, `benefit_ids`, `level_name`, `level_weight`, `level_update_condition`, `auto_audit`, `auto_update`, `level_date`, `is_use`, `choosable_num`, `before_hide`, `label`, `memo`, `css_set`, `create_at` FROM `user_level` WHERE (id = ?) LIMIT 1 [1] - 27.9698ms +[xorm] [info] 2024/09/10 18:02:32.343202 [SQL] select *,sqrt( ( (( 0.000000 - lng)*PI()*12656*cos((( 0.000000 +lat)/2)*PI()/180)/180) * (( 0.000000 - lng)*PI()*12656*cos (((0.000000+lat)/2)*PI()/180)/180) ) + ( ((0.000000-lat)*PI()*12656/180) * ((0.000000-lat)*PI()*12656/180) ) ) AS km from community_team_store where 1=1 and store_type=0 order by fan desc,km asc,id asc limit 0,10 [] - 13.7449ms +[xorm] [info] 2024/09/10 18:02:32.372189 [SQL] SELECT count(*) FROM `community_team_store_like` WHERE (uid=? and store_id=?) [21702 1] - 28.5323ms diff --git a/tmp/init_es.log b/tmp/init_es.log new file mode 100644 index 0000000..74831b0 --- /dev/null +++ b/tmp/init_es.log @@ -0,0 +1,16 @@ +[2024-09-04 14:06:39] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-06 11:25:58] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-06 11:26:17] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-06 12:02:45] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:27:08] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:36:10] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:37:01] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:37:30] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:37:57] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:38:51] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:39:50] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:53:05] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:57:38] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:57:45] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 17:58:46] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} +[2024-09-10 18:01:29] {"Url":"http://120.55.48.175:9200","User":"elastic","Pwd":"fnuo123"} diff --git a/tmp/init_rabbit_mq.log b/tmp/init_rabbit_mq.log new file mode 100644 index 0000000..1ce9a9f --- /dev/null +++ b/tmp/init_rabbit_mq.log @@ -0,0 +1,16 @@ +[2024-09-04 14:06:38] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-06 11:25:56] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-06 11:26:16] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-06 12:02:44] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:27:07] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:36:09] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:37:00] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:37:29] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:37:56] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:38:50] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:39:48] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:53:04] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:57:37] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:57:44] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 17:58:45] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} +[2024-09-10 18:01:27] {"Host":"116.62.62.35","Port":"5672","User":"zhios","Pwd":"ZHIoscnfnuo123"} diff --git a/tmp/zyos_website.log b/tmp/zyos_website.log new file mode 100644 index 0000000..8db1976 --- /dev/null +++ b/tmp/zyos_website.log @@ -0,0 +1,4114 @@ +[xorm] [info] 2024/09/04 14:06:39.634502 PING DATABASE mysql +[xorm] [info] 2024/09/04 14:06:39.681132 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 29.7724ms +[xorm] [info] 2024/09/04 14:06:39.714212 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 32.1402ms +[xorm] [info] 2024/09/04 14:08:39.874569 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.2046ms +[xorm] [info] 2024/09/04 14:10:39.880692 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6087ms +[xorm] [info] 2024/09/04 14:12:39.890534 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6474ms +[xorm] [info] 2024/09/04 14:14:39.874136 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3066ms +[xorm] [info] 2024/09/04 14:16:39.883677 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0992ms +[xorm] [info] 2024/09/04 14:18:39.881295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6501ms +[xorm] [info] 2024/09/04 14:20:39.878442 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.2507ms +[xorm] [info] 2024/09/04 14:22:39.875662 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5246ms +[xorm] [info] 2024/09/04 14:24:39.870345 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8048ms +[xorm] [info] 2024/09/04 14:26:40.389020 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 593.3738ms +[xorm] [info] 2024/09/04 14:28:39.868954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0707ms +[xorm] [info] 2024/09/04 14:30:39.890162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.5297ms +[xorm] [info] 2024/09/04 14:32:39.896992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.7577ms +[xorm] [info] 2024/09/04 14:34:39.874163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.2453ms +[xorm] [info] 2024/09/04 14:36:39.869162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6345ms +[xorm] [info] 2024/09/04 14:38:39.874146 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9829ms +[xorm] [info] 2024/09/04 14:40:39.856592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.1776ms +[xorm] [info] 2024/09/04 14:42:39.908245 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 108.3505ms +[xorm] [info] 2024/09/04 14:44:39.878023 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.9644ms +[xorm] [info] 2024/09/04 14:46:39.891775 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1738ms +[xorm] [info] 2024/09/04 14:48:39.870981 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1105ms +[xorm] [info] 2024/09/04 14:50:39.875844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8436ms +[xorm] [info] 2024/09/04 14:52:39.878946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8153ms +[xorm] [info] 2024/09/04 14:54:39.889559 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7501ms +[xorm] [info] 2024/09/04 14:56:39.881548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9209ms +[xorm] [info] 2024/09/04 14:58:39.865860 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5434ms +[xorm] [info] 2024/09/04 15:00:39.864965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7691ms +[xorm] [info] 2024/09/04 15:02:39.889051 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5769ms +[xorm] [info] 2024/09/04 15:04:39.884951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.3613ms +[xorm] [info] 2024/09/04 15:06:39.891480 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.1283ms +[xorm] [info] 2024/09/04 15:08:39.863754 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.1479ms +[xorm] [info] 2024/09/04 15:10:39.877971 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2755ms +[xorm] [info] 2024/09/04 15:12:39.876609 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8039ms +[xorm] [info] 2024/09/04 15:14:39.866597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.536ms +[xorm] [info] 2024/09/04 15:16:39.864349 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7292ms +[xorm] [info] 2024/09/04 15:18:39.892737 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7444ms +[xorm] [info] 2024/09/04 15:20:39.897968 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.5844ms +[xorm] [info] 2024/09/04 15:22:39.876118 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4926ms +[xorm] [info] 2024/09/04 15:24:39.886053 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6584ms +[xorm] [info] 2024/09/04 15:26:39.878297 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1035ms +[xorm] [info] 2024/09/04 15:28:39.880746 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0153ms +[xorm] [info] 2024/09/04 15:30:39.880317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0672ms +[xorm] [info] 2024/09/04 15:32:39.871896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9136ms +[xorm] [info] 2024/09/04 15:34:39.872466 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8301ms +[xorm] [info] 2024/09/04 15:36:39.867993 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0817ms +[xorm] [info] 2024/09/04 15:38:39.903502 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1283ms +[xorm] [info] 2024/09/04 15:40:39.875080 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6677ms +[xorm] [info] 2024/09/04 15:42:39.940723 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 141.6801ms +[xorm] [info] 2024/09/04 15:44:39.876718 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2331ms +[xorm] [info] 2024/09/04 15:46:39.871264 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5587ms +[xorm] [info] 2024/09/04 15:48:39.872087 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8098ms +[xorm] [info] 2024/09/04 15:50:39.876810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1461ms +[xorm] [info] 2024/09/04 15:52:39.874403 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9065ms +[xorm] [info] 2024/09/04 15:54:39.884649 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9393ms +[xorm] [info] 2024/09/04 15:56:39.864288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1596ms +[xorm] [info] 2024/09/04 15:58:39.882256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.678ms +[xorm] [info] 2024/09/04 16:00:39.917395 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 113.8808ms +[xorm] [info] 2024/09/04 16:02:39.862580 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8911ms +[xorm] [info] 2024/09/04 16:04:39.875050 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.615ms +[xorm] [info] 2024/09/04 16:06:39.873592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5517ms +[xorm] [info] 2024/09/04 16:08:39.879287 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8278ms +[xorm] [info] 2024/09/04 16:10:39.877485 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3239ms +[xorm] [info] 2024/09/04 16:12:39.895590 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4767ms +[xorm] [info] 2024/09/04 16:14:39.876852 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5546ms +[xorm] [info] 2024/09/04 16:16:39.874772 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4798ms +[xorm] [info] 2024/09/04 16:18:39.869487 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5535ms +[xorm] [info] 2024/09/04 16:20:39.874486 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0775ms +[xorm] [info] 2024/09/04 16:22:39.866642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1052ms +[xorm] [info] 2024/09/04 16:24:39.866774 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2232ms +[xorm] [info] 2024/09/04 16:26:39.888472 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1887ms +[xorm] [info] 2024/09/04 16:28:39.884758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.2579ms +[xorm] [info] 2024/09/04 16:30:39.892761 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2519ms +[xorm] [info] 2024/09/04 16:32:39.867120 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7269ms +[xorm] [info] 2024/09/04 16:34:39.927612 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 126.3313ms +[xorm] [info] 2024/09/04 16:36:39.878849 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0059ms +[xorm] [info] 2024/09/04 16:38:39.879964 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5092ms +[xorm] [info] 2024/09/04 16:40:39.889664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1549ms +[xorm] [info] 2024/09/04 16:42:39.864942 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3457ms +[xorm] [info] 2024/09/04 16:44:39.883416 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.866ms +[xorm] [info] 2024/09/04 16:46:39.878210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6849ms +[xorm] [info] 2024/09/04 16:48:39.874998 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3959ms +[xorm] [info] 2024/09/04 16:50:39.887288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5371ms +[xorm] [info] 2024/09/04 16:52:39.888324 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9855ms +[xorm] [info] 2024/09/04 16:54:39.898345 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 103.1534ms +[xorm] [info] 2024/09/04 16:56:39.872972 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5342ms +[xorm] [info] 2024/09/04 16:58:39.886187 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4821ms +[xorm] [info] 2024/09/04 17:00:39.889597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 97.7258ms +[xorm] [info] 2024/09/04 17:02:39.885511 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.8988ms +[xorm] [info] 2024/09/04 17:04:39.881721 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2456ms +[xorm] [info] 2024/09/04 17:06:39.868976 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.9986ms +[xorm] [info] 2024/09/04 17:08:39.895725 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.6245ms +[xorm] [info] 2024/09/04 17:10:39.895505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.9404ms +[xorm] [info] 2024/09/04 17:12:39.876542 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7617ms +[xorm] [info] 2024/09/04 17:14:39.884293 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0332ms +[xorm] [info] 2024/09/04 17:16:39.888629 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4162ms +[xorm] [info] 2024/09/04 17:18:39.877606 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7243ms +[xorm] [info] 2024/09/04 17:20:39.884674 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1586ms +[xorm] [info] 2024/09/04 17:22:39.886604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.1661ms +[xorm] [info] 2024/09/04 17:24:39.893775 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 98.4437ms +[xorm] [info] 2024/09/04 17:26:39.915689 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 117.4633ms +[xorm] [info] 2024/09/04 17:28:39.866954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.793ms +[xorm] [info] 2024/09/04 17:30:39.874209 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2409ms +[xorm] [info] 2024/09/04 17:32:39.859857 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7114ms +[xorm] [info] 2024/09/04 17:34:39.888796 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.5572ms +[xorm] [info] 2024/09/04 17:36:39.880223 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9047ms +[xorm] [info] 2024/09/04 17:38:39.888181 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6979ms +[xorm] [info] 2024/09/04 17:40:39.890852 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6304ms +[xorm] [info] 2024/09/04 17:42:39.922902 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 122.6685ms +[xorm] [info] 2024/09/04 17:44:39.860292 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.4639ms +[xorm] [info] 2024/09/04 17:46:39.872743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5786ms +[xorm] [info] 2024/09/04 17:48:39.865792 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7493ms +[xorm] [info] 2024/09/04 17:50:39.879196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1292ms +[xorm] [info] 2024/09/04 17:52:39.864121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5169ms +[xorm] [info] 2024/09/04 17:54:39.873138 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8837ms +[xorm] [info] 2024/09/04 17:56:39.883653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3929ms +[xorm] [info] 2024/09/04 17:58:39.870428 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4442ms +[xorm] [info] 2024/09/04 18:00:39.875189 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8706ms +[xorm] [info] 2024/09/04 18:02:39.867482 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4402ms +[xorm] [info] 2024/09/04 18:04:39.873517 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0811ms +[xorm] [info] 2024/09/04 18:06:39.869754 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2041ms +[xorm] [info] 2024/09/04 18:08:39.873995 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.169ms +[xorm] [info] 2024/09/04 18:10:39.871054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7264ms +[xorm] [info] 2024/09/04 18:12:39.873105 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7547ms +[xorm] [info] 2024/09/04 18:14:39.890569 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0508ms +[xorm] [info] 2024/09/04 18:16:39.876185 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6814ms +[xorm] [info] 2024/09/04 18:18:39.858326 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0222ms +[xorm] [info] 2024/09/04 18:20:39.877638 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9562ms +[xorm] [info] 2024/09/04 18:22:39.888043 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5427ms +[xorm] [info] 2024/09/04 18:24:39.859350 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 65.543ms +[xorm] [info] 2024/09/04 18:26:39.883299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2228ms +[xorm] [info] 2024/09/04 18:28:39.865508 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.9045ms +[xorm] [info] 2024/09/04 18:30:39.877127 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8372ms +[xorm] [info] 2024/09/04 18:32:39.872695 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6714ms +[xorm] [info] 2024/09/04 18:34:39.869593 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1626ms +[xorm] [info] 2024/09/04 18:36:39.869905 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9922ms +[xorm] [info] 2024/09/04 18:38:39.864722 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4042ms +[xorm] [info] 2024/09/04 18:40:39.886934 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5635ms +[xorm] [info] 2024/09/04 18:42:39.881943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0844ms +[xorm] [info] 2024/09/04 18:44:39.861939 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5395ms +[xorm] [info] 2024/09/04 18:46:39.868627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5169ms +[xorm] [info] 2024/09/04 18:48:39.873834 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2659ms +[xorm] [info] 2024/09/04 18:50:39.878266 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.697ms +[xorm] [info] 2024/09/04 18:52:39.878210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8665ms +[xorm] [info] 2024/09/04 18:54:39.869872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3527ms +[xorm] [info] 2024/09/04 18:56:39.880886 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5117ms +[xorm] [info] 2024/09/04 18:58:39.870779 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3595ms +[xorm] [info] 2024/09/04 19:00:39.885122 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.5173ms +[xorm] [info] 2024/09/04 19:02:39.872055 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.747ms +[xorm] [info] 2024/09/04 19:04:39.885423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1277ms +[xorm] [info] 2024/09/04 19:06:39.873638 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9676ms +[xorm] [info] 2024/09/04 19:08:39.863543 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.8089ms +[xorm] [info] 2024/09/04 19:10:39.874634 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8524ms +[xorm] [info] 2024/09/04 19:12:39.876464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1062ms +[xorm] [info] 2024/09/04 19:14:39.863368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7702ms +[xorm] [info] 2024/09/04 19:16:39.875466 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3384ms +[xorm] [info] 2024/09/04 19:18:39.871877 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.636ms +[xorm] [info] 2024/09/04 19:20:39.876666 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3842ms +[xorm] [info] 2024/09/04 19:22:39.867842 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5728ms +[xorm] [info] 2024/09/04 19:24:39.878893 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.065ms +[xorm] [info] 2024/09/04 19:26:39.875431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8465ms +[xorm] [info] 2024/09/04 19:28:39.893566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 97.7518ms +[xorm] [info] 2024/09/04 19:30:39.877295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7238ms +[xorm] [info] 2024/09/04 19:32:39.863166 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7105ms +[xorm] [info] 2024/09/04 19:34:39.878739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.726ms +[xorm] [info] 2024/09/04 19:36:39.865449 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6653ms +[xorm] [info] 2024/09/04 19:38:39.875943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3738ms +[xorm] [info] 2024/09/04 19:40:39.881425 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8177ms +[xorm] [info] 2024/09/04 19:42:39.873735 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6591ms +[xorm] [info] 2024/09/04 19:44:39.886993 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.247ms +[xorm] [info] 2024/09/04 19:46:39.873296 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9461ms +[xorm] [info] 2024/09/04 19:48:39.890281 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.2159ms +[xorm] [info] 2024/09/04 19:50:39.876766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3615ms +[xorm] [info] 2024/09/04 19:52:39.870685 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7881ms +[xorm] [info] 2024/09/04 19:54:39.879843 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8186ms +[xorm] [info] 2024/09/04 19:56:39.887897 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.8828ms +[xorm] [info] 2024/09/04 19:58:39.871308 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1714ms +[xorm] [info] 2024/09/04 20:00:39.876710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6469ms +[xorm] [info] 2024/09/04 20:02:39.868095 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0042ms +[xorm] [info] 2024/09/04 20:04:39.873596 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6732ms +[xorm] [info] 2024/09/04 20:06:39.891091 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8917ms +[xorm] [info] 2024/09/04 20:08:39.887660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.624ms +[xorm] [info] 2024/09/04 20:10:39.855203 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.5025ms +[xorm] [info] 2024/09/04 20:12:39.888308 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.978ms +[xorm] [info] 2024/09/04 20:14:39.872892 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2582ms +[xorm] [info] 2024/09/04 20:16:39.879360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9205ms +[xorm] [info] 2024/09/04 20:18:39.894046 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1802ms +[xorm] [info] 2024/09/04 20:20:39.871384 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9988ms +[xorm] [info] 2024/09/04 20:22:39.879007 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1077ms +[xorm] [info] 2024/09/04 20:24:39.867322 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1982ms +[xorm] [info] 2024/09/04 20:26:39.882546 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1968ms +[xorm] [info] 2024/09/04 20:28:39.870331 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4103ms +[xorm] [info] 2024/09/04 20:30:39.872811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4386ms +[xorm] [info] 2024/09/04 20:32:39.874184 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3574ms +[xorm] [info] 2024/09/04 20:34:39.878481 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7796ms +[xorm] [info] 2024/09/04 20:36:39.874071 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4489ms +[xorm] [info] 2024/09/04 20:38:39.881193 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1923ms +[xorm] [info] 2024/09/04 20:40:39.880662 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3652ms +[xorm] [info] 2024/09/04 20:42:39.878904 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.8897ms +[xorm] [info] 2024/09/04 20:44:39.882741 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2349ms +[xorm] [info] 2024/09/04 20:46:39.863096 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.8922ms +[xorm] [info] 2024/09/04 20:48:39.883131 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7058ms +[xorm] [info] 2024/09/04 20:50:39.874744 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2612ms +[xorm] [info] 2024/09/04 20:52:39.874159 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6746ms +[xorm] [info] 2024/09/04 20:54:39.884416 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.7339ms +[xorm] [info] 2024/09/04 20:56:39.865203 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4225ms +[xorm] [info] 2024/09/04 20:58:39.873807 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4554ms +[xorm] [info] 2024/09/04 21:00:39.878392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4782ms +[xorm] [info] 2024/09/04 21:02:39.881183 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6839ms +[xorm] [info] 2024/09/04 21:04:39.881572 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5504ms +[xorm] [info] 2024/09/04 21:06:39.873357 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3665ms +[xorm] [info] 2024/09/04 21:08:39.884250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8109ms +[xorm] [info] 2024/09/04 21:10:39.876317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8423ms +[xorm] [info] 2024/09/04 21:12:39.858864 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.6345ms +[xorm] [info] 2024/09/04 21:14:39.871100 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6236ms +[xorm] [info] 2024/09/04 21:16:39.868099 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1286ms +[xorm] [info] 2024/09/04 21:18:39.864576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9247ms +[xorm] [info] 2024/09/04 21:20:39.886557 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2236ms +[xorm] [info] 2024/09/04 21:22:39.861256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.3714ms +[xorm] [info] 2024/09/04 21:24:39.873071 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9324ms +[xorm] [info] 2024/09/04 21:26:39.874062 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1057ms +[xorm] [info] 2024/09/04 21:28:39.887894 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2509ms +[xorm] [info] 2024/09/04 21:30:39.868814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5462ms +[xorm] [info] 2024/09/04 21:32:39.869872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.7098ms +[xorm] [info] 2024/09/04 21:34:39.861947 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.9256ms +[xorm] [info] 2024/09/04 21:36:39.867464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.3443ms +[xorm] [info] 2024/09/04 21:38:39.863106 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6143ms +[xorm] [info] 2024/09/04 21:40:39.860826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5253ms +[xorm] [info] 2024/09/04 21:42:39.866237 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3166ms +[xorm] [info] 2024/09/04 21:44:39.863350 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0858ms +[xorm] [info] 2024/09/04 21:46:39.875885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7888ms +[xorm] [info] 2024/09/04 21:48:39.875005 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.348ms +[xorm] [info] 2024/09/04 21:50:39.888845 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8898ms +[xorm] [info] 2024/09/04 21:52:39.872054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1123ms +[xorm] [info] 2024/09/04 21:54:39.868814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0273ms +[xorm] [info] 2024/09/04 21:56:39.880470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.444ms +[xorm] [info] 2024/09/04 21:58:39.882322 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.4533ms +[xorm] [info] 2024/09/04 22:00:39.891464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6292ms +[xorm] [info] 2024/09/04 22:02:39.874273 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8607ms +[xorm] [info] 2024/09/04 22:04:39.877477 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6821ms +[xorm] [info] 2024/09/04 22:06:39.866878 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0979ms +[xorm] [info] 2024/09/04 22:08:39.882058 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7273ms +[xorm] [info] 2024/09/04 22:10:39.869030 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1662ms +[xorm] [info] 2024/09/04 22:12:39.879387 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9627ms +[xorm] [info] 2024/09/04 22:14:39.888250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.3966ms +[xorm] [info] 2024/09/04 22:16:39.871046 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4154ms +[xorm] [info] 2024/09/04 22:18:39.886703 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.242ms +[xorm] [info] 2024/09/04 22:20:39.868917 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8335ms +[xorm] [info] 2024/09/04 22:22:39.874430 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5695ms +[xorm] [info] 2024/09/04 22:24:39.885564 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0873ms +[xorm] [info] 2024/09/04 22:26:39.876991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.5171ms +[xorm] [info] 2024/09/04 22:28:39.876581 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.8523ms +[xorm] [info] 2024/09/04 22:30:39.861710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.7019ms +[xorm] [info] 2024/09/04 22:32:39.862793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.2266ms +[xorm] [info] 2024/09/04 22:34:39.856311 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.9835ms +[xorm] [info] 2024/09/04 22:36:39.870538 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1122ms +[xorm] [info] 2024/09/04 22:38:39.873347 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6686ms +[xorm] [info] 2024/09/04 22:40:39.867965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9954ms +[xorm] [info] 2024/09/04 22:42:39.867210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3558ms +[xorm] [info] 2024/09/04 22:44:39.866135 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0506ms +[xorm] [info] 2024/09/04 22:46:39.874229 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.404ms +[xorm] [info] 2024/09/04 22:48:39.866283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.2662ms +[xorm] [info] 2024/09/04 22:50:39.875548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.2991ms +[xorm] [info] 2024/09/04 22:52:39.862081 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.613ms +[xorm] [info] 2024/09/04 22:54:39.872557 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9145ms +[xorm] [info] 2024/09/04 22:56:39.875042 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9395ms +[xorm] [info] 2024/09/04 22:58:39.888120 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7746ms +[xorm] [info] 2024/09/04 23:00:39.865486 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3985ms +[xorm] [info] 2024/09/04 23:02:39.890547 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2535ms +[xorm] [info] 2024/09/04 23:04:39.874337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2438ms +[xorm] [info] 2024/09/04 23:06:39.883333 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0316ms +[xorm] [info] 2024/09/04 23:08:39.888892 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6351ms +[xorm] [info] 2024/09/04 23:10:39.885963 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0494ms +[xorm] [info] 2024/09/04 23:12:39.868969 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0243ms +[xorm] [info] 2024/09/04 23:14:39.868872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3739ms +[xorm] [info] 2024/09/04 23:16:39.867969 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8811ms +[xorm] [info] 2024/09/04 23:18:39.870936 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0686ms +[xorm] [info] 2024/09/04 23:20:39.862883 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4625ms +[xorm] [info] 2024/09/04 23:22:39.869069 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4997ms +[xorm] [info] 2024/09/04 23:24:39.882443 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9499ms +[xorm] [info] 2024/09/04 23:26:39.877625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0863ms +[xorm] [info] 2024/09/04 23:28:39.878556 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1871ms +[xorm] [info] 2024/09/04 23:30:39.866943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8174ms +[xorm] [info] 2024/09/04 23:32:39.894127 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4589ms +[xorm] [info] 2024/09/04 23:34:39.867809 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5041ms +[xorm] [info] 2024/09/04 23:36:39.867762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5546ms +[xorm] [info] 2024/09/04 23:38:39.875785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1145ms +[xorm] [info] 2024/09/04 23:40:39.871167 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.917ms +[xorm] [info] 2024/09/04 23:42:39.880447 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7212ms +[xorm] [info] 2024/09/04 23:44:39.872135 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6915ms +[xorm] [info] 2024/09/04 23:46:39.870353 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9626ms +[xorm] [info] 2024/09/04 23:48:39.889045 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9479ms +[xorm] [info] 2024/09/04 23:50:39.863098 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3127ms +[xorm] [info] 2024/09/04 23:52:39.862895 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6198ms +[xorm] [info] 2024/09/04 23:54:39.872548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1594ms +[xorm] [info] 2024/09/04 23:56:39.863344 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7809ms +[xorm] [info] 2024/09/04 23:58:39.864808 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6592ms +[xorm] [info] 2024/09/05 00:00:39.875457 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0438ms +[xorm] [info] 2024/09/05 00:02:39.871085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0875ms +[xorm] [info] 2024/09/05 00:04:39.874933 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7325ms +[xorm] [info] 2024/09/05 00:06:39.868041 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7543ms +[xorm] [info] 2024/09/05 00:08:39.867682 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9324ms +[xorm] [info] 2024/09/05 00:10:39.878987 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0914ms +[xorm] [info] 2024/09/05 00:12:39.882299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4886ms +[xorm] [info] 2024/09/05 00:14:39.873147 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7711ms +[xorm] [info] 2024/09/05 00:16:39.885597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1454ms +[xorm] [info] 2024/09/05 00:18:39.888180 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7877ms +[xorm] [info] 2024/09/05 00:20:39.891426 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.1234ms +[xorm] [info] 2024/09/05 00:22:39.874594 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4545ms +[xorm] [info] 2024/09/05 00:24:39.869593 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.301ms +[xorm] [info] 2024/09/05 00:26:39.890832 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3465ms +[xorm] [info] 2024/09/05 00:28:39.884576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9719ms +[xorm] [info] 2024/09/05 00:30:39.890190 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0237ms +[xorm] [info] 2024/09/05 00:32:39.892374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1772ms +[xorm] [info] 2024/09/05 00:34:39.878728 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2419ms +[xorm] [info] 2024/09/05 00:36:39.873909 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8899ms +[xorm] [info] 2024/09/05 00:38:39.888430 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8026ms +[xorm] [info] 2024/09/05 00:40:39.872363 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.2104ms +[xorm] [info] 2024/09/05 00:42:39.869011 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8565ms +[xorm] [info] 2024/09/05 00:44:39.866515 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5204ms +[xorm] [info] 2024/09/05 00:46:39.872882 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8125ms +[xorm] [info] 2024/09/05 00:48:39.872112 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.2979ms +[xorm] [info] 2024/09/05 00:50:39.872143 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5263ms +[xorm] [info] 2024/09/05 00:52:39.869235 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1287ms +[xorm] [info] 2024/09/05 00:54:39.877584 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.729ms +[xorm] [info] 2024/09/05 00:56:39.883620 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9704ms +[xorm] [info] 2024/09/05 00:58:39.858450 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.8675ms +[xorm] [info] 2024/09/05 01:00:39.862180 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6925ms +[xorm] [info] 2024/09/05 01:02:39.925834 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 130.4318ms +[xorm] [info] 2024/09/05 01:04:39.880769 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6178ms +[xorm] [info] 2024/09/05 01:06:39.873090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2665ms +[xorm] [info] 2024/09/05 01:08:39.891757 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1108ms +[xorm] [info] 2024/09/05 01:10:39.889326 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.0529ms +[xorm] [info] 2024/09/05 01:12:39.865674 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8389ms +[xorm] [info] 2024/09/05 01:14:39.880110 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4159ms +[xorm] [info] 2024/09/05 01:16:39.859243 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.357ms +[xorm] [info] 2024/09/05 01:18:39.881054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0767ms +[xorm] [info] 2024/09/05 01:20:39.864949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6723ms +[xorm] [info] 2024/09/05 01:22:39.863861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6489ms +[xorm] [info] 2024/09/05 01:24:39.881382 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1709ms +[xorm] [info] 2024/09/05 01:26:39.874319 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.073ms +[xorm] [info] 2024/09/05 01:28:39.886743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6744ms +[xorm] [info] 2024/09/05 01:30:39.886768 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9768ms +[xorm] [info] 2024/09/05 01:32:39.879281 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0496ms +[xorm] [info] 2024/09/05 01:34:39.875816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1883ms +[xorm] [info] 2024/09/05 01:36:39.875505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0237ms +[xorm] [info] 2024/09/05 01:38:39.867131 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3379ms +[xorm] [info] 2024/09/05 01:40:39.872600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1412ms +[xorm] [info] 2024/09/05 01:42:39.873520 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9974ms +[xorm] [info] 2024/09/05 01:44:39.877810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7131ms +[xorm] [info] 2024/09/05 01:46:39.871276 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1951ms +[xorm] [info] 2024/09/05 01:48:39.878283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7192ms +[xorm] [info] 2024/09/05 01:50:39.865536 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5998ms +[xorm] [info] 2024/09/05 01:52:39.871373 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8861ms +[xorm] [info] 2024/09/05 01:54:39.878646 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5618ms +[xorm] [info] 2024/09/05 01:56:39.862954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0404ms +[xorm] [info] 2024/09/05 01:58:39.869218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1662ms +[xorm] [info] 2024/09/05 02:00:39.893217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0802ms +[xorm] [info] 2024/09/05 02:02:39.878757 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2512ms +[xorm] [info] 2024/09/05 02:04:39.871752 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3854ms +[xorm] [info] 2024/09/05 02:06:39.873210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5572ms +[xorm] [info] 2024/09/05 02:08:39.886729 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4378ms +[xorm] [info] 2024/09/05 02:10:39.880003 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0144ms +[xorm] [info] 2024/09/05 02:12:39.866785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8428ms +[xorm] [info] 2024/09/05 02:14:39.871068 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7548ms +[xorm] [info] 2024/09/05 02:16:39.871878 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4925ms +[xorm] [info] 2024/09/05 02:18:39.877181 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7139ms +[xorm] [info] 2024/09/05 02:20:39.871683 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9557ms +[xorm] [info] 2024/09/05 02:22:39.867053 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2108ms +[xorm] [info] 2024/09/05 02:24:39.870772 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8052ms +[xorm] [info] 2024/09/05 02:26:39.889874 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6228ms +[xorm] [info] 2024/09/05 02:28:39.876864 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6859ms +[xorm] [info] 2024/09/05 02:30:39.887868 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.971ms +[xorm] [info] 2024/09/05 02:32:39.883899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9962ms +[xorm] [info] 2024/09/05 02:34:39.876745 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.094ms +[xorm] [info] 2024/09/05 02:36:39.870592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.6337ms +[xorm] [info] 2024/09/05 02:38:39.892775 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4692ms +[xorm] [info] 2024/09/05 02:40:39.889684 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2854ms +[xorm] [info] 2024/09/05 02:42:39.878913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0914ms +[xorm] [info] 2024/09/05 02:44:39.866731 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1434ms +[xorm] [info] 2024/09/05 02:46:39.879118 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4ms +[xorm] [info] 2024/09/05 02:48:39.870592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5019ms +[xorm] [info] 2024/09/05 02:50:39.868494 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8926ms +[xorm] [info] 2024/09/05 02:52:39.882750 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3228ms +[xorm] [info] 2024/09/05 02:54:39.875290 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9196ms +[xorm] [info] 2024/09/05 02:56:39.869842 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4484ms +[xorm] [info] 2024/09/05 02:58:39.859363 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7718ms +[xorm] [info] 2024/09/05 03:00:39.888043 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3221ms +[xorm] [info] 2024/09/05 03:02:39.882198 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.55ms +[xorm] [info] 2024/09/05 03:04:39.885307 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.55ms +[xorm] [info] 2024/09/05 03:06:39.876565 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9194ms +[xorm] [info] 2024/09/05 03:08:39.871407 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6948ms +[xorm] [info] 2024/09/05 03:10:39.867068 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.68ms +[xorm] [info] 2024/09/05 03:12:39.862547 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0613ms +[xorm] [info] 2024/09/05 03:14:39.867476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9717ms +[xorm] [info] 2024/09/05 03:16:39.872075 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2459ms +[xorm] [info] 2024/09/05 03:18:39.879455 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0482ms +[xorm] [info] 2024/09/05 03:20:39.872527 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2184ms +[xorm] [info] 2024/09/05 03:22:39.874284 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2958ms +[xorm] [info] 2024/09/05 03:24:39.866291 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6461ms +[xorm] [info] 2024/09/05 03:26:39.873576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0061ms +[xorm] [info] 2024/09/05 03:28:39.867233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7936ms +[xorm] [info] 2024/09/05 03:30:39.865968 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3495ms +[xorm] [info] 2024/09/05 03:32:39.877663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7471ms +[xorm] [info] 2024/09/05 03:34:39.866747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5211ms +[xorm] [info] 2024/09/05 03:36:39.891001 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2425ms +[xorm] [info] 2024/09/05 03:38:39.880204 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6551ms +[xorm] [info] 2024/09/05 03:40:39.868258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6276ms +[xorm] [info] 2024/09/05 03:42:39.892504 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7217ms +[xorm] [info] 2024/09/05 03:44:39.889649 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.277ms +[xorm] [info] 2024/09/05 03:46:39.869873 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3658ms +[xorm] [info] 2024/09/05 03:48:39.883672 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7525ms +[xorm] [info] 2024/09/05 03:50:39.872507 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5827ms +[xorm] [info] 2024/09/05 03:52:39.861879 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1499ms +[xorm] [info] 2024/09/05 03:54:39.876992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2851ms +[xorm] [info] 2024/09/05 03:56:39.891072 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2904ms +[xorm] [info] 2024/09/05 03:58:39.888080 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0941ms +[xorm] [info] 2024/09/05 04:00:39.884982 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0784ms +[xorm] [info] 2024/09/05 04:02:39.874483 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3317ms +[xorm] [info] 2024/09/05 04:04:39.875066 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.098ms +[xorm] [info] 2024/09/05 04:06:39.880187 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4617ms +[xorm] [info] 2024/09/05 04:08:39.882355 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6378ms +[xorm] [info] 2024/09/05 04:10:39.882766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8274ms +[xorm] [info] 2024/09/05 04:12:39.863220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 65.0255ms +[xorm] [info] 2024/09/05 04:14:39.869740 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0256ms +[xorm] [info] 2024/09/05 04:16:39.884595 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7811ms +[xorm] [info] 2024/09/05 04:18:39.880079 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9566ms +[xorm] [info] 2024/09/05 04:20:39.878035 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.484ms +[xorm] [info] 2024/09/05 04:22:39.882515 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.331ms +[xorm] [info] 2024/09/05 04:24:39.886804 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6268ms +[xorm] [info] 2024/09/05 04:26:39.879282 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.104ms +[xorm] [info] 2024/09/05 04:28:39.862433 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8706ms +[xorm] [info] 2024/09/05 04:30:39.873626 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9949ms +[xorm] [info] 2024/09/05 04:32:39.872737 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2344ms +[xorm] [info] 2024/09/05 04:34:39.886699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9859ms +[xorm] [info] 2024/09/05 04:36:39.889635 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2684ms +[xorm] [info] 2024/09/05 04:38:39.861875 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5578ms +[xorm] [info] 2024/09/05 04:40:39.875476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4474ms +[xorm] [info] 2024/09/05 04:42:39.863465 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.813ms +[xorm] [info] 2024/09/05 04:44:39.877472 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5005ms +[xorm] [info] 2024/09/05 04:46:39.867423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1481ms +[xorm] [info] 2024/09/05 04:48:39.879217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0135ms +[xorm] [info] 2024/09/05 04:50:39.861476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2732ms +[xorm] [info] 2024/09/05 04:52:39.888170 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6607ms +[xorm] [info] 2024/09/05 04:54:39.859702 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.7659ms +[xorm] [info] 2024/09/05 04:56:39.872018 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7209ms +[xorm] [info] 2024/09/05 04:58:39.872090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7541ms +[xorm] [info] 2024/09/05 05:00:39.890543 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8779ms +[xorm] [info] 2024/09/05 05:02:39.878626 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7125ms +[xorm] [info] 2024/09/05 05:04:39.869468 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8745ms +[xorm] [info] 2024/09/05 05:06:39.878622 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4607ms +[xorm] [info] 2024/09/05 05:08:39.866401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3344ms +[xorm] [info] 2024/09/05 05:10:39.864761 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5164ms +[xorm] [info] 2024/09/05 05:12:39.871188 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5543ms +[xorm] [info] 2024/09/05 05:14:39.885345 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8805ms +[xorm] [info] 2024/09/05 05:16:39.889177 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4068ms +[xorm] [info] 2024/09/05 05:18:39.877440 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5882ms +[xorm] [info] 2024/09/05 05:20:39.879336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4444ms +[xorm] [info] 2024/09/05 05:22:39.871238 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0752ms +[xorm] [info] 2024/09/05 05:24:39.899960 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.2536ms +[xorm] [info] 2024/09/05 05:26:39.868154 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9076ms +[xorm] [info] 2024/09/05 05:28:39.865523 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0965ms +[xorm] [info] 2024/09/05 05:30:39.863630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.763ms +[xorm] [info] 2024/09/05 05:32:39.872849 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1523ms +[xorm] [info] 2024/09/05 05:34:39.893039 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.092ms +[xorm] [info] 2024/09/05 05:36:39.884464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8166ms +[xorm] [info] 2024/09/05 05:38:39.878529 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5213ms +[xorm] [info] 2024/09/05 05:40:39.893363 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5438ms +[xorm] [info] 2024/09/05 05:42:39.873695 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3635ms +[xorm] [info] 2024/09/05 05:44:39.866594 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4528ms +[xorm] [info] 2024/09/05 05:46:39.871660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8046ms +[xorm] [info] 2024/09/05 05:48:39.874708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8891ms +[xorm] [info] 2024/09/05 05:50:39.881436 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.779ms +[xorm] [info] 2024/09/05 05:52:39.885747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4464ms +[xorm] [info] 2024/09/05 05:54:39.880872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7651ms +[xorm] [info] 2024/09/05 05:56:39.859067 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.5082ms +[xorm] [info] 2024/09/05 05:58:39.864896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.5659ms +[xorm] [info] 2024/09/05 06:00:39.878787 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1873ms +[xorm] [info] 2024/09/05 06:02:39.868633 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0936ms +[xorm] [info] 2024/09/05 06:04:39.876372 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4738ms +[xorm] [info] 2024/09/05 06:06:39.883238 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6592ms +[xorm] [info] 2024/09/05 06:08:39.865886 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7674ms +[xorm] [info] 2024/09/05 06:10:39.864117 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.982ms +[xorm] [info] 2024/09/05 06:12:39.888522 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2362ms +[xorm] [info] 2024/09/05 06:14:39.884714 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5956ms +[xorm] [info] 2024/09/05 06:16:39.882417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4488ms +[xorm] [info] 2024/09/05 06:18:39.865793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.0606ms +[xorm] [info] 2024/09/05 06:20:39.873949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8189ms +[xorm] [info] 2024/09/05 06:22:39.873664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1693ms +[xorm] [info] 2024/09/05 06:24:39.873917 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3757ms +[xorm] [info] 2024/09/05 06:26:39.879231 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8217ms +[xorm] [info] 2024/09/05 06:28:39.895507 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.5601ms +[xorm] [info] 2024/09/05 06:30:39.871613 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8866ms +[xorm] [info] 2024/09/05 06:32:39.871913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.5295ms +[xorm] [info] 2024/09/05 06:34:39.870625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2813ms +[xorm] [info] 2024/09/05 06:36:39.865702 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3027ms +[xorm] [info] 2024/09/05 06:38:39.864560 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7282ms +[xorm] [info] 2024/09/05 06:40:39.871415 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.152ms +[xorm] [info] 2024/09/05 06:42:39.886709 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9711ms +[xorm] [info] 2024/09/05 06:44:39.878910 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.2017ms +[xorm] [info] 2024/09/05 06:46:39.876288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9844ms +[xorm] [info] 2024/09/05 06:48:39.864946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5928ms +[xorm] [info] 2024/09/05 06:50:39.878548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.619ms +[xorm] [info] 2024/09/05 06:52:39.887055 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5315ms +[xorm] [info] 2024/09/05 06:54:39.860137 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.7078ms +[xorm] [info] 2024/09/05 06:56:39.867104 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8316ms +[xorm] [info] 2024/09/05 06:58:39.872818 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9904ms +[xorm] [info] 2024/09/05 07:00:39.881855 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7093ms +[xorm] [info] 2024/09/05 07:02:39.874211 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8689ms +[xorm] [info] 2024/09/05 07:04:39.869712 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.12ms +[xorm] [info] 2024/09/05 07:06:39.874509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0958ms +[xorm] [info] 2024/09/05 07:08:39.877617 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.7214ms +[xorm] [info] 2024/09/05 07:10:39.890374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3221ms +[xorm] [info] 2024/09/05 07:12:39.873093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.217ms +[xorm] [info] 2024/09/05 07:14:39.872102 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6962ms +[xorm] [info] 2024/09/05 07:16:39.873904 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6989ms +[xorm] [info] 2024/09/05 07:18:39.863428 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7758ms +[xorm] [info] 2024/09/05 07:20:39.876285 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5637ms +[xorm] [info] 2024/09/05 07:22:39.878091 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6022ms +[xorm] [info] 2024/09/05 07:24:39.874140 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6961ms +[xorm] [info] 2024/09/05 07:26:39.872952 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3905ms +[xorm] [info] 2024/09/05 07:28:39.861791 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0842ms +[xorm] [info] 2024/09/05 07:30:39.866915 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0466ms +[xorm] [info] 2024/09/05 07:32:39.877986 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9943ms +[xorm] [info] 2024/09/05 07:34:39.877974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4437ms +[xorm] [info] 2024/09/05 07:36:39.884652 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3883ms +[xorm] [info] 2024/09/05 07:38:39.859445 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 65.6473ms +[xorm] [info] 2024/09/05 07:40:39.874307 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1766ms +[xorm] [info] 2024/09/05 07:42:39.885366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9897ms +[xorm] [info] 2024/09/05 07:44:39.863895 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2689ms +[xorm] [info] 2024/09/05 07:46:39.886811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3263ms +[xorm] [info] 2024/09/05 07:48:39.879908 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0971ms +[xorm] [info] 2024/09/05 07:50:39.881337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7886ms +[xorm] [info] 2024/09/05 07:52:39.873431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.191ms +[xorm] [info] 2024/09/05 07:54:39.882542 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8251ms +[xorm] [info] 2024/09/05 07:56:39.862275 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7103ms +[xorm] [info] 2024/09/05 07:58:39.875071 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4812ms +[xorm] [info] 2024/09/05 08:00:39.892390 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.478ms +[xorm] [info] 2024/09/05 08:02:39.876808 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1197ms +[xorm] [info] 2024/09/05 08:04:39.886866 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.822ms +[xorm] [info] 2024/09/05 08:06:39.861506 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.1783ms +[xorm] [info] 2024/09/05 08:08:39.883168 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7466ms +[xorm] [info] 2024/09/05 08:10:39.873391 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1624ms +[xorm] [info] 2024/09/05 08:12:39.883136 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8494ms +[xorm] [info] 2024/09/05 08:14:39.869600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1404ms +[xorm] [info] 2024/09/05 08:16:39.870655 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0408ms +[xorm] [info] 2024/09/05 08:18:39.875294 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.419ms +[xorm] [info] 2024/09/05 08:20:39.870423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.664ms +[xorm] [info] 2024/09/05 08:22:39.878938 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4853ms +[xorm] [info] 2024/09/05 08:24:39.867331 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8575ms +[xorm] [info] 2024/09/05 08:26:39.862628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4102ms +[xorm] [info] 2024/09/05 08:28:39.864775 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4509ms +[xorm] [info] 2024/09/05 08:30:39.884810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9217ms +[xorm] [info] 2024/09/05 08:32:39.866044 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.5924ms +[xorm] [info] 2024/09/05 08:34:39.877163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3092ms +[xorm] [info] 2024/09/05 08:36:39.882082 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7048ms +[xorm] [info] 2024/09/05 08:38:39.868112 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.61ms +[xorm] [info] 2024/09/05 08:40:39.881479 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7507ms +[xorm] [info] 2024/09/05 08:42:39.865627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4462ms +[xorm] [info] 2024/09/05 08:44:39.951900 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 153.6384ms +[xorm] [info] 2024/09/05 08:46:39.884801 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9072ms +[xorm] [info] 2024/09/05 08:48:39.872422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8281ms +[xorm] [info] 2024/09/05 08:50:39.871789 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.8776ms +[xorm] [info] 2024/09/05 08:52:39.865141 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8997ms +[xorm] [info] 2024/09/05 08:54:39.861558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4741ms +[xorm] [info] 2024/09/05 08:56:39.873595 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6482ms +[xorm] [info] 2024/09/05 08:58:39.887942 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6101ms +[xorm] [info] 2024/09/05 09:00:40.745497 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 951.9692ms +[xorm] [info] 2024/09/05 09:02:40.701599 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 908.1204ms +[xorm] [info] 2024/09/05 09:04:40.643794 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 842.9505ms +[xorm] [info] 2024/09/05 09:06:40.747211 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 944.9517ms +[xorm] [info] 2024/09/05 09:08:40.387933 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 589.433ms +[xorm] [info] 2024/09/05 09:10:39.858351 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 64.5824ms +[xorm] [info] 2024/09/05 09:12:39.875699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7478ms +[xorm] [info] 2024/09/05 09:14:39.880264 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3ms +[xorm] [info] 2024/09/05 09:16:39.893941 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.6695ms +[xorm] [info] 2024/09/05 09:18:39.876037 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7359ms +[xorm] [info] 2024/09/05 09:20:39.873528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.092ms +[xorm] [info] 2024/09/05 09:22:39.881474 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8172ms +[xorm] [info] 2024/09/05 09:24:39.890379 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7048ms +[xorm] [info] 2024/09/05 09:26:39.878167 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7574ms +[xorm] [info] 2024/09/05 09:28:39.859498 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7171ms +[xorm] [info] 2024/09/05 09:30:39.885164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2744ms +[xorm] [info] 2024/09/05 09:32:39.880844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3003ms +[xorm] [info] 2024/09/05 09:34:39.875006 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8208ms +[xorm] [info] 2024/09/05 09:36:39.872624 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8828ms +[xorm] [info] 2024/09/05 09:38:39.888344 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0441ms +[xorm] [info] 2024/09/05 09:40:39.872194 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3741ms +[xorm] [info] 2024/09/05 09:42:39.863258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6514ms +[xorm] [info] 2024/09/05 09:44:39.887460 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.6145ms +[xorm] [info] 2024/09/05 09:46:39.873606 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8234ms +[xorm] [info] 2024/09/05 09:48:39.872596 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3047ms +[xorm] [info] 2024/09/05 09:50:39.879266 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0815ms +[xorm] [info] 2024/09/05 09:52:39.869560 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5354ms +[xorm] [info] 2024/09/05 09:54:39.861856 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.727ms +[xorm] [info] 2024/09/05 09:56:39.868207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.323ms +[xorm] [info] 2024/09/05 09:58:39.915165 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 121.6968ms +[xorm] [info] 2024/09/05 10:00:39.879119 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7244ms +[xorm] [info] 2024/09/05 10:02:39.879536 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0966ms +[xorm] [info] 2024/09/05 10:04:39.865414 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.1159ms +[xorm] [info] 2024/09/05 10:06:39.869047 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.624ms +[xorm] [info] 2024/09/05 10:08:39.865903 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7847ms +[xorm] [info] 2024/09/05 10:10:39.878587 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.276ms +[xorm] [info] 2024/09/05 10:12:39.884948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6666ms +[xorm] [info] 2024/09/05 10:14:39.891650 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1561ms +[xorm] [info] 2024/09/05 10:16:39.885466 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7304ms +[xorm] [info] 2024/09/05 10:18:39.871869 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7013ms +[xorm] [info] 2024/09/05 10:20:39.872327 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.205ms +[xorm] [info] 2024/09/05 10:22:39.872242 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4735ms +[xorm] [info] 2024/09/05 10:24:39.888555 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5273ms +[xorm] [info] 2024/09/05 10:26:39.865063 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8102ms +[xorm] [info] 2024/09/05 10:28:39.877304 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6148ms +[xorm] [info] 2024/09/05 10:30:39.903231 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 109.4405ms +[xorm] [info] 2024/09/05 10:32:39.872485 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7867ms +[xorm] [info] 2024/09/05 10:34:39.868280 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7439ms +[xorm] [info] 2024/09/05 10:36:39.862123 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2707ms +[xorm] [info] 2024/09/05 10:38:39.885195 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5969ms +[xorm] [info] 2024/09/05 10:40:39.862232 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2997ms +[xorm] [info] 2024/09/05 10:42:39.882197 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5874ms +[xorm] [info] 2024/09/05 10:44:39.878217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5695ms +[xorm] [info] 2024/09/05 10:46:39.873422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.0487ms +[xorm] [info] 2024/09/05 10:48:39.869325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7628ms +[xorm] [info] 2024/09/05 10:50:39.883094 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.1618ms +[xorm] [info] 2024/09/05 10:52:39.864925 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7526ms +[xorm] [info] 2024/09/05 10:54:39.902288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 103.0997ms +[xorm] [info] 2024/09/05 10:56:39.864398 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2555ms +[xorm] [info] 2024/09/05 10:58:39.892283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.5102ms +[xorm] [info] 2024/09/05 11:00:40.457176 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 654.5893ms +[xorm] [info] 2024/09/05 11:02:39.869406 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1079ms +[xorm] [info] 2024/09/05 11:04:39.857234 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 65.504ms +[xorm] [info] 2024/09/05 11:06:39.864606 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.106ms +[xorm] [info] 2024/09/05 11:08:39.869160 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.423ms +[xorm] [info] 2024/09/05 11:10:39.873467 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2837ms +[xorm] [info] 2024/09/05 11:12:39.867671 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.3394ms +[xorm] [info] 2024/09/05 11:14:39.999301 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 197.0685ms +[xorm] [info] 2024/09/05 11:16:39.874233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2741ms +[xorm] [info] 2024/09/05 11:18:39.862607 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2312ms +[xorm] [info] 2024/09/05 11:20:39.884450 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4061ms +[xorm] [info] 2024/09/05 11:22:39.874600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.911ms +[xorm] [info] 2024/09/05 11:24:39.882700 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.305ms +[xorm] [info] 2024/09/05 11:26:39.883394 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.1848ms +[xorm] [info] 2024/09/05 11:28:39.890767 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.4485ms +[xorm] [info] 2024/09/05 11:30:39.873154 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5662ms +[xorm] [info] 2024/09/05 11:32:39.870743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7771ms +[xorm] [info] 2024/09/05 11:34:39.866360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8206ms +[xorm] [info] 2024/09/05 11:36:39.883259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1769ms +[xorm] [info] 2024/09/05 11:38:39.879554 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2269ms +[xorm] [info] 2024/09/05 11:40:39.876700 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2264ms +[xorm] [info] 2024/09/05 11:42:39.862583 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7975ms +[xorm] [info] 2024/09/05 11:44:39.867137 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6422ms +[xorm] [info] 2024/09/05 11:46:39.861173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2426ms +[xorm] [info] 2024/09/05 11:48:39.868658 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7876ms +[xorm] [info] 2024/09/05 11:50:39.869660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8141ms +[xorm] [info] 2024/09/05 11:52:39.875575 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7189ms +[xorm] [info] 2024/09/05 11:54:39.879020 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1712ms +[xorm] [info] 2024/09/05 11:56:39.868720 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3729ms +[xorm] [info] 2024/09/05 11:58:39.879277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2463ms +[xorm] [info] 2024/09/05 12:00:39.866386 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7212ms +[xorm] [info] 2024/09/05 12:02:39.878664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9189ms +[xorm] [info] 2024/09/05 12:04:39.885070 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8185ms +[xorm] [info] 2024/09/05 12:06:39.892682 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.8538ms +[xorm] [info] 2024/09/05 12:08:39.883768 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3851ms +[xorm] [info] 2024/09/05 12:10:39.875537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.802ms +[xorm] [info] 2024/09/05 12:12:39.869985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4758ms +[xorm] [info] 2024/09/05 12:14:39.873445 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4851ms +[xorm] [info] 2024/09/05 12:16:39.870080 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4042ms +[xorm] [info] 2024/09/05 12:18:39.981656 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 181.9707ms +[xorm] [info] 2024/09/05 12:20:39.875777 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0867ms +[xorm] [info] 2024/09/05 12:22:39.875816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3663ms +[xorm] [info] 2024/09/05 12:24:39.872577 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5903ms +[xorm] [info] 2024/09/05 12:26:39.873533 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5471ms +[xorm] [info] 2024/09/05 12:28:39.865118 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.302ms +[xorm] [info] 2024/09/05 12:30:39.902306 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 102.9569ms +[xorm] [info] 2024/09/05 12:32:39.863392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.455ms +[xorm] [info] 2024/09/05 12:34:39.952632 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 159.0467ms +[xorm] [info] 2024/09/05 12:36:39.870801 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8001ms +[xorm] [info] 2024/09/05 12:38:39.867915 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3722ms +[xorm] [info] 2024/09/05 12:40:39.875184 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0627ms +[xorm] [info] 2024/09/05 12:42:39.882732 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1765ms +[xorm] [info] 2024/09/05 12:44:39.874519 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8475ms +[xorm] [info] 2024/09/05 12:46:39.885597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9375ms +[xorm] [info] 2024/09/05 12:48:39.869413 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3681ms +[xorm] [info] 2024/09/05 12:50:39.870180 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2737ms +[xorm] [info] 2024/09/05 12:52:39.884604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.5015ms +[xorm] [info] 2024/09/05 12:54:39.898173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.0434ms +[xorm] [info] 2024/09/05 12:56:39.870551 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.288ms +[xorm] [info] 2024/09/05 12:58:39.871784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5147ms +[xorm] [info] 2024/09/05 13:00:39.880325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9101ms +[xorm] [info] 2024/09/05 13:02:39.867839 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2045ms +[xorm] [info] 2024/09/05 13:04:39.873077 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0645ms +[xorm] [info] 2024/09/05 13:06:39.880928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7954ms +[xorm] [info] 2024/09/05 13:08:39.875173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2349ms +[xorm] [info] 2024/09/05 13:10:39.893727 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6592ms +[xorm] [info] 2024/09/05 13:12:39.890630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3386ms +[xorm] [info] 2024/09/05 13:14:39.872216 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3555ms +[xorm] [info] 2024/09/05 13:16:39.885736 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4387ms +[xorm] [info] 2024/09/05 13:18:39.869064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8739ms +[xorm] [info] 2024/09/05 13:20:39.879417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6944ms +[xorm] [info] 2024/09/05 13:22:39.867142 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2399ms +[xorm] [info] 2024/09/05 13:24:39.883285 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1946ms +[xorm] [info] 2024/09/05 13:26:39.864940 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2532ms +[xorm] [info] 2024/09/05 13:28:39.878513 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8548ms +[xorm] [info] 2024/09/05 13:30:39.873857 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0073ms +[xorm] [info] 2024/09/05 13:32:39.885246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7134ms +[xorm] [info] 2024/09/05 13:34:39.888805 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6877ms +[xorm] [info] 2024/09/05 13:36:39.888584 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.2104ms +[xorm] [info] 2024/09/05 13:38:39.871564 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6604ms +[xorm] [info] 2024/09/05 13:40:39.865990 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0326ms +[xorm] [info] 2024/09/05 13:42:39.867708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4944ms +[xorm] [info] 2024/09/05 13:44:39.877369 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0159ms +[xorm] [info] 2024/09/05 13:46:39.881716 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7037ms +[xorm] [info] 2024/09/05 13:48:39.884763 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8729ms +[xorm] [info] 2024/09/05 13:50:39.878527 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9869ms +[xorm] [info] 2024/09/05 13:52:40.065389 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 265.4285ms +[xorm] [info] 2024/09/05 13:54:39.943655 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 145.0693ms +[xorm] [info] 2024/09/05 13:56:39.875030 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0633ms +[xorm] [info] 2024/09/05 13:58:39.869803 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8684ms +[xorm] [info] 2024/09/05 14:00:39.869572 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8295ms +[xorm] [info] 2024/09/05 14:02:39.873914 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3982ms +[xorm] [info] 2024/09/05 14:04:39.891588 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4054ms +[xorm] [info] 2024/09/05 14:06:39.890888 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.2865ms +[xorm] [info] 2024/09/05 14:08:39.866450 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0608ms +[xorm] [info] 2024/09/05 14:10:39.866828 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7212ms +[xorm] [info] 2024/09/05 14:12:39.878295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6291ms +[xorm] [info] 2024/09/05 14:14:39.870815 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5886ms +[xorm] [info] 2024/09/05 14:16:39.881576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6768ms +[xorm] [info] 2024/09/05 14:18:39.876365 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4371ms +[xorm] [info] 2024/09/05 14:20:39.895046 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.5448ms +[xorm] [info] 2024/09/05 14:22:40.365473 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 570.052ms +[xorm] [info] 2024/09/05 14:24:39.880822 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5446ms +[xorm] [info] 2024/09/05 14:26:39.868529 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7818ms +[xorm] [info] 2024/09/05 14:28:39.882404 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1515ms +[xorm] [info] 2024/09/05 14:30:39.860964 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.0566ms +[xorm] [info] 2024/09/05 14:32:39.876567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2133ms +[xorm] [info] 2024/09/05 14:34:39.873145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4685ms +[xorm] [info] 2024/09/05 14:36:39.882159 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6187ms +[xorm] [info] 2024/09/05 14:38:39.870412 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4942ms +[xorm] [info] 2024/09/05 14:40:39.881145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5035ms +[xorm] [info] 2024/09/05 14:42:39.864237 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0331ms +[xorm] [info] 2024/09/05 14:44:39.898779 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 98.0729ms +[xorm] [info] 2024/09/05 14:46:39.891004 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5029ms +[xorm] [info] 2024/09/05 14:48:39.874798 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1115ms +[xorm] [info] 2024/09/05 14:50:39.866919 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3149ms +[xorm] [info] 2024/09/05 14:52:39.877222 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.056ms +[xorm] [info] 2024/09/05 14:54:39.886423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4435ms +[xorm] [info] 2024/09/05 14:56:39.883903 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5493ms +[xorm] [info] 2024/09/05 14:58:39.876477 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8493ms +[xorm] [info] 2024/09/05 15:00:40.127362 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 246.1263ms +[xorm] [info] 2024/09/05 15:02:39.882336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6482ms +[xorm] [info] 2024/09/05 15:04:39.891433 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.0972ms +[xorm] [info] 2024/09/05 15:06:39.874035 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8812ms +[xorm] [info] 2024/09/05 15:08:39.937503 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 135.8246ms +[xorm] [info] 2024/09/05 15:10:39.891421 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2484ms +[xorm] [info] 2024/09/05 15:12:39.874656 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9896ms +[xorm] [info] 2024/09/05 15:14:39.892368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5409ms +[xorm] [info] 2024/09/05 15:16:39.873086 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1038ms +[xorm] [info] 2024/09/05 15:18:39.874570 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2995ms +[xorm] [info] 2024/09/05 15:20:39.871928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4165ms +[xorm] [info] 2024/09/05 15:22:39.899415 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 109.93ms +[xorm] [info] 2024/09/05 15:24:39.876063 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.063ms +[xorm] [info] 2024/09/05 15:26:39.870426 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4092ms +[xorm] [info] 2024/09/05 15:28:39.887999 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1736ms +[xorm] [info] 2024/09/05 15:30:39.883502 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.448ms +[xorm] [info] 2024/09/05 15:32:39.869710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.706ms +[xorm] [info] 2024/09/05 15:34:39.893446 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5228ms +[xorm] [info] 2024/09/05 15:36:39.868628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0836ms +[xorm] [info] 2024/09/05 15:38:39.880120 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1801ms +[xorm] [info] 2024/09/05 15:40:39.877085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.259ms +[xorm] [info] 2024/09/05 15:42:39.886121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0773ms +[xorm] [info] 2024/09/05 15:44:39.872874 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5765ms +[xorm] [info] 2024/09/05 15:46:39.876258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1834ms +[xorm] [info] 2024/09/05 15:48:39.889537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2157ms +[xorm] [info] 2024/09/05 15:50:39.888088 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1188ms +[xorm] [info] 2024/09/05 15:52:39.886539 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.136ms +[xorm] [info] 2024/09/05 15:54:39.872751 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5625ms +[xorm] [info] 2024/09/05 15:56:39.889985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.0348ms +[xorm] [info] 2024/09/05 15:58:39.872980 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5403ms +[xorm] [info] 2024/09/05 16:00:39.876076 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9649ms +[xorm] [info] 2024/09/05 16:02:39.889867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3408ms +[xorm] [info] 2024/09/05 16:04:39.873590 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4586ms +[xorm] [info] 2024/09/05 16:06:39.864240 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5679ms +[xorm] [info] 2024/09/05 16:08:39.874179 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.452ms +[xorm] [info] 2024/09/05 16:10:39.857017 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.3102ms +[xorm] [info] 2024/09/05 16:12:39.872793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.659ms +[xorm] [info] 2024/09/05 16:14:39.905740 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 116.4223ms +[xorm] [info] 2024/09/05 16:16:40.389818 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 588.9868ms +[xorm] [info] 2024/09/05 16:18:39.876368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1711ms +[xorm] [info] 2024/09/05 16:20:39.868735 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9572ms +[xorm] [info] 2024/09/05 16:22:39.868672 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9761ms +[xorm] [info] 2024/09/05 16:24:39.877160 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3056ms +[xorm] [info] 2024/09/05 16:26:39.873603 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0723ms +[xorm] [info] 2024/09/05 16:28:39.880738 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3189ms +[xorm] [info] 2024/09/05 16:30:39.871036 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0324ms +[xorm] [info] 2024/09/05 16:32:39.872630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3667ms +[xorm] [info] 2024/09/05 16:34:39.869016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4433ms +[xorm] [info] 2024/09/05 16:36:39.893090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5598ms +[xorm] [info] 2024/09/05 16:38:39.881200 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0795ms +[xorm] [info] 2024/09/05 16:40:39.886145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0474ms +[xorm] [info] 2024/09/05 16:42:39.890604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8168ms +[xorm] [info] 2024/09/05 16:44:39.877832 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.0585ms +[xorm] [info] 2024/09/05 16:46:39.876464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8551ms +[xorm] [info] 2024/09/05 16:48:39.872748 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9574ms +[xorm] [info] 2024/09/05 16:50:39.861248 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.8423ms +[xorm] [info] 2024/09/05 16:52:39.888657 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4223ms +[xorm] [info] 2024/09/05 16:54:39.886282 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3331ms +[xorm] [info] 2024/09/05 16:56:39.868014 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3325ms +[xorm] [info] 2024/09/05 16:58:41.460665 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 1.6704042s +[xorm] [info] 2024/09/05 17:00:39.865681 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8679ms +[xorm] [info] 2024/09/05 17:02:39.876006 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1168ms +[xorm] [info] 2024/09/05 17:04:39.870527 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3956ms +[xorm] [info] 2024/09/05 17:06:39.859004 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7652ms +[xorm] [info] 2024/09/05 17:08:39.869535 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9102ms +[xorm] [info] 2024/09/05 17:10:39.877627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3356ms +[xorm] [info] 2024/09/05 17:12:39.878137 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.6524ms +[xorm] [info] 2024/09/05 17:14:39.885642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6584ms +[xorm] [info] 2024/09/05 17:16:39.888782 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.8396ms +[xorm] [info] 2024/09/05 17:18:39.878827 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1686ms +[xorm] [info] 2024/09/05 17:20:39.880509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2639ms +[xorm] [info] 2024/09/05 17:22:39.870104 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9002ms +[xorm] [info] 2024/09/05 17:24:39.887640 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9637ms +[xorm] [info] 2024/09/05 17:26:39.872581 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8122ms +[xorm] [info] 2024/09/05 17:28:39.863594 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.3128ms +[xorm] [info] 2024/09/05 17:30:39.875385 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8895ms +[xorm] [info] 2024/09/05 17:32:39.868761 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2059ms +[xorm] [info] 2024/09/05 17:34:39.873469 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2896ms +[xorm] [info] 2024/09/05 17:36:39.875652 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4393ms +[xorm] [info] 2024/09/05 17:38:39.872840 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3033ms +[xorm] [info] 2024/09/05 17:40:39.872230 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1151ms +[xorm] [info] 2024/09/05 17:42:39.877550 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2251ms +[xorm] [info] 2024/09/05 17:44:39.898049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 98.3659ms +[xorm] [info] 2024/09/05 17:46:39.883956 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4958ms +[xorm] [info] 2024/09/05 17:48:39.872898 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2161ms +[xorm] [info] 2024/09/05 17:50:39.865199 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6525ms +[xorm] [info] 2024/09/05 17:52:39.879706 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7933ms +[xorm] [info] 2024/09/05 17:54:39.868736 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.6767ms +[xorm] [info] 2024/09/05 17:56:39.882147 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5058ms +[xorm] [info] 2024/09/05 17:58:39.875826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3059ms +[xorm] [info] 2024/09/05 18:00:39.878735 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6186ms +[xorm] [info] 2024/09/05 18:02:39.894535 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.1318ms +[xorm] [info] 2024/09/05 18:04:39.875662 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0926ms +[xorm] [info] 2024/09/05 18:06:39.893081 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 102.5524ms +[xorm] [info] 2024/09/05 18:08:39.861927 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1699ms +[xorm] [info] 2024/09/05 18:10:39.889879 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4854ms +[xorm] [info] 2024/09/05 18:12:39.878461 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6344ms +[xorm] [info] 2024/09/05 18:14:39.857054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.2124ms +[xorm] [info] 2024/09/05 18:16:39.891096 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.4033ms +[xorm] [info] 2024/09/05 18:18:39.879996 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7453ms +[xorm] [info] 2024/09/05 18:20:39.871306 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7553ms +[xorm] [info] 2024/09/05 18:22:39.875627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6858ms +[xorm] [info] 2024/09/05 18:24:39.870643 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7344ms +[xorm] [info] 2024/09/05 18:26:39.894415 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1203ms +[xorm] [info] 2024/09/05 18:28:39.873502 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3927ms +[xorm] [info] 2024/09/05 18:30:39.872931 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9612ms +[xorm] [info] 2024/09/05 18:32:39.887520 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.0017ms +[xorm] [info] 2024/09/05 18:34:39.874274 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2144ms +[xorm] [info] 2024/09/05 18:36:39.878309 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8087ms +[xorm] [info] 2024/09/05 18:38:39.876104 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2158ms +[xorm] [info] 2024/09/05 18:40:39.873438 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8499ms +[xorm] [info] 2024/09/05 18:42:39.873478 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2842ms +[xorm] [info] 2024/09/05 18:44:39.879403 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2608ms +[xorm] [info] 2024/09/05 18:46:39.871266 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5641ms +[xorm] [info] 2024/09/05 18:48:39.882732 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8591ms +[xorm] [info] 2024/09/05 18:50:39.884167 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9711ms +[xorm] [info] 2024/09/05 18:52:39.859697 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.8729ms +[xorm] [info] 2024/09/05 18:54:39.880950 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6297ms +[xorm] [info] 2024/09/05 18:56:39.877227 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5812ms +[xorm] [info] 2024/09/05 18:58:39.868425 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6135ms +[xorm] [info] 2024/09/05 19:00:39.879731 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5426ms +[xorm] [info] 2024/09/05 19:02:39.871065 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1882ms +[xorm] [info] 2024/09/05 19:04:39.875278 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7727ms +[xorm] [info] 2024/09/05 19:06:39.879003 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9012ms +[xorm] [info] 2024/09/05 19:08:39.870650 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.9143ms +[xorm] [info] 2024/09/05 19:10:39.860865 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6661ms +[xorm] [info] 2024/09/05 19:12:39.872474 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3504ms +[xorm] [info] 2024/09/05 19:14:39.872694 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6523ms +[xorm] [info] 2024/09/05 19:16:39.874739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4001ms +[xorm] [info] 2024/09/05 19:18:39.870256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9038ms +[xorm] [info] 2024/09/05 19:20:39.878765 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7974ms +[xorm] [info] 2024/09/05 19:22:39.892207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2793ms +[xorm] [info] 2024/09/05 19:24:39.864924 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3171ms +[xorm] [info] 2024/09/05 19:26:39.872917 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3642ms +[xorm] [info] 2024/09/05 19:28:39.885076 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6891ms +[xorm] [info] 2024/09/05 19:30:39.880512 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.973ms +[xorm] [info] 2024/09/05 19:32:39.874645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9521ms +[xorm] [info] 2024/09/05 19:34:39.864713 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.173ms +[xorm] [info] 2024/09/05 19:36:39.869346 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7984ms +[xorm] [info] 2024/09/05 19:38:39.880255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3602ms +[xorm] [info] 2024/09/05 19:40:39.874219 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8465ms +[xorm] [info] 2024/09/05 19:42:39.873168 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4057ms +[xorm] [info] 2024/09/05 19:44:39.867165 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.8731ms +[xorm] [info] 2024/09/05 19:46:39.872121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1276ms +[xorm] [info] 2024/09/05 19:48:39.871593 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6709ms +[xorm] [info] 2024/09/05 19:50:39.869204 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6726ms +[xorm] [info] 2024/09/05 19:52:39.877303 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.9098ms +[xorm] [info] 2024/09/05 19:54:39.866164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4974ms +[xorm] [info] 2024/09/05 19:56:39.887214 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5494ms +[xorm] [info] 2024/09/05 19:58:39.871800 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2216ms +[xorm] [info] 2024/09/05 20:00:39.861161 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0943ms +[xorm] [info] 2024/09/05 20:02:39.893082 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9371ms +[xorm] [info] 2024/09/05 20:04:39.890409 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.667ms +[xorm] [info] 2024/09/05 20:06:39.866394 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6574ms +[xorm] [info] 2024/09/05 20:08:39.876115 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9424ms +[xorm] [info] 2024/09/05 20:10:39.876657 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8076ms +[xorm] [info] 2024/09/05 20:12:39.872788 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.505ms +[xorm] [info] 2024/09/05 20:14:39.878599 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1303ms +[xorm] [info] 2024/09/05 20:16:39.880222 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5374ms +[xorm] [info] 2024/09/05 20:18:39.872689 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0996ms +[xorm] [info] 2024/09/05 20:20:39.873637 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.743ms +[xorm] [info] 2024/09/05 20:22:39.893023 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7312ms +[xorm] [info] 2024/09/05 20:24:39.876160 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2695ms +[xorm] [info] 2024/09/05 20:26:39.873599 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3395ms +[xorm] [info] 2024/09/05 20:28:39.863996 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.2975ms +[xorm] [info] 2024/09/05 20:30:39.873860 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9724ms +[xorm] [info] 2024/09/05 20:32:39.871821 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3207ms +[xorm] [info] 2024/09/05 20:34:39.873667 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6525ms +[xorm] [info] 2024/09/05 20:36:39.872964 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1365ms +[xorm] [info] 2024/09/05 20:38:39.885471 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8004ms +[xorm] [info] 2024/09/05 20:40:39.875641 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5147ms +[xorm] [info] 2024/09/05 20:42:39.877218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7249ms +[xorm] [info] 2024/09/05 20:44:39.870392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.118ms +[xorm] [info] 2024/09/05 20:46:39.879064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.5294ms +[xorm] [info] 2024/09/05 20:48:39.866596 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.2698ms +[xorm] [info] 2024/09/05 20:50:39.872837 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.284ms +[xorm] [info] 2024/09/05 20:52:39.877304 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5047ms +[xorm] [info] 2024/09/05 20:54:39.869303 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2991ms +[xorm] [info] 2024/09/05 20:56:39.888881 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9226ms +[xorm] [info] 2024/09/05 20:58:39.864340 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7964ms +[xorm] [info] 2024/09/05 21:00:39.891110 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8311ms +[xorm] [info] 2024/09/05 21:02:39.889835 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1362ms +[xorm] [info] 2024/09/05 21:04:39.878574 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.647ms +[xorm] [info] 2024/09/05 21:06:39.859938 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2714ms +[xorm] [info] 2024/09/05 21:08:39.868287 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0225ms +[xorm] [info] 2024/09/05 21:10:39.874992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0115ms +[xorm] [info] 2024/09/05 21:12:39.894916 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.8271ms +[xorm] [info] 2024/09/05 21:14:39.870810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9703ms +[xorm] [info] 2024/09/05 21:16:39.868826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8817ms +[xorm] [info] 2024/09/05 21:18:39.883948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5569ms +[xorm] [info] 2024/09/05 21:20:39.888053 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6237ms +[xorm] [info] 2024/09/05 21:22:39.884788 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4488ms +[xorm] [info] 2024/09/05 21:24:39.877913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0598ms +[xorm] [info] 2024/09/05 21:26:39.881501 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3095ms +[xorm] [info] 2024/09/05 21:28:39.889112 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.9262ms +[xorm] [info] 2024/09/05 21:30:39.874677 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7537ms +[xorm] [info] 2024/09/05 21:32:39.884748 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2382ms +[xorm] [info] 2024/09/05 21:34:39.884046 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4511ms +[xorm] [info] 2024/09/05 21:36:39.867078 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9429ms +[xorm] [info] 2024/09/05 21:38:39.879228 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3706ms +[xorm] [info] 2024/09/05 21:40:39.868918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2246ms +[xorm] [info] 2024/09/05 21:42:39.881479 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.023ms +[xorm] [info] 2024/09/05 21:44:39.880078 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0531ms +[xorm] [info] 2024/09/05 21:46:39.866379 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9117ms +[xorm] [info] 2024/09/05 21:48:39.880458 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7634ms +[xorm] [info] 2024/09/05 21:50:39.875261 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9743ms +[xorm] [info] 2024/09/05 21:52:39.870923 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1066ms +[xorm] [info] 2024/09/05 21:54:39.864148 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.4034ms +[xorm] [info] 2024/09/05 21:56:39.874670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2485ms +[xorm] [info] 2024/09/05 21:58:39.882288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.2838ms +[xorm] [info] 2024/09/05 22:00:39.877242 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0167ms +[xorm] [info] 2024/09/05 22:02:39.874359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7603ms +[xorm] [info] 2024/09/05 22:04:39.868390 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6877ms +[xorm] [info] 2024/09/05 22:06:39.878266 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8003ms +[xorm] [info] 2024/09/05 22:08:39.872658 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0799ms +[xorm] [info] 2024/09/05 22:10:39.865162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1661ms +[xorm] [info] 2024/09/05 22:12:39.865285 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.3942ms +[xorm] [info] 2024/09/05 22:14:39.871714 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.15ms +[xorm] [info] 2024/09/05 22:16:39.875648 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9621ms +[xorm] [info] 2024/09/05 22:18:39.879187 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3075ms +[xorm] [info] 2024/09/05 22:20:39.884279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.2688ms +[xorm] [info] 2024/09/05 22:22:39.868399 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.426ms +[xorm] [info] 2024/09/05 22:24:39.867319 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0527ms +[xorm] [info] 2024/09/05 22:26:39.879605 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.524ms +[xorm] [info] 2024/09/05 22:28:39.865555 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8443ms +[xorm] [info] 2024/09/05 22:30:39.872986 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3272ms +[xorm] [info] 2024/09/05 22:32:39.871702 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2296ms +[xorm] [info] 2024/09/05 22:34:39.877351 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.839ms +[xorm] [info] 2024/09/05 22:36:39.872129 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4093ms +[xorm] [info] 2024/09/05 22:38:39.888580 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.182ms +[xorm] [info] 2024/09/05 22:40:39.876467 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6385ms +[xorm] [info] 2024/09/05 22:42:39.876089 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0008ms +[xorm] [info] 2024/09/05 22:44:39.879237 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.0961ms +[xorm] [info] 2024/09/05 22:46:39.875516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.539ms +[xorm] [info] 2024/09/05 22:48:39.876181 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3377ms +[xorm] [info] 2024/09/05 22:50:39.873216 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7566ms +[xorm] [info] 2024/09/05 22:52:39.875257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.386ms +[xorm] [info] 2024/09/05 22:54:39.886598 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2771ms +[xorm] [info] 2024/09/05 22:56:39.873351 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.114ms +[xorm] [info] 2024/09/05 22:58:39.884603 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.7544ms +[xorm] [info] 2024/09/05 23:00:39.882548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3205ms +[xorm] [info] 2024/09/05 23:02:39.874522 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9078ms +[xorm] [info] 2024/09/05 23:04:39.889384 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2535ms +[xorm] [info] 2024/09/05 23:06:39.867011 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9348ms +[xorm] [info] 2024/09/05 23:08:39.877343 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4019ms +[xorm] [info] 2024/09/05 23:10:39.885850 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5757ms +[xorm] [info] 2024/09/05 23:12:39.864709 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4573ms +[xorm] [info] 2024/09/05 23:14:39.880207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4539ms +[xorm] [info] 2024/09/05 23:16:39.860889 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6268ms +[xorm] [info] 2024/09/05 23:18:39.887530 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5554ms +[xorm] [info] 2024/09/05 23:20:39.877961 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5139ms +[xorm] [info] 2024/09/05 23:22:39.873387 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8457ms +[xorm] [info] 2024/09/05 23:24:39.864849 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2254ms +[xorm] [info] 2024/09/05 23:26:39.885882 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9822ms +[xorm] [info] 2024/09/05 23:28:39.865128 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.285ms +[xorm] [info] 2024/09/05 23:30:39.871306 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0512ms +[xorm] [info] 2024/09/05 23:32:39.864778 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7093ms +[xorm] [info] 2024/09/05 23:34:39.867672 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0119ms +[xorm] [info] 2024/09/05 23:36:39.874848 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.175ms +[xorm] [info] 2024/09/05 23:38:39.862710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7973ms +[xorm] [info] 2024/09/05 23:40:39.882126 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1486ms +[xorm] [info] 2024/09/05 23:42:39.866926 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.4325ms +[xorm] [info] 2024/09/05 23:44:39.881354 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2477ms +[xorm] [info] 2024/09/05 23:46:39.885758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6939ms +[xorm] [info] 2024/09/05 23:48:39.866978 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0099ms +[xorm] [info] 2024/09/05 23:50:39.886941 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7424ms +[xorm] [info] 2024/09/05 23:52:39.894401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5367ms +[xorm] [info] 2024/09/05 23:54:39.869789 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.133ms +[xorm] [info] 2024/09/05 23:56:39.878218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.31ms +[xorm] [info] 2024/09/05 23:58:39.872755 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0977ms +[xorm] [info] 2024/09/06 00:00:39.873903 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9617ms +[xorm] [info] 2024/09/06 00:02:39.885071 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2837ms +[xorm] [info] 2024/09/06 00:04:39.877630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9763ms +[xorm] [info] 2024/09/06 00:06:39.886787 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.6681ms +[xorm] [info] 2024/09/06 00:08:39.861885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.7788ms +[xorm] [info] 2024/09/06 00:10:39.867399 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.67ms +[xorm] [info] 2024/09/06 00:12:39.872798 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2948ms +[xorm] [info] 2024/09/06 00:14:39.887295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7322ms +[xorm] [info] 2024/09/06 00:16:39.880483 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.966ms +[xorm] [info] 2024/09/06 00:18:39.887546 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7923ms +[xorm] [info] 2024/09/06 00:20:39.873822 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7278ms +[xorm] [info] 2024/09/06 00:22:39.877539 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8868ms +[xorm] [info] 2024/09/06 00:24:39.869764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.363ms +[xorm] [info] 2024/09/06 00:26:39.880737 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7441ms +[xorm] [info] 2024/09/06 00:28:39.861213 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 65.8924ms +[xorm] [info] 2024/09/06 00:30:39.867348 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8006ms +[xorm] [info] 2024/09/06 00:32:39.871386 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9465ms +[xorm] [info] 2024/09/06 00:34:39.872908 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9474ms +[xorm] [info] 2024/09/06 00:36:39.888628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4388ms +[xorm] [info] 2024/09/06 00:38:39.867022 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1974ms +[xorm] [info] 2024/09/06 00:40:39.886132 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2651ms +[xorm] [info] 2024/09/06 00:42:39.883845 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.6779ms +[xorm] [info] 2024/09/06 00:44:39.867076 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9841ms +[xorm] [info] 2024/09/06 00:46:39.875537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.463ms +[xorm] [info] 2024/09/06 00:48:39.880354 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5658ms +[xorm] [info] 2024/09/06 00:50:39.873090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1489ms +[xorm] [info] 2024/09/06 00:52:39.880317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3584ms +[xorm] [info] 2024/09/06 00:54:39.869686 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7869ms +[xorm] [info] 2024/09/06 00:56:39.882896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7305ms +[xorm] [info] 2024/09/06 00:58:39.867584 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6276ms +[xorm] [info] 2024/09/06 01:00:39.888966 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3311ms +[xorm] [info] 2024/09/06 01:02:39.873348 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7782ms +[xorm] [info] 2024/09/06 01:04:39.882952 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.9825ms +[xorm] [info] 2024/09/06 01:06:39.879700 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.086ms +[xorm] [info] 2024/09/06 01:08:39.871845 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8851ms +[xorm] [info] 2024/09/06 01:10:39.888755 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5948ms +[xorm] [info] 2024/09/06 01:12:39.873378 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6483ms +[xorm] [info] 2024/09/06 01:14:39.875804 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2829ms +[xorm] [info] 2024/09/06 01:16:39.891780 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8121ms +[xorm] [info] 2024/09/06 01:18:39.871416 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.8271ms +[xorm] [info] 2024/09/06 01:20:39.877947 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6087ms +[xorm] [info] 2024/09/06 01:22:39.867637 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9788ms +[xorm] [info] 2024/09/06 01:24:39.868438 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6892ms +[xorm] [info] 2024/09/06 01:26:39.875482 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3293ms +[xorm] [info] 2024/09/06 01:28:39.886423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6521ms +[xorm] [info] 2024/09/06 01:30:39.864329 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9348ms +[xorm] [info] 2024/09/06 01:32:39.874856 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8178ms +[xorm] [info] 2024/09/06 01:34:39.863805 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.6734ms +[xorm] [info] 2024/09/06 01:36:39.892064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 101.8519ms +[xorm] [info] 2024/09/06 01:38:39.864965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5717ms +[xorm] [info] 2024/09/06 01:40:39.870187 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.635ms +[xorm] [info] 2024/09/06 01:42:39.861232 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.2349ms +[xorm] [info] 2024/09/06 01:44:39.894873 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0264ms +[xorm] [info] 2024/09/06 01:46:39.874714 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.465ms +[xorm] [info] 2024/09/06 01:48:39.865905 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6199ms +[xorm] [info] 2024/09/06 01:50:39.878413 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.79ms +[xorm] [info] 2024/09/06 01:52:39.875159 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7972ms +[xorm] [info] 2024/09/06 01:54:39.876235 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9191ms +[xorm] [info] 2024/09/06 01:56:39.875946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6814ms +[xorm] [info] 2024/09/06 01:58:39.877808 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9702ms +[xorm] [info] 2024/09/06 02:00:39.880346 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.067ms +[xorm] [info] 2024/09/06 02:02:39.877509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8444ms +[xorm] [info] 2024/09/06 02:04:39.861112 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2259ms +[xorm] [info] 2024/09/06 02:06:39.873921 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7719ms +[xorm] [info] 2024/09/06 02:08:39.875824 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3749ms +[xorm] [info] 2024/09/06 02:10:39.884633 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8991ms +[xorm] [info] 2024/09/06 02:12:39.868251 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.5422ms +[xorm] [info] 2024/09/06 02:14:39.879753 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1865ms +[xorm] [info] 2024/09/06 02:16:39.886974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.453ms +[xorm] [info] 2024/09/06 02:18:39.885502 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5666ms +[xorm] [info] 2024/09/06 02:20:39.888377 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2896ms +[xorm] [info] 2024/09/06 02:22:39.892686 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3795ms +[xorm] [info] 2024/09/06 02:24:39.873811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5315ms +[xorm] [info] 2024/09/06 02:26:39.877644 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2704ms +[xorm] [info] 2024/09/06 02:28:39.876015 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.886ms +[xorm] [info] 2024/09/06 02:30:39.868264 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8891ms +[xorm] [info] 2024/09/06 02:32:39.881756 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8701ms +[xorm] [info] 2024/09/06 02:34:39.862790 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.4783ms +[xorm] [info] 2024/09/06 02:36:39.878263 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.185ms +[xorm] [info] 2024/09/06 02:38:39.890680 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9805ms +[xorm] [info] 2024/09/06 02:40:39.880850 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1797ms +[xorm] [info] 2024/09/06 02:42:39.863185 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1116ms +[xorm] [info] 2024/09/06 02:44:39.862483 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.421ms +[xorm] [info] 2024/09/06 02:46:39.866865 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5802ms +[xorm] [info] 2024/09/06 02:48:39.872142 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4743ms +[xorm] [info] 2024/09/06 02:50:39.872833 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7712ms +[xorm] [info] 2024/09/06 02:52:39.864223 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.4688ms +[xorm] [info] 2024/09/06 02:54:39.862164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2013ms +[xorm] [info] 2024/09/06 02:56:39.874414 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.291ms +[xorm] [info] 2024/09/06 02:58:39.864209 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7379ms +[xorm] [info] 2024/09/06 03:00:39.869904 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3727ms +[xorm] [info] 2024/09/06 03:02:39.877440 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9149ms +[xorm] [info] 2024/09/06 03:04:39.862746 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4012ms +[xorm] [info] 2024/09/06 03:06:39.872497 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5104ms +[xorm] [info] 2024/09/06 03:08:39.887281 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5474ms +[xorm] [info] 2024/09/06 03:10:39.865335 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2314ms +[xorm] [info] 2024/09/06 03:12:39.887835 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7552ms +[xorm] [info] 2024/09/06 03:14:39.878581 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3357ms +[xorm] [info] 2024/09/06 03:16:39.883825 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1752ms +[xorm] [info] 2024/09/06 03:18:39.876302 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8359ms +[xorm] [info] 2024/09/06 03:20:39.875557 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3029ms +[xorm] [info] 2024/09/06 03:22:39.877544 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6229ms +[xorm] [info] 2024/09/06 03:24:39.876066 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4864ms +[xorm] [info] 2024/09/06 03:26:39.870321 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5416ms +[xorm] [info] 2024/09/06 03:28:39.868763 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7631ms +[xorm] [info] 2024/09/06 03:30:39.884067 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.478ms +[xorm] [info] 2024/09/06 03:32:39.876016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.426ms +[xorm] [info] 2024/09/06 03:34:39.892274 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0577ms +[xorm] [info] 2024/09/06 03:36:39.873938 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6374ms +[xorm] [info] 2024/09/06 03:38:39.892391 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1431ms +[xorm] [info] 2024/09/06 03:40:39.883785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3322ms +[xorm] [info] 2024/09/06 03:42:39.865600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5654ms +[xorm] [info] 2024/09/06 03:44:39.864516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4062ms +[xorm] [info] 2024/09/06 03:46:39.875215 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0093ms +[xorm] [info] 2024/09/06 03:48:39.879268 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4597ms +[xorm] [info] 2024/09/06 03:50:39.879758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3103ms +[xorm] [info] 2024/09/06 03:52:39.886250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.9097ms +[xorm] [info] 2024/09/06 03:54:39.888495 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0519ms +[xorm] [info] 2024/09/06 03:56:39.882241 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.5974ms +[xorm] [info] 2024/09/06 03:58:39.869004 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.912ms +[xorm] [info] 2024/09/06 04:00:39.884482 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.2455ms +[xorm] [info] 2024/09/06 04:02:39.884278 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.8282ms +[xorm] [info] 2024/09/06 04:04:39.880432 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4384ms +[xorm] [info] 2024/09/06 04:06:39.881954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3623ms +[xorm] [info] 2024/09/06 04:08:39.872136 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8821ms +[xorm] [info] 2024/09/06 04:10:39.872277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9827ms +[xorm] [info] 2024/09/06 04:12:39.888184 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0321ms +[xorm] [info] 2024/09/06 04:14:39.872427 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7889ms +[xorm] [info] 2024/09/06 04:16:39.877039 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3371ms +[xorm] [info] 2024/09/06 04:18:39.876527 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0473ms +[xorm] [info] 2024/09/06 04:20:39.867281 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0198ms +[xorm] [info] 2024/09/06 04:22:39.884033 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1212ms +[xorm] [info] 2024/09/06 04:24:39.877693 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3116ms +[xorm] [info] 2024/09/06 04:26:39.876889 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.0949ms +[xorm] [info] 2024/09/06 04:28:39.866726 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1681ms +[xorm] [info] 2024/09/06 04:30:39.870892 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5129ms +[xorm] [info] 2024/09/06 04:32:39.869253 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7089ms +[xorm] [info] 2024/09/06 04:34:39.874233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4086ms +[xorm] [info] 2024/09/06 04:36:39.883236 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.3319ms +[xorm] [info] 2024/09/06 04:38:39.877257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2217ms +[xorm] [info] 2024/09/06 04:40:39.865750 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.2092ms +[xorm] [info] 2024/09/06 04:42:39.868185 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7942ms +[xorm] [info] 2024/09/06 04:44:39.877543 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1318ms +[xorm] [info] 2024/09/06 04:46:39.887696 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5307ms +[xorm] [info] 2024/09/06 04:48:39.884707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.654ms +[xorm] [info] 2024/09/06 04:50:39.867531 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4079ms +[xorm] [info] 2024/09/06 04:52:39.876977 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3784ms +[xorm] [info] 2024/09/06 04:54:39.869042 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8083ms +[xorm] [info] 2024/09/06 04:56:39.870557 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5997ms +[xorm] [info] 2024/09/06 04:58:39.868758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9942ms +[xorm] [info] 2024/09/06 05:00:39.861435 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2066ms +[xorm] [info] 2024/09/06 05:02:39.882352 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2992ms +[xorm] [info] 2024/09/06 05:04:39.883749 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5533ms +[xorm] [info] 2024/09/06 05:06:39.890175 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3587ms +[xorm] [info] 2024/09/06 05:08:39.879942 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6293ms +[xorm] [info] 2024/09/06 05:10:39.876756 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2661ms +[xorm] [info] 2024/09/06 05:12:39.871073 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3209ms +[xorm] [info] 2024/09/06 05:14:39.865543 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.8109ms +[xorm] [info] 2024/09/06 05:16:39.876295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1536ms +[xorm] [info] 2024/09/06 05:18:39.867683 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9608ms +[xorm] [info] 2024/09/06 05:20:39.877268 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3468ms +[xorm] [info] 2024/09/06 05:22:39.892356 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5872ms +[xorm] [info] 2024/09/06 05:24:39.876707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6609ms +[xorm] [info] 2024/09/06 05:26:39.884617 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6286ms +[xorm] [info] 2024/09/06 05:28:39.874882 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4146ms +[xorm] [info] 2024/09/06 05:30:39.884095 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1477ms +[xorm] [info] 2024/09/06 05:32:39.861177 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.476ms +[xorm] [info] 2024/09/06 05:34:39.881039 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7535ms +[xorm] [info] 2024/09/06 05:36:39.882043 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9ms +[xorm] [info] 2024/09/06 05:38:39.876681 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5742ms +[xorm] [info] 2024/09/06 05:40:39.862944 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9428ms +[xorm] [info] 2024/09/06 05:42:39.872632 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6699ms +[xorm] [info] 2024/09/06 05:44:39.882439 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8514ms +[xorm] [info] 2024/09/06 05:46:39.879778 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0477ms +[xorm] [info] 2024/09/06 05:48:39.876991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0674ms +[xorm] [info] 2024/09/06 05:50:39.894270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7327ms +[xorm] [info] 2024/09/06 05:52:39.863074 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.313ms +[xorm] [info] 2024/09/06 05:54:39.873372 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0181ms +[xorm] [info] 2024/09/06 05:56:39.868411 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3045ms +[xorm] [info] 2024/09/06 05:58:39.875762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2404ms +[xorm] [info] 2024/09/06 06:00:39.876189 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9323ms +[xorm] [info] 2024/09/06 06:02:39.875822 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1911ms +[xorm] [info] 2024/09/06 06:04:39.865426 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9593ms +[xorm] [info] 2024/09/06 06:06:39.861514 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3154ms +[xorm] [info] 2024/09/06 06:08:39.868198 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6804ms +[xorm] [info] 2024/09/06 06:10:39.879809 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6746ms +[xorm] [info] 2024/09/06 06:12:39.866283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6631ms +[xorm] [info] 2024/09/06 06:14:39.875478 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0755ms +[xorm] [info] 2024/09/06 06:16:39.879375 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3759ms +[xorm] [info] 2024/09/06 06:18:39.882244 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7057ms +[xorm] [info] 2024/09/06 06:20:39.875578 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2151ms +[xorm] [info] 2024/09/06 06:22:39.859102 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.6084ms +[xorm] [info] 2024/09/06 06:24:39.867239 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0664ms +[xorm] [info] 2024/09/06 06:26:39.870303 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3326ms +[xorm] [info] 2024/09/06 06:28:39.893741 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6537ms +[xorm] [info] 2024/09/06 06:30:39.885372 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4756ms +[xorm] [info] 2024/09/06 06:32:39.887767 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7011ms +[xorm] [info] 2024/09/06 06:34:39.865785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7444ms +[xorm] [info] 2024/09/06 06:36:39.887458 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.216ms +[xorm] [info] 2024/09/06 06:38:39.880220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8434ms +[xorm] [info] 2024/09/06 06:40:39.864920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7602ms +[xorm] [info] 2024/09/06 06:42:39.858041 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.7516ms +[xorm] [info] 2024/09/06 06:44:39.883625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6523ms +[xorm] [info] 2024/09/06 06:46:39.874240 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7497ms +[xorm] [info] 2024/09/06 06:48:39.862291 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1569ms +[xorm] [info] 2024/09/06 06:50:39.871539 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2468ms +[xorm] [info] 2024/09/06 06:52:39.865494 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4539ms +[xorm] [info] 2024/09/06 06:54:39.880301 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5834ms +[xorm] [info] 2024/09/06 06:56:39.865863 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5683ms +[xorm] [info] 2024/09/06 06:58:39.890026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6699ms +[xorm] [info] 2024/09/06 07:00:39.884503 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5981ms +[xorm] [info] 2024/09/06 07:02:39.864546 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1826ms +[xorm] [info] 2024/09/06 07:04:39.875787 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2252ms +[xorm] [info] 2024/09/06 07:06:39.889586 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6731ms +[xorm] [info] 2024/09/06 07:08:39.882243 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2214ms +[xorm] [info] 2024/09/06 07:10:39.873094 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4525ms +[xorm] [info] 2024/09/06 07:12:39.872049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5883ms +[xorm] [info] 2024/09/06 07:14:39.870528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8708ms +[xorm] [info] 2024/09/06 07:16:39.871006 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2562ms +[xorm] [info] 2024/09/06 07:18:39.876763 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.889ms +[xorm] [info] 2024/09/06 07:20:39.869462 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1103ms +[xorm] [info] 2024/09/06 07:22:39.869024 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0677ms +[xorm] [info] 2024/09/06 07:24:39.872430 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1211ms +[xorm] [info] 2024/09/06 07:26:39.886995 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.299ms +[xorm] [info] 2024/09/06 07:28:39.877442 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2747ms +[xorm] [info] 2024/09/06 07:30:39.881280 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0557ms +[xorm] [info] 2024/09/06 07:32:39.876283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8504ms +[xorm] [info] 2024/09/06 07:34:39.861661 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7561ms +[xorm] [info] 2024/09/06 07:36:39.884004 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7842ms +[xorm] [info] 2024/09/06 07:38:39.876107 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.284ms +[xorm] [info] 2024/09/06 07:40:39.883514 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7647ms +[xorm] [info] 2024/09/06 07:42:39.882286 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5297ms +[xorm] [info] 2024/09/06 07:44:39.870563 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1868ms +[xorm] [info] 2024/09/06 07:46:39.869550 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.9325ms +[xorm] [info] 2024/09/06 07:48:39.869974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7232ms +[xorm] [info] 2024/09/06 07:50:39.877943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1182ms +[xorm] [info] 2024/09/06 07:52:39.877515 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5592ms +[xorm] [info] 2024/09/06 07:54:39.873951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8954ms +[xorm] [info] 2024/09/06 07:56:39.868754 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0974ms +[xorm] [info] 2024/09/06 07:58:39.879103 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9378ms +[xorm] [info] 2024/09/06 08:00:39.865492 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7778ms +[xorm] [info] 2024/09/06 08:02:39.884519 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7152ms +[xorm] [info] 2024/09/06 08:04:39.881548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8197ms +[xorm] [info] 2024/09/06 08:06:39.864585 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1344ms +[xorm] [info] 2024/09/06 08:08:39.879277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5147ms +[xorm] [info] 2024/09/06 08:10:39.861448 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0597ms +[xorm] [info] 2024/09/06 08:12:39.886546 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9439ms +[xorm] [info] 2024/09/06 08:14:39.876168 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.0887ms +[xorm] [info] 2024/09/06 08:16:39.864968 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5395ms +[xorm] [info] 2024/09/06 08:18:39.879913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8763ms +[xorm] [info] 2024/09/06 08:20:39.871986 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7254ms +[xorm] [info] 2024/09/06 08:22:39.887837 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1521ms +[xorm] [info] 2024/09/06 08:24:39.882802 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3474ms +[xorm] [info] 2024/09/06 08:26:39.864866 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1433ms +[xorm] [info] 2024/09/06 08:28:39.882392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7702ms +[xorm] [info] 2024/09/06 08:30:39.884185 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7043ms +[xorm] [info] 2024/09/06 08:32:39.878803 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8072ms +[xorm] [info] 2024/09/06 08:34:39.887811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1308ms +[xorm] [info] 2024/09/06 08:36:39.887364 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7564ms +[xorm] [info] 2024/09/06 08:38:39.870742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9084ms +[xorm] [info] 2024/09/06 08:40:39.875349 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8454ms +[xorm] [info] 2024/09/06 08:42:39.894490 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.726ms +[xorm] [info] 2024/09/06 08:44:39.874265 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5452ms +[xorm] [info] 2024/09/06 08:46:39.866196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8579ms +[xorm] [info] 2024/09/06 08:48:39.882663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9603ms +[xorm] [info] 2024/09/06 08:50:39.871841 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5661ms +[xorm] [info] 2024/09/06 08:52:39.889824 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1974ms +[xorm] [info] 2024/09/06 08:54:39.875172 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.283ms +[xorm] [info] 2024/09/06 08:56:39.867170 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6621ms +[xorm] [info] 2024/09/06 08:58:39.883022 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6875ms +[xorm] [info] 2024/09/06 09:00:40.729338 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 930.282ms +[xorm] [info] 2024/09/06 09:02:40.530566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 742.6573ms +[xorm] [info] 2024/09/06 09:04:40.103342 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 314.2978ms +[xorm] [info] 2024/09/06 09:06:40.715566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 919.1043ms +[xorm] [info] 2024/09/06 09:08:40.702908 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 913.1865ms +[xorm] [info] 2024/09/06 09:10:39.892310 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7584ms +[xorm] [info] 2024/09/06 09:12:39.863505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4967ms +[xorm] [info] 2024/09/06 09:14:39.908247 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 104.6577ms +[xorm] [info] 2024/09/06 09:16:39.868210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0796ms +[xorm] [info] 2024/09/06 09:18:39.867572 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5652ms +[xorm] [info] 2024/09/06 09:20:39.867882 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2564ms +[xorm] [info] 2024/09/06 09:22:39.877522 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7888ms +[xorm] [info] 2024/09/06 09:24:39.873785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0127ms +[xorm] [info] 2024/09/06 09:26:39.867816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8885ms +[xorm] [info] 2024/09/06 09:28:39.898275 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 108.0078ms +[xorm] [info] 2024/09/06 09:30:39.900958 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 103.9524ms +[xorm] [info] 2024/09/06 09:32:39.866615 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6458ms +[xorm] [info] 2024/09/06 09:34:39.873955 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0044ms +[xorm] [info] 2024/09/06 09:36:39.897904 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 103.1179ms +[xorm] [info] 2024/09/06 09:38:39.993470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 196.696ms +[xorm] [info] 2024/09/06 09:40:39.891672 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.0924ms +[xorm] [info] 2024/09/06 09:42:39.938879 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 134.1949ms +[xorm] [info] 2024/09/06 09:44:39.863374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1411ms +[xorm] [info] 2024/09/06 09:46:39.870145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.1851ms +[xorm] [info] 2024/09/06 09:48:39.872586 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.343ms +[xorm] [info] 2024/09/06 09:50:39.877442 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3883ms +[xorm] [info] 2024/09/06 09:52:39.934321 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 144.2851ms +[xorm] [info] 2024/09/06 09:54:39.866084 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.1074ms +[xorm] [info] 2024/09/06 09:56:39.878249 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.197ms +[xorm] [info] 2024/09/06 09:58:39.886083 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1673ms +[xorm] [info] 2024/09/06 10:00:39.861314 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0968ms +[xorm] [info] 2024/09/06 10:02:39.882237 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0859ms +[xorm] [info] 2024/09/06 10:04:39.923135 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 102.9048ms +[xorm] [info] 2024/09/06 10:06:39.877342 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6243ms +[xorm] [info] 2024/09/06 10:08:40.362430 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 553.3379ms +[xorm] [info] 2024/09/06 10:10:39.876808 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9064ms +[xorm] [info] 2024/09/06 10:12:39.881469 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2882ms +[xorm] [info] 2024/09/06 10:14:39.878619 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3324ms +[xorm] [info] 2024/09/06 10:16:39.880328 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6295ms +[xorm] [info] 2024/09/06 10:18:39.885776 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7775ms +[xorm] [info] 2024/09/06 10:20:39.883713 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4699ms +[xorm] [info] 2024/09/06 10:22:39.871770 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0363ms +[xorm] [info] 2024/09/06 10:24:39.876893 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3113ms +[xorm] [info] 2024/09/06 10:26:39.882199 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.867ms +[xorm] [info] 2024/09/06 10:28:39.942541 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 142.1067ms +[xorm] [info] 2024/09/06 10:30:39.946366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 130.1774ms +[xorm] [info] 2024/09/06 10:32:39.876341 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1641ms +[xorm] [info] 2024/09/06 10:34:39.867905 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1026ms +[xorm] [info] 2024/09/06 10:36:40.011447 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 205.3324ms +[xorm] [info] 2024/09/06 10:38:39.891042 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2861ms +[xorm] [info] 2024/09/06 10:40:39.879723 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7208ms +[xorm] [info] 2024/09/06 10:42:39.871608 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6214ms +[xorm] [info] 2024/09/06 10:44:39.863832 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6592ms +[xorm] [info] 2024/09/06 10:46:39.922267 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 122.9285ms +[xorm] [info] 2024/09/06 10:48:39.873494 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4819ms +[xorm] [info] 2024/09/06 10:50:39.889975 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.825ms +[xorm] [info] 2024/09/06 10:52:39.878574 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7637ms +[xorm] [info] 2024/09/06 10:54:39.878822 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0801ms +[xorm] [info] 2024/09/06 10:56:39.865479 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0837ms +[xorm] [info] 2024/09/06 10:58:39.878493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0732ms +[xorm] [info] 2024/09/06 11:00:39.865028 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8053ms +[xorm] [info] 2024/09/06 11:02:39.882793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3648ms +[xorm] [info] 2024/09/06 11:04:39.868105 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6167ms +[xorm] [info] 2024/09/06 11:06:39.880079 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0616ms +[xorm] [info] 2024/09/06 11:08:39.878478 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6553ms +[xorm] [info] 2024/09/06 11:10:39.870657 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2154ms +[xorm] [info] 2024/09/06 11:12:39.864189 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.052ms +[xorm] [info] 2024/09/06 11:14:39.878957 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9852ms +[xorm] [info] 2024/09/06 11:16:39.884239 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1254ms +[xorm] [info] 2024/09/06 11:18:39.877274 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6525ms +[xorm] [info] 2024/09/06 11:20:39.876454 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6101ms +[xorm] [info] 2024/09/06 11:22:39.939738 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 138.8642ms +[xorm] [info] 2024/09/06 11:24:39.883678 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2568ms +[xorm] [info] 2024/09/06 11:25:58.236399 PING DATABASE mysql +[xorm] [info] 2024/09/06 11:25:58.283254 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 27.5557ms +[xorm] [info] 2024/09/06 11:25:58.311042 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 27.6825ms +[xorm] [info] 2024/09/06 11:26:17.724449 PING DATABASE mysql +[xorm] [info] 2024/09/06 11:26:17.759039 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 23.2572ms +[xorm] [info] 2024/09/06 11:26:17.783722 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 24.6837ms +[xorm] [info] 2024/09/06 11:28:17.948262 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7207ms +[xorm] [info] 2024/09/06 11:30:17.923161 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9661ms +[xorm] [info] 2024/09/06 11:32:17.949124 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1445ms +[xorm] [info] 2024/09/06 11:34:17.928079 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1955ms +[xorm] [info] 2024/09/06 11:36:17.927225 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9142ms +[xorm] [info] 2024/09/06 11:38:17.942965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2405ms +[xorm] [info] 2024/09/06 11:40:17.937180 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0359ms +[xorm] [info] 2024/09/06 11:42:17.933889 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4557ms +[xorm] [info] 2024/09/06 11:44:17.957141 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9345ms +[xorm] [info] 2024/09/06 11:46:17.932398 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0316ms +[xorm] [info] 2024/09/06 11:48:17.929211 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3839ms +[xorm] [info] 2024/09/06 11:50:17.929927 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7666ms +[xorm] [info] 2024/09/06 11:52:17.949158 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4345ms +[xorm] [info] 2024/09/06 11:54:17.924424 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.846ms +[xorm] [info] 2024/09/06 11:56:17.928456 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.9514ms +[xorm] [info] 2024/09/06 11:58:17.936476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2125ms +[xorm] [info] 2024/09/06 12:00:17.939065 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3786ms +[xorm] [info] 2024/09/06 12:02:18.123667 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 271.0161ms +[xorm] [info] 2024/09/06 12:02:46.071841 PING DATABASE mysql +[xorm] [info] 2024/09/06 12:02:46.113977 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 27.6923ms +[xorm] [info] 2024/09/06 12:02:46.143164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 28.5928ms +[xorm] [info] 2024/09/06 12:04:46.278575 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4528ms +[xorm] [info] 2024/09/06 12:06:46.290969 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8649ms +[xorm] [info] 2024/09/06 12:08:46.294796 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4095ms +[xorm] [info] 2024/09/06 12:10:46.303022 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3835ms +[xorm] [info] 2024/09/06 12:12:46.290898 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9988ms +[xorm] [info] 2024/09/06 12:14:46.298580 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5989ms +[xorm] [info] 2024/09/06 12:16:46.299123 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.4425ms +[xorm] [info] 2024/09/06 12:18:46.290057 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0545ms +[xorm] [info] 2024/09/06 12:20:46.310116 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 98.3481ms +[xorm] [info] 2024/09/06 12:22:46.303953 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2751ms +[xorm] [info] 2024/09/06 12:24:46.287279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1132ms +[xorm] [info] 2024/09/06 12:26:46.287003 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4761ms +[xorm] [info] 2024/09/06 12:28:46.293515 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7318ms +[xorm] [info] 2024/09/06 12:30:46.288470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4502ms +[xorm] [info] 2024/09/06 12:32:46.276647 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9488ms +[xorm] [info] 2024/09/06 12:34:46.284558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0939ms +[xorm] [info] 2024/09/06 12:36:46.287064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2387ms +[xorm] [info] 2024/09/06 12:38:46.302216 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4705ms +[xorm] [info] 2024/09/06 12:40:46.287871 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9814ms +[xorm] [info] 2024/09/06 12:42:46.289257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4207ms +[xorm] [info] 2024/09/06 12:44:46.289847 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0908ms +[xorm] [info] 2024/09/06 12:46:46.296621 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3967ms +[xorm] [info] 2024/09/06 12:48:46.293524 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2523ms +[xorm] [info] 2024/09/06 12:50:46.291559 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5231ms +[xorm] [info] 2024/09/06 12:52:46.278090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3374ms +[xorm] [info] 2024/09/06 12:54:46.277206 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5833ms +[xorm] [info] 2024/09/06 12:56:46.292247 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2694ms +[xorm] [info] 2024/09/06 12:58:46.301206 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8752ms +[xorm] [info] 2024/09/06 13:00:46.290586 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8523ms +[xorm] [info] 2024/09/06 13:02:46.283732 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.8753ms +[xorm] [info] 2024/09/06 13:04:46.289223 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4411ms +[xorm] [info] 2024/09/06 13:06:46.281806 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0447ms +[xorm] [info] 2024/09/06 13:08:46.282860 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2343ms +[xorm] [info] 2024/09/06 13:10:46.289551 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8923ms +[xorm] [info] 2024/09/06 13:12:46.296501 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2265ms +[xorm] [info] 2024/09/06 13:14:46.287113 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1428ms +[xorm] [info] 2024/09/06 13:16:46.277147 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1524ms +[xorm] [info] 2024/09/06 13:18:46.283401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7485ms +[xorm] [info] 2024/09/06 13:20:46.275697 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4611ms +[xorm] [info] 2024/09/06 13:22:46.284026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7231ms +[xorm] [info] 2024/09/06 13:24:46.287361 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0175ms +[xorm] [info] 2024/09/06 13:26:46.303470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1038ms +[xorm] [info] 2024/09/06 13:28:46.290857 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7565ms +[xorm] [info] 2024/09/06 13:30:46.288937 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9919ms +[xorm] [info] 2024/09/06 13:32:46.292736 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4385ms +[xorm] [info] 2024/09/06 13:34:46.288530 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8666ms +[xorm] [info] 2024/09/06 13:36:46.308704 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.9059ms +[xorm] [info] 2024/09/06 13:38:46.288233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1551ms +[xorm] [info] 2024/09/06 13:40:46.308126 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.752ms +[xorm] [info] 2024/09/06 13:42:46.279931 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8032ms +[xorm] [info] 2024/09/06 13:44:46.339992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 114.3283ms +[xorm] [info] 2024/09/06 13:46:46.285101 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0457ms +[xorm] [info] 2024/09/06 13:48:46.288119 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7048ms +[xorm] [info] 2024/09/06 13:50:46.286684 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6876ms +[xorm] [info] 2024/09/06 13:52:46.278715 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8843ms +[xorm] [info] 2024/09/06 13:54:46.280234 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7011ms +[xorm] [info] 2024/09/06 13:56:46.286186 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3712ms +[xorm] [info] 2024/09/06 13:58:46.296379 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8386ms +[xorm] [info] 2024/09/06 14:00:46.284093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9315ms +[xorm] [info] 2024/09/06 14:02:46.282752 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9208ms +[xorm] [info] 2024/09/06 14:04:46.307762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3014ms +[xorm] [info] 2024/09/06 14:06:46.283340 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4023ms +[xorm] [info] 2024/09/06 14:08:46.301765 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1492ms +[xorm] [info] 2024/09/06 14:10:46.291264 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.991ms +[xorm] [info] 2024/09/06 14:12:46.280687 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2933ms +[xorm] [info] 2024/09/06 14:14:46.282387 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.6351ms +[xorm] [info] 2024/09/06 14:16:46.294838 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0637ms +[xorm] [info] 2024/09/06 14:18:46.286278 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4498ms +[xorm] [info] 2024/09/06 14:20:46.295233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7518ms +[xorm] [info] 2024/09/06 14:22:46.296810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6365ms +[xorm] [info] 2024/09/06 14:24:46.291716 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6495ms +[xorm] [info] 2024/09/06 14:26:46.284544 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3132ms +[xorm] [info] 2024/09/06 14:28:46.307292 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.2675ms +[xorm] [info] 2024/09/06 14:30:46.307708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2565ms +[xorm] [info] 2024/09/06 14:32:46.302248 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8233ms +[xorm] [info] 2024/09/06 14:34:46.286621 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5897ms +[xorm] [info] 2024/09/06 14:36:46.289275 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8213ms +[xorm] [info] 2024/09/06 14:38:46.290251 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5313ms +[xorm] [info] 2024/09/06 14:40:46.292707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6259ms +[xorm] [info] 2024/09/06 14:42:46.300002 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.2735ms +[xorm] [info] 2024/09/06 14:44:46.299584 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8321ms +[xorm] [info] 2024/09/06 14:46:46.317091 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4487ms +[xorm] [info] 2024/09/06 14:48:46.306633 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.261ms +[xorm] [info] 2024/09/06 14:50:46.321861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 114.9124ms +[xorm] [info] 2024/09/06 14:52:46.289175 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0553ms +[xorm] [info] 2024/09/06 14:54:46.303197 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.986ms +[xorm] [info] 2024/09/06 14:56:46.299233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1014ms +[xorm] [info] 2024/09/06 14:58:46.910836 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 707.0528ms +[xorm] [info] 2024/09/06 15:00:46.286619 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.5249ms +[xorm] [info] 2024/09/06 15:02:46.285256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8655ms +[xorm] [info] 2024/09/06 15:04:46.298085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.2058ms +[xorm] [info] 2024/09/06 15:06:46.279123 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9257ms +[xorm] [info] 2024/09/06 15:08:46.313065 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.1267ms +[xorm] [info] 2024/09/06 15:10:46.287348 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3732ms +[xorm] [info] 2024/09/06 15:12:46.287410 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3508ms +[xorm] [info] 2024/09/06 15:14:46.398258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 181.8646ms +[xorm] [info] 2024/09/06 15:16:46.309062 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.0883ms +[xorm] [info] 2024/09/06 15:18:46.288867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8772ms +[xorm] [info] 2024/09/06 15:20:46.279220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5792ms +[xorm] [info] 2024/09/06 15:22:46.293540 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2614ms +[xorm] [info] 2024/09/06 15:24:46.301848 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5051ms +[xorm] [info] 2024/09/06 15:26:46.281867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1396ms +[xorm] [info] 2024/09/06 15:28:46.296742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.6269ms +[xorm] [info] 2024/09/06 15:30:46.301337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1415ms +[xorm] [info] 2024/09/06 15:32:46.289240 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8521ms +[xorm] [info] 2024/09/06 15:34:46.313861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.1598ms +[xorm] [info] 2024/09/06 15:36:46.287403 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6654ms +[xorm] [info] 2024/09/06 15:38:46.295255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4321ms +[xorm] [info] 2024/09/06 15:40:46.291707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1083ms +[xorm] [info] 2024/09/06 15:42:46.303311 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3646ms +[xorm] [info] 2024/09/06 15:44:46.290246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.828ms +[xorm] [info] 2024/09/06 15:46:46.287863 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4915ms +[xorm] [info] 2024/09/06 15:48:46.295806 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6237ms +[xorm] [info] 2024/09/06 15:50:46.288703 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.314ms +[xorm] [info] 2024/09/06 15:52:46.319611 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 103.1549ms +[xorm] [info] 2024/09/06 15:54:46.295218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3021ms +[xorm] [info] 2024/09/06 15:56:46.289152 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7721ms +[xorm] [info] 2024/09/06 15:58:46.305165 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1786ms +[xorm] [info] 2024/09/06 16:00:46.298711 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1349ms +[xorm] [info] 2024/09/06 16:02:46.280764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.815ms +[xorm] [info] 2024/09/06 16:04:46.285013 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9556ms +[xorm] [info] 2024/09/06 16:06:46.282220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.9543ms +[xorm] [info] 2024/09/06 16:08:46.303318 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0386ms +[xorm] [info] 2024/09/06 16:10:46.289807 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1545ms +[xorm] [info] 2024/09/06 16:12:46.308642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.6927ms +[xorm] [info] 2024/09/06 16:14:46.293953 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.9087ms +[xorm] [info] 2024/09/06 16:16:46.283049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6676ms +[xorm] [info] 2024/09/06 16:18:46.510762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 293.5263ms +[xorm] [info] 2024/09/06 16:20:46.310741 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.2783ms +[xorm] [info] 2024/09/06 16:22:46.302726 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1149ms +[xorm] [info] 2024/09/06 16:24:46.281311 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2288ms +[xorm] [info] 2024/09/06 16:26:46.287445 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.509ms +[xorm] [info] 2024/09/06 16:28:46.280503 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7274ms +[xorm] [info] 2024/09/06 16:30:46.289546 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1336ms +[xorm] [info] 2024/09/06 16:32:46.284031 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2606ms +[xorm] [info] 2024/09/06 16:34:46.295671 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7089ms +[xorm] [info] 2024/09/06 16:36:46.306324 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8387ms +[xorm] [info] 2024/09/06 16:38:46.294994 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6135ms +[xorm] [info] 2024/09/06 16:40:46.295332 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4745ms +[xorm] [info] 2024/09/06 16:42:46.286843 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7609ms +[xorm] [info] 2024/09/06 16:44:46.284175 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0451ms +[xorm] [info] 2024/09/06 16:46:46.294159 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.388ms +[xorm] [info] 2024/09/06 16:48:46.295479 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7986ms +[xorm] [info] 2024/09/06 16:50:46.307931 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0242ms +[xorm] [info] 2024/09/06 16:52:46.275497 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.8688ms +[xorm] [info] 2024/09/06 16:54:46.277724 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7656ms +[xorm] [info] 2024/09/06 16:56:46.299551 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9021ms +[xorm] [info] 2024/09/06 16:58:46.301736 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5428ms +[xorm] [info] 2024/09/06 17:00:46.301708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.999ms +[xorm] [info] 2024/09/06 17:02:46.288958 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2951ms +[xorm] [info] 2024/09/06 17:04:46.312742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.3627ms +[xorm] [info] 2024/09/06 17:06:46.298992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7583ms +[xorm] [info] 2024/09/06 17:08:46.291878 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0568ms +[xorm] [info] 2024/09/06 17:10:46.284257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2045ms +[xorm] [info] 2024/09/06 17:12:46.287368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.994ms +[xorm] [info] 2024/09/06 17:14:46.287594 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0565ms +[xorm] [info] 2024/09/06 17:16:46.291780 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4956ms +[xorm] [info] 2024/09/06 17:18:46.295246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1243ms +[xorm] [info] 2024/09/06 17:20:46.300114 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0787ms +[xorm] [info] 2024/09/06 17:22:46.297224 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4135ms +[xorm] [info] 2024/09/06 17:24:46.283812 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0288ms +[xorm] [info] 2024/09/06 17:26:46.295648 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2345ms +[xorm] [info] 2024/09/06 17:28:46.279886 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6879ms +[xorm] [info] 2024/09/06 17:30:46.283393 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4417ms +[xorm] [info] 2024/09/06 17:32:46.305151 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.2122ms +[xorm] [info] 2024/09/06 17:34:46.299226 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5147ms +[xorm] [info] 2024/09/06 17:36:46.287110 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0404ms +[xorm] [info] 2024/09/06 17:38:46.277183 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1954ms +[xorm] [info] 2024/09/06 17:40:46.300429 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4349ms +[xorm] [info] 2024/09/06 17:42:46.285883 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4505ms +[xorm] [info] 2024/09/06 17:44:46.307628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7798ms +[xorm] [info] 2024/09/06 17:46:46.283093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6266ms +[xorm] [info] 2024/09/06 17:48:46.273923 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7041ms +[xorm] [info] 2024/09/06 17:50:46.282222 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7126ms +[xorm] [info] 2024/09/06 17:52:46.285645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4224ms +[xorm] [info] 2024/09/06 17:54:46.561493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 352.7313ms +[xorm] [info] 2024/09/06 17:56:46.293799 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6816ms +[xorm] [info] 2024/09/06 17:58:46.285671 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5818ms +[xorm] [info] 2024/09/06 18:00:46.287401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.0215ms +[xorm] [info] 2024/09/06 18:02:46.292509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4415ms +[xorm] [info] 2024/09/06 18:04:46.364339 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 152.3314ms +[xorm] [info] 2024/09/06 18:06:46.298928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.953ms +[xorm] [info] 2024/09/06 18:08:46.320417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 107.9638ms +[xorm] [info] 2024/09/06 18:10:46.286764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6094ms +[xorm] [info] 2024/09/06 18:12:46.281652 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1021ms +[xorm] [info] 2024/09/06 18:14:46.285114 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.9405ms +[xorm] [info] 2024/09/06 18:16:46.295132 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5561ms +[xorm] [info] 2024/09/06 18:18:46.294683 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1173ms +[xorm] [info] 2024/09/06 18:20:46.284310 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4965ms +[xorm] [info] 2024/09/06 18:22:46.295250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4831ms +[xorm] [info] 2024/09/06 18:24:46.292960 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0579ms +[xorm] [info] 2024/09/06 18:26:46.296595 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.178ms +[xorm] [info] 2024/09/06 18:28:46.278676 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.53ms +[xorm] [info] 2024/09/06 18:30:46.292188 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7694ms +[xorm] [info] 2024/09/06 18:32:46.277637 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9069ms +[xorm] [info] 2024/09/06 18:34:46.297550 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.5555ms +[xorm] [info] 2024/09/06 18:36:46.287915 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.984ms +[xorm] [info] 2024/09/06 18:38:46.303143 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 97.9187ms +[xorm] [info] 2024/09/06 18:40:46.285429 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9053ms +[xorm] [info] 2024/09/06 18:42:46.302974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1514ms +[xorm] [info] 2024/09/06 18:44:46.291916 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.912ms +[xorm] [info] 2024/09/06 18:46:46.286286 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7388ms +[xorm] [info] 2024/09/06 18:48:46.297960 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1663ms +[xorm] [info] 2024/09/06 18:50:46.285670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4037ms +[xorm] [info] 2024/09/06 18:52:46.298464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1231ms +[xorm] [info] 2024/09/06 18:54:46.309325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.1626ms +[xorm] [info] 2024/09/06 18:56:46.286089 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9919ms +[xorm] [info] 2024/09/06 18:58:46.274058 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.92ms +[xorm] [info] 2024/09/06 19:00:46.290951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1409ms +[xorm] [info] 2024/09/06 19:02:46.305624 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3136ms +[xorm] [info] 2024/09/06 19:04:46.280094 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1129ms +[xorm] [info] 2024/09/06 19:06:46.286613 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3177ms +[xorm] [info] 2024/09/06 19:08:46.278545 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0728ms +[xorm] [info] 2024/09/06 19:10:46.279005 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5154ms +[xorm] [info] 2024/09/06 19:12:46.291026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.239ms +[xorm] [info] 2024/09/06 19:14:46.281279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2133ms +[xorm] [info] 2024/09/06 19:16:46.288496 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1537ms +[xorm] [info] 2024/09/06 19:18:46.302392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7821ms +[xorm] [info] 2024/09/06 19:20:46.290062 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.372ms +[xorm] [info] 2024/09/06 19:22:46.308670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.01ms +[xorm] [info] 2024/09/06 19:24:46.317347 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.5213ms +[xorm] [info] 2024/09/06 19:26:46.299955 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9709ms +[xorm] [info] 2024/09/06 19:28:46.299300 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4752ms +[xorm] [info] 2024/09/06 19:30:46.293424 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2547ms +[xorm] [info] 2024/09/06 19:32:46.283719 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7853ms +[xorm] [info] 2024/09/06 19:34:46.296907 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8722ms +[xorm] [info] 2024/09/06 19:36:46.285792 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5138ms +[xorm] [info] 2024/09/06 19:38:46.286035 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0677ms +[xorm] [info] 2024/09/06 19:40:46.282591 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8561ms +[xorm] [info] 2024/09/06 19:42:46.285422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.708ms +[xorm] [info] 2024/09/06 19:44:46.285690 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6738ms +[xorm] [info] 2024/09/06 19:46:46.278432 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7485ms +[xorm] [info] 2024/09/06 19:48:46.296491 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0848ms +[xorm] [info] 2024/09/06 19:50:46.293968 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0504ms +[xorm] [info] 2024/09/06 19:52:46.280856 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7695ms +[xorm] [info] 2024/09/06 19:54:46.289145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8468ms +[xorm] [info] 2024/09/06 19:56:46.283208 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7822ms +[xorm] [info] 2024/09/06 19:58:46.277516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5718ms +[xorm] [info] 2024/09/06 20:00:46.289645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.03ms +[xorm] [info] 2024/09/06 20:02:46.296648 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3331ms +[xorm] [info] 2024/09/06 20:04:46.280839 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2367ms +[xorm] [info] 2024/09/06 20:06:46.282365 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5141ms +[xorm] [info] 2024/09/06 20:08:46.297797 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8023ms +[xorm] [info] 2024/09/06 20:10:46.295455 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5338ms +[xorm] [info] 2024/09/06 20:12:46.288525 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.103ms +[xorm] [info] 2024/09/06 20:14:46.289904 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6913ms +[xorm] [info] 2024/09/06 20:16:46.287755 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8086ms +[xorm] [info] 2024/09/06 20:18:46.286553 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0903ms +[xorm] [info] 2024/09/06 20:20:46.290194 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1252ms +[xorm] [info] 2024/09/06 20:22:46.304480 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.733ms +[xorm] [info] 2024/09/06 20:24:46.291192 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0825ms +[xorm] [info] 2024/09/06 20:26:46.294362 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3182ms +[xorm] [info] 2024/09/06 20:28:46.281513 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1788ms +[xorm] [info] 2024/09/06 20:30:46.293388 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2598ms +[xorm] [info] 2024/09/06 20:32:46.288491 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1067ms +[xorm] [info] 2024/09/06 20:34:46.283676 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9604ms +[xorm] [info] 2024/09/06 20:36:46.299179 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2772ms +[xorm] [info] 2024/09/06 20:38:46.300190 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0797ms +[xorm] [info] 2024/09/06 20:40:46.293854 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.422ms +[xorm] [info] 2024/09/06 20:42:46.275815 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.82ms +[xorm] [info] 2024/09/06 20:44:46.290595 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1056ms +[xorm] [info] 2024/09/06 20:46:46.289810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2767ms +[xorm] [info] 2024/09/06 20:48:46.283022 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9347ms +[xorm] [info] 2024/09/06 20:50:46.303543 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3779ms +[xorm] [info] 2024/09/06 20:52:46.296946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6266ms +[xorm] [info] 2024/09/06 20:54:46.291418 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2643ms +[xorm] [info] 2024/09/06 20:56:46.290798 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.005ms +[xorm] [info] 2024/09/06 20:58:46.290131 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0271ms +[xorm] [info] 2024/09/06 21:00:46.295023 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8473ms +[xorm] [info] 2024/09/06 21:02:46.292631 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2841ms +[xorm] [info] 2024/09/06 21:04:46.281943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9835ms +[xorm] [info] 2024/09/06 21:06:46.285577 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7973ms +[xorm] [info] 2024/09/06 21:08:46.288481 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.0009ms +[xorm] [info] 2024/09/06 21:10:46.305678 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4515ms +[xorm] [info] 2024/09/06 21:12:46.294821 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.198ms +[xorm] [info] 2024/09/06 21:14:46.284443 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8526ms +[xorm] [info] 2024/09/06 21:16:46.287551 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8983ms +[xorm] [info] 2024/09/06 21:18:46.301407 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4447ms +[xorm] [info] 2024/09/06 21:20:46.293462 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2554ms +[xorm] [info] 2024/09/06 21:22:46.318433 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.5582ms +[xorm] [info] 2024/09/06 21:24:46.297757 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1796ms +[xorm] [info] 2024/09/06 21:26:46.287017 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1216ms +[xorm] [info] 2024/09/06 21:28:46.280107 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.1468ms +[xorm] [info] 2024/09/06 21:30:46.281631 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1272ms +[xorm] [info] 2024/09/06 21:32:46.291980 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.955ms +[xorm] [info] 2024/09/06 21:34:46.284431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.2528ms +[xorm] [info] 2024/09/06 21:36:46.291055 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2453ms +[xorm] [info] 2024/09/06 21:38:46.282242 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6013ms +[xorm] [info] 2024/09/06 21:40:46.281478 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8647ms +[xorm] [info] 2024/09/06 21:42:46.295470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3661ms +[xorm] [info] 2024/09/06 21:44:46.289378 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1287ms +[xorm] [info] 2024/09/06 21:46:46.283072 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2017ms +[xorm] [info] 2024/09/06 21:48:46.300752 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4625ms +[xorm] [info] 2024/09/06 21:50:46.287332 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2937ms +[xorm] [info] 2024/09/06 21:52:46.296705 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0007ms +[xorm] [info] 2024/09/06 21:54:46.289063 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.2833ms +[xorm] [info] 2024/09/06 21:56:46.283673 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2595ms +[xorm] [info] 2024/09/06 21:58:46.278321 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9521ms +[xorm] [info] 2024/09/06 22:00:46.282767 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.9416ms +[xorm] [info] 2024/09/06 22:02:46.285918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2797ms +[xorm] [info] 2024/09/06 22:04:46.287889 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7797ms +[xorm] [info] 2024/09/06 22:06:46.281935 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7466ms +[xorm] [info] 2024/09/06 22:08:46.286906 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.293ms +[xorm] [info] 2024/09/06 22:10:46.291813 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3878ms +[xorm] [info] 2024/09/06 22:12:46.280596 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0701ms +[xorm] [info] 2024/09/06 22:14:46.292696 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6697ms +[xorm] [info] 2024/09/06 22:16:46.279272 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9531ms +[xorm] [info] 2024/09/06 22:18:46.299094 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9315ms +[xorm] [info] 2024/09/06 22:20:46.291288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.857ms +[xorm] [info] 2024/09/06 22:22:46.294306 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8834ms +[xorm] [info] 2024/09/06 22:24:46.293864 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.765ms +[xorm] [info] 2024/09/06 22:26:46.287970 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.4041ms +[xorm] [info] 2024/09/06 22:28:46.288876 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1044ms +[xorm] [info] 2024/09/06 22:30:46.290405 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0561ms +[xorm] [info] 2024/09/06 22:32:46.278152 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.0237ms +[xorm] [info] 2024/09/06 22:34:46.285630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3929ms +[xorm] [info] 2024/09/06 22:36:46.279639 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8415ms +[xorm] [info] 2024/09/06 22:38:46.289031 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2809ms +[xorm] [info] 2024/09/06 22:40:46.286168 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2276ms +[xorm] [info] 2024/09/06 22:42:46.296852 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5447ms +[xorm] [info] 2024/09/06 22:44:46.293976 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7933ms +[xorm] [info] 2024/09/06 22:46:46.293630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6435ms +[xorm] [info] 2024/09/06 22:48:46.288368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6552ms +[xorm] [info] 2024/09/06 22:50:46.280566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1274ms +[xorm] [info] 2024/09/06 22:52:46.276890 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1876ms +[xorm] [info] 2024/09/06 22:54:46.299171 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7065ms +[xorm] [info] 2024/09/06 22:56:46.293495 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0923ms +[xorm] [info] 2024/09/06 22:58:46.293541 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0586ms +[xorm] [info] 2024/09/06 23:00:46.282551 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6103ms +[xorm] [info] 2024/09/06 23:02:46.275704 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3579ms +[xorm] [info] 2024/09/06 23:04:46.281774 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.997ms +[xorm] [info] 2024/09/06 23:06:46.296942 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9762ms +[xorm] [info] 2024/09/06 23:08:46.284923 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5853ms +[xorm] [info] 2024/09/06 23:10:46.292614 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7581ms +[xorm] [info] 2024/09/06 23:12:46.289829 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.8887ms +[xorm] [info] 2024/09/06 23:14:46.275315 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3466ms +[xorm] [info] 2024/09/06 23:16:46.273660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3614ms +[xorm] [info] 2024/09/06 23:18:46.303908 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3688ms +[xorm] [info] 2024/09/06 23:20:46.283576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3566ms +[xorm] [info] 2024/09/06 23:22:46.285699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5674ms +[xorm] [info] 2024/09/06 23:24:46.290834 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9503ms +[xorm] [info] 2024/09/06 23:26:46.279650 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3224ms +[xorm] [info] 2024/09/06 23:28:46.291054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.9483ms +[xorm] [info] 2024/09/06 23:30:46.287640 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5218ms +[xorm] [info] 2024/09/06 23:32:46.289346 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8295ms +[xorm] [info] 2024/09/06 23:34:46.284200 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.8163ms +[xorm] [info] 2024/09/06 23:36:46.291648 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1824ms +[xorm] [info] 2024/09/06 23:38:46.271784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2066ms +[xorm] [info] 2024/09/06 23:40:46.277918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 65.9167ms +[xorm] [info] 2024/09/06 23:42:46.281231 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.7446ms +[xorm] [info] 2024/09/06 23:44:46.304099 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6001ms +[xorm] [info] 2024/09/06 23:46:46.291246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3897ms +[xorm] [info] 2024/09/06 23:48:46.294308 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.4969ms +[xorm] [info] 2024/09/06 23:50:46.282561 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5267ms +[xorm] [info] 2024/09/06 23:52:46.289068 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3279ms +[xorm] [info] 2024/09/06 23:54:46.283908 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.034ms +[xorm] [info] 2024/09/06 23:56:46.290716 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8465ms +[xorm] [info] 2024/09/06 23:58:46.297063 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8696ms +[xorm] [info] 2024/09/07 00:00:46.298166 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9858ms +[xorm] [info] 2024/09/07 00:02:46.290320 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3141ms +[xorm] [info] 2024/09/07 00:04:46.288663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7561ms +[xorm] [info] 2024/09/07 00:06:46.288781 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6918ms +[xorm] [info] 2024/09/07 00:08:46.287965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7146ms +[xorm] [info] 2024/09/07 00:10:46.279791 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5156ms +[xorm] [info] 2024/09/07 00:12:46.299940 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0006ms +[xorm] [info] 2024/09/07 00:14:46.282472 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.9531ms +[xorm] [info] 2024/09/07 00:16:46.281185 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2067ms +[xorm] [info] 2024/09/07 00:18:46.287489 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9127ms +[xorm] [info] 2024/09/07 00:20:46.281934 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3504ms +[xorm] [info] 2024/09/07 00:22:46.300834 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.112ms +[xorm] [info] 2024/09/07 00:24:46.280877 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0673ms +[xorm] [info] 2024/09/07 00:26:46.277999 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.1757ms +[xorm] [info] 2024/09/07 00:28:46.276676 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6723ms +[xorm] [info] 2024/09/07 00:30:46.300429 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5478ms +[xorm] [info] 2024/09/07 00:32:46.285390 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4353ms +[xorm] [info] 2024/09/07 00:34:46.292166 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9223ms +[xorm] [info] 2024/09/07 00:36:46.294364 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3749ms +[xorm] [info] 2024/09/07 00:38:46.288682 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0063ms +[xorm] [info] 2024/09/07 00:40:46.291951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8397ms +[xorm] [info] 2024/09/07 00:42:46.297943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1739ms +[xorm] [info] 2024/09/07 00:44:46.276805 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9579ms +[xorm] [info] 2024/09/07 00:46:46.282406 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3574ms +[xorm] [info] 2024/09/07 00:48:46.289001 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3374ms +[xorm] [info] 2024/09/07 00:50:46.287951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4827ms +[xorm] [info] 2024/09/07 00:52:46.300198 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9007ms +[xorm] [info] 2024/09/07 00:54:46.285617 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.4814ms +[xorm] [info] 2024/09/07 00:56:46.297724 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.309ms +[xorm] [info] 2024/09/07 00:58:46.296101 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.0964ms +[xorm] [info] 2024/09/07 01:00:46.289032 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1365ms +[xorm] [info] 2024/09/07 01:02:46.289317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4567ms +[xorm] [info] 2024/09/07 01:04:46.291697 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0476ms +[xorm] [info] 2024/09/07 01:06:46.301928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5704ms +[xorm] [info] 2024/09/07 01:08:46.293083 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.9873ms +[xorm] [info] 2024/09/07 01:10:46.291511 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6769ms +[xorm] [info] 2024/09/07 01:12:46.296263 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8139ms +[xorm] [info] 2024/09/07 01:14:46.282156 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7971ms +[xorm] [info] 2024/09/07 01:16:46.279743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6712ms +[xorm] [info] 2024/09/07 01:18:46.284653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7333ms +[xorm] [info] 2024/09/07 01:20:46.296478 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4003ms +[xorm] [info] 2024/09/07 01:22:46.303623 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3189ms +[xorm] [info] 2024/09/07 01:24:46.275679 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4974ms +[xorm] [info] 2024/09/07 01:26:46.278687 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0777ms +[xorm] [info] 2024/09/07 01:28:46.289184 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2995ms +[xorm] [info] 2024/09/07 01:30:46.284600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9926ms +[xorm] [info] 2024/09/07 01:32:46.275846 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.244ms +[xorm] [info] 2024/09/07 01:34:46.284619 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3805ms +[xorm] [info] 2024/09/07 01:36:46.291790 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2076ms +[xorm] [info] 2024/09/07 01:38:46.298045 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.511ms +[xorm] [info] 2024/09/07 01:40:46.281490 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9101ms +[xorm] [info] 2024/09/07 01:42:46.278092 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8172ms +[xorm] [info] 2024/09/07 01:44:46.286989 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.022ms +[xorm] [info] 2024/09/07 01:46:46.298326 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.2585ms +[xorm] [info] 2024/09/07 01:48:46.286603 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1743ms +[xorm] [info] 2024/09/07 01:50:46.293457 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.081ms +[xorm] [info] 2024/09/07 01:52:46.285859 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8305ms +[xorm] [info] 2024/09/07 01:54:46.287098 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9894ms +[xorm] [info] 2024/09/07 01:56:46.280940 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.832ms +[xorm] [info] 2024/09/07 01:58:46.290928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6079ms +[xorm] [info] 2024/09/07 02:00:46.276502 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7213ms +[xorm] [info] 2024/09/07 02:02:46.287508 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4891ms +[xorm] [info] 2024/09/07 02:04:46.290147 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6036ms +[xorm] [info] 2024/09/07 02:06:46.278240 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9225ms +[xorm] [info] 2024/09/07 02:08:46.293033 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9471ms +[xorm] [info] 2024/09/07 02:10:46.299341 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7669ms +[xorm] [info] 2024/09/07 02:12:46.289737 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1994ms +[xorm] [info] 2024/09/07 02:14:46.283173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4483ms +[xorm] [info] 2024/09/07 02:16:46.289231 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8912ms +[xorm] [info] 2024/09/07 02:18:46.277428 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2689ms +[xorm] [info] 2024/09/07 02:20:46.298566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.7665ms +[xorm] [info] 2024/09/07 02:22:46.279713 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4611ms +[xorm] [info] 2024/09/07 02:24:46.276076 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.748ms +[xorm] [info] 2024/09/07 02:26:46.276200 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1509ms +[xorm] [info] 2024/09/07 02:28:46.295918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.577ms +[xorm] [info] 2024/09/07 02:30:46.285557 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6602ms +[xorm] [info] 2024/09/07 02:32:46.293007 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6287ms +[xorm] [info] 2024/09/07 02:34:46.295137 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8239ms +[xorm] [info] 2024/09/07 02:36:46.279668 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5397ms +[xorm] [info] 2024/09/07 02:38:46.296336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.828ms +[xorm] [info] 2024/09/07 02:40:46.275179 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7288ms +[xorm] [info] 2024/09/07 02:42:46.279269 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6791ms +[xorm] [info] 2024/09/07 02:44:46.295105 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1562ms +[xorm] [info] 2024/09/07 02:46:46.288899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7266ms +[xorm] [info] 2024/09/07 02:48:46.285671 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3712ms +[xorm] [info] 2024/09/07 02:50:46.296170 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1569ms +[xorm] [info] 2024/09/07 02:52:46.297442 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7505ms +[xorm] [info] 2024/09/07 02:54:46.303688 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8207ms +[xorm] [info] 2024/09/07 02:56:46.293354 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.11ms +[xorm] [info] 2024/09/07 02:58:46.274462 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9854ms +[xorm] [info] 2024/09/07 03:00:46.279317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0253ms +[xorm] [info] 2024/09/07 03:02:46.287493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0913ms +[xorm] [info] 2024/09/07 03:04:46.305368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.2131ms +[xorm] [info] 2024/09/07 03:06:46.283220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6785ms +[xorm] [info] 2024/09/07 03:08:46.277564 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6897ms +[xorm] [info] 2024/09/07 03:10:46.302661 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.5717ms +[xorm] [info] 2024/09/07 03:12:46.293529 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0492ms +[xorm] [info] 2024/09/07 03:14:46.286921 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1152ms +[xorm] [info] 2024/09/07 03:16:46.299319 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5703ms +[xorm] [info] 2024/09/07 03:18:46.282843 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5375ms +[xorm] [info] 2024/09/07 03:20:46.305304 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2387ms +[xorm] [info] 2024/09/07 03:22:46.281245 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5313ms +[xorm] [info] 2024/09/07 03:24:46.306186 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9917ms +[xorm] [info] 2024/09/07 03:26:46.296106 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7992ms +[xorm] [info] 2024/09/07 03:28:46.279720 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6464ms +[xorm] [info] 2024/09/07 03:30:46.286048 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0329ms +[xorm] [info] 2024/09/07 03:32:46.301226 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1313ms +[xorm] [info] 2024/09/07 03:34:46.292335 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2182ms +[xorm] [info] 2024/09/07 03:36:46.295716 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8812ms +[xorm] [info] 2024/09/07 03:38:46.298977 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3022ms +[xorm] [info] 2024/09/07 03:40:46.297954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3532ms +[xorm] [info] 2024/09/07 03:42:46.279191 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1566ms +[xorm] [info] 2024/09/07 03:44:46.287583 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8547ms +[xorm] [info] 2024/09/07 03:46:46.299001 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0082ms +[xorm] [info] 2024/09/07 03:48:46.279516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3073ms +[xorm] [info] 2024/09/07 03:50:46.281306 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3263ms +[xorm] [info] 2024/09/07 03:52:46.274244 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7081ms +[xorm] [info] 2024/09/07 03:54:46.302570 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3737ms +[xorm] [info] 2024/09/07 03:56:46.283317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.947ms +[xorm] [info] 2024/09/07 03:58:46.299223 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.036ms +[xorm] [info] 2024/09/07 04:00:46.283107 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8423ms +[xorm] [info] 2024/09/07 04:02:46.286108 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8546ms +[xorm] [info] 2024/09/07 04:04:46.300880 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5055ms +[xorm] [info] 2024/09/07 04:06:46.286881 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8966ms +[xorm] [info] 2024/09/07 04:08:46.293742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2358ms +[xorm] [info] 2024/09/07 04:10:46.284085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4195ms +[xorm] [info] 2024/09/07 04:12:46.297079 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7912ms +[xorm] [info] 2024/09/07 04:14:46.304259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9179ms +[xorm] [info] 2024/09/07 04:16:46.288471 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3979ms +[xorm] [info] 2024/09/07 04:18:46.301410 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5744ms +[xorm] [info] 2024/09/07 04:20:46.304081 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1006ms +[xorm] [info] 2024/09/07 04:22:46.277493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5425ms +[xorm] [info] 2024/09/07 04:24:46.292178 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0855ms +[xorm] [info] 2024/09/07 04:26:46.292040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4958ms +[xorm] [info] 2024/09/07 04:28:46.296008 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2706ms +[xorm] [info] 2024/09/07 04:30:46.287846 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.666ms +[xorm] [info] 2024/09/07 04:32:46.279258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2862ms +[xorm] [info] 2024/09/07 04:34:46.280217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6855ms +[xorm] [info] 2024/09/07 04:36:46.301116 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1173ms +[xorm] [info] 2024/09/07 04:38:46.278628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5533ms +[xorm] [info] 2024/09/07 04:40:46.290085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9451ms +[xorm] [info] 2024/09/07 04:42:46.287488 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3986ms +[xorm] [info] 2024/09/07 04:44:46.293630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1775ms +[xorm] [info] 2024/09/07 04:46:46.306786 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.5179ms +[xorm] [info] 2024/09/07 04:48:46.298971 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7672ms +[xorm] [info] 2024/09/07 04:50:46.279707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.0315ms +[xorm] [info] 2024/09/07 04:52:46.291513 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1929ms +[xorm] [info] 2024/09/07 04:54:46.285266 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2573ms +[xorm] [info] 2024/09/07 04:56:46.294533 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3234ms +[xorm] [info] 2024/09/07 04:58:46.279453 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3227ms +[xorm] [info] 2024/09/07 05:00:46.291193 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5519ms +[xorm] [info] 2024/09/07 05:02:46.292215 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.655ms +[xorm] [info] 2024/09/07 05:04:46.300431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.9958ms +[xorm] [info] 2024/09/07 05:06:46.275488 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3259ms +[xorm] [info] 2024/09/07 05:08:46.286811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3664ms +[xorm] [info] 2024/09/07 05:10:46.281374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8726ms +[xorm] [info] 2024/09/07 05:12:46.279934 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2547ms +[xorm] [info] 2024/09/07 05:14:46.296197 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7247ms +[xorm] [info] 2024/09/07 05:16:46.297338 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5137ms +[xorm] [info] 2024/09/07 05:18:46.308021 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.1037ms +[xorm] [info] 2024/09/07 05:20:46.270582 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.9044ms +[xorm] [info] 2024/09/07 05:22:46.295183 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5392ms +[xorm] [info] 2024/09/07 05:24:46.285776 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.622ms +[xorm] [info] 2024/09/07 05:26:46.296175 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3131ms +[xorm] [info] 2024/09/07 05:28:46.293235 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1261ms +[xorm] [info] 2024/09/07 05:30:46.284686 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1711ms +[xorm] [info] 2024/09/07 05:32:46.277811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1043ms +[xorm] [info] 2024/09/07 05:34:46.286117 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8175ms +[xorm] [info] 2024/09/07 05:36:46.277336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8211ms +[xorm] [info] 2024/09/07 05:38:46.286060 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1242ms +[xorm] [info] 2024/09/07 05:40:46.299202 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6651ms +[xorm] [info] 2024/09/07 05:42:46.296246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.84ms +[xorm] [info] 2024/09/07 05:44:46.286083 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9829ms +[xorm] [info] 2024/09/07 05:46:46.291458 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8155ms +[xorm] [info] 2024/09/07 05:48:46.275173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.2429ms +[xorm] [info] 2024/09/07 05:50:46.300625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.6453ms +[xorm] [info] 2024/09/07 05:52:46.292691 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1496ms +[xorm] [info] 2024/09/07 05:54:46.285766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.8681ms +[xorm] [info] 2024/09/07 05:56:46.278476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.5138ms +[xorm] [info] 2024/09/07 05:58:46.293926 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1475ms +[xorm] [info] 2024/09/07 06:00:46.274104 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7023ms +[xorm] [info] 2024/09/07 06:02:46.283536 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.598ms +[xorm] [info] 2024/09/07 06:04:46.288282 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5885ms +[xorm] [info] 2024/09/07 06:06:46.292553 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5222ms +[xorm] [info] 2024/09/07 06:08:46.279840 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5833ms +[xorm] [info] 2024/09/07 06:10:46.288636 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6078ms +[xorm] [info] 2024/09/07 06:12:46.287271 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4617ms +[xorm] [info] 2024/09/07 06:14:46.302296 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7586ms +[xorm] [info] 2024/09/07 06:16:46.290490 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8192ms +[xorm] [info] 2024/09/07 06:18:46.284932 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3044ms +[xorm] [info] 2024/09/07 06:20:46.285171 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5277ms +[xorm] [info] 2024/09/07 06:22:46.295441 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.7251ms +[xorm] [info] 2024/09/07 06:24:46.290892 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.781ms +[xorm] [info] 2024/09/07 06:26:46.285181 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0201ms +[xorm] [info] 2024/09/07 06:28:46.292644 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8176ms +[xorm] [info] 2024/09/07 06:30:46.293481 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5568ms +[xorm] [info] 2024/09/07 06:32:46.305088 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5571ms +[xorm] [info] 2024/09/07 06:34:46.290722 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3427ms +[xorm] [info] 2024/09/07 06:36:46.291696 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5115ms +[xorm] [info] 2024/09/07 06:38:46.293125 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2446ms +[xorm] [info] 2024/09/07 06:40:46.287964 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6933ms +[xorm] [info] 2024/09/07 06:42:46.293548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6427ms +[xorm] [info] 2024/09/07 06:44:46.277669 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3483ms +[xorm] [info] 2024/09/07 06:46:46.296884 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1459ms +[xorm] [info] 2024/09/07 06:48:46.301518 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0605ms +[xorm] [info] 2024/09/07 06:50:46.300203 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4566ms +[xorm] [info] 2024/09/07 06:52:46.283841 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5131ms +[xorm] [info] 2024/09/07 06:54:46.283181 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0589ms +[xorm] [info] 2024/09/07 06:56:46.288802 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3167ms +[xorm] [info] 2024/09/07 06:58:46.293758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7071ms +[xorm] [info] 2024/09/07 07:00:46.277821 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4176ms +[xorm] [info] 2024/09/07 07:02:46.295105 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0124ms +[xorm] [info] 2024/09/07 07:04:46.274981 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1979ms +[xorm] [info] 2024/09/07 07:06:46.299073 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.732ms +[xorm] [info] 2024/09/07 07:08:46.270898 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0489ms +[xorm] [info] 2024/09/07 07:10:46.291304 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5819ms +[xorm] [info] 2024/09/07 07:12:46.282613 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1247ms +[xorm] [info] 2024/09/07 07:14:46.293896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4387ms +[xorm] [info] 2024/09/07 07:16:46.285742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2512ms +[xorm] [info] 2024/09/07 07:18:46.279853 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7066ms +[xorm] [info] 2024/09/07 07:20:46.290050 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4669ms +[xorm] [info] 2024/09/07 07:22:46.293662 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.753ms +[xorm] [info] 2024/09/07 07:24:46.287028 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0116ms +[xorm] [info] 2024/09/07 07:26:46.282886 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.702ms +[xorm] [info] 2024/09/07 07:28:46.272489 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.6398ms +[xorm] [info] 2024/09/07 07:30:46.295182 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1028ms +[xorm] [info] 2024/09/07 07:32:46.285314 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8996ms +[xorm] [info] 2024/09/07 07:34:46.286299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4878ms +[xorm] [info] 2024/09/07 07:36:46.297520 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3927ms +[xorm] [info] 2024/09/07 07:38:46.299528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9844ms +[xorm] [info] 2024/09/07 07:40:46.293683 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8803ms +[xorm] [info] 2024/09/07 07:42:46.295664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7905ms +[xorm] [info] 2024/09/07 07:44:46.282207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4194ms +[xorm] [info] 2024/09/07 07:46:46.294736 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9593ms +[xorm] [info] 2024/09/07 07:48:46.302738 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0043ms +[xorm] [info] 2024/09/07 07:50:46.274565 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0089ms +[xorm] [info] 2024/09/07 07:52:46.287358 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.6478ms +[xorm] [info] 2024/09/07 07:54:46.297164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9586ms +[xorm] [info] 2024/09/07 07:56:46.281682 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.698ms +[xorm] [info] 2024/09/07 07:58:46.287592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9ms +[xorm] [info] 2024/09/07 08:00:46.291587 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4138ms +[xorm] [info] 2024/09/07 08:02:46.282322 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.4258ms +[xorm] [info] 2024/09/07 08:04:46.288276 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7468ms +[xorm] [info] 2024/09/07 08:06:46.291870 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8604ms +[xorm] [info] 2024/09/07 08:08:46.278251 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7422ms +[xorm] [info] 2024/09/07 08:10:46.283273 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4381ms +[xorm] [info] 2024/09/07 08:12:46.289291 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2975ms +[xorm] [info] 2024/09/07 08:14:46.279791 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1883ms +[xorm] [info] 2024/09/07 08:16:46.306899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.8184ms +[xorm] [info] 2024/09/07 08:18:46.284250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9525ms +[xorm] [info] 2024/09/07 08:20:46.287331 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6924ms +[xorm] [info] 2024/09/07 08:22:46.292436 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2699ms +[xorm] [info] 2024/09/07 08:24:46.285265 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2628ms +[xorm] [info] 2024/09/07 08:26:46.288528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5032ms +[xorm] [info] 2024/09/07 08:28:46.294574 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6258ms +[xorm] [info] 2024/09/07 08:30:46.294735 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6513ms +[xorm] [info] 2024/09/07 08:32:46.294705 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2729ms +[xorm] [info] 2024/09/07 08:34:46.295052 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5627ms +[xorm] [info] 2024/09/07 08:36:46.284007 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4469ms +[xorm] [info] 2024/09/07 08:38:46.283350 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4765ms +[xorm] [info] 2024/09/07 08:40:46.288396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7356ms +[xorm] [info] 2024/09/07 08:42:46.299408 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3516ms +[xorm] [info] 2024/09/07 08:44:46.282095 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1966ms +[xorm] [info] 2024/09/07 08:46:46.285961 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2599ms +[xorm] [info] 2024/09/07 08:48:46.280917 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4823ms +[xorm] [info] 2024/09/07 08:50:46.296974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8423ms +[xorm] [info] 2024/09/07 08:52:46.280671 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6737ms +[xorm] [info] 2024/09/07 08:54:46.286205 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9884ms +[xorm] [info] 2024/09/07 08:56:46.296524 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.512ms +[xorm] [info] 2024/09/07 08:58:46.302258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4735ms +[xorm] [info] 2024/09/07 09:00:46.293457 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0615ms +[xorm] [info] 2024/09/07 09:02:46.292092 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.2767ms +[xorm] [info] 2024/09/07 09:04:46.295576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0816ms +[xorm] [info] 2024/09/07 09:06:46.284066 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7584ms +[xorm] [info] 2024/09/07 09:08:46.287944 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8411ms +[xorm] [info] 2024/09/07 09:10:46.271992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7531ms +[xorm] [info] 2024/09/07 09:12:46.298962 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4337ms +[xorm] [info] 2024/09/07 09:14:46.291248 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1095ms +[xorm] [info] 2024/09/07 09:16:46.297366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8453ms +[xorm] [info] 2024/09/07 09:18:46.294580 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2675ms +[xorm] [info] 2024/09/07 09:20:46.280133 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5575ms +[xorm] [info] 2024/09/07 09:22:46.276544 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6564ms +[xorm] [info] 2024/09/07 09:24:46.275781 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7643ms +[xorm] [info] 2024/09/07 09:26:46.286170 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2616ms +[xorm] [info] 2024/09/07 09:28:46.300101 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6635ms +[xorm] [info] 2024/09/07 09:30:46.275987 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.1175ms +[xorm] [info] 2024/09/07 09:32:46.283417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9827ms +[xorm] [info] 2024/09/07 09:34:46.279283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3926ms +[xorm] [info] 2024/09/07 09:36:46.307036 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5925ms +[xorm] [info] 2024/09/07 09:38:46.293392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0498ms +[xorm] [info] 2024/09/07 09:40:46.272960 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.4562ms +[xorm] [info] 2024/09/07 09:42:46.301250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.865ms +[xorm] [info] 2024/09/07 09:44:46.280936 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0475ms +[xorm] [info] 2024/09/07 09:46:46.288805 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7077ms +[xorm] [info] 2024/09/07 09:48:46.283009 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8211ms +[xorm] [info] 2024/09/07 09:50:46.292256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6861ms +[xorm] [info] 2024/09/07 09:52:46.287003 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3844ms +[xorm] [info] 2024/09/07 09:54:46.285245 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9091ms +[xorm] [info] 2024/09/07 09:56:46.281723 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4751ms +[xorm] [info] 2024/09/07 09:58:46.285833 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7006ms +[xorm] [info] 2024/09/07 10:00:46.286273 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1832ms +[xorm] [info] 2024/09/07 10:02:46.297339 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9904ms +[xorm] [info] 2024/09/07 10:04:46.285205 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5293ms +[xorm] [info] 2024/09/07 10:06:46.284844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.029ms +[xorm] [info] 2024/09/07 10:08:46.292262 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3222ms +[xorm] [info] 2024/09/07 10:10:46.287196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2318ms +[xorm] [info] 2024/09/07 10:12:46.285618 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7015ms +[xorm] [info] 2024/09/07 10:14:46.287995 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2572ms +[xorm] [info] 2024/09/07 10:16:46.294331 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0657ms +[xorm] [info] 2024/09/07 10:18:46.284053 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.958ms +[xorm] [info] 2024/09/07 10:20:46.299830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.5747ms +[xorm] [info] 2024/09/07 10:22:46.288682 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5054ms +[xorm] [info] 2024/09/07 10:24:46.293509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8911ms +[xorm] [info] 2024/09/07 10:26:46.278493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1205ms +[xorm] [info] 2024/09/07 10:28:46.285673 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.598ms +[xorm] [info] 2024/09/07 10:30:46.300159 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6466ms +[xorm] [info] 2024/09/07 10:32:46.291587 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6345ms +[xorm] [info] 2024/09/07 10:34:46.274776 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9493ms +[xorm] [info] 2024/09/07 10:36:46.288447 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1989ms +[xorm] [info] 2024/09/07 10:38:46.288280 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5521ms +[xorm] [info] 2024/09/07 10:40:46.299250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1739ms +[xorm] [info] 2024/09/07 10:42:46.278801 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6861ms +[xorm] [info] 2024/09/07 10:44:46.286572 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9094ms +[xorm] [info] 2024/09/07 10:46:46.293166 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1033ms +[xorm] [info] 2024/09/07 10:48:46.299746 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8463ms +[xorm] [info] 2024/09/07 10:50:46.303299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8908ms +[xorm] [info] 2024/09/07 10:52:46.297325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9266ms +[xorm] [info] 2024/09/07 10:54:46.287180 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5199ms +[xorm] [info] 2024/09/07 10:56:46.287750 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9491ms +[xorm] [info] 2024/09/07 10:58:46.291250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5842ms +[xorm] [info] 2024/09/07 11:00:46.299816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6358ms +[xorm] [info] 2024/09/07 11:02:46.285121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9445ms +[xorm] [info] 2024/09/07 11:04:46.280720 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.16ms +[xorm] [info] 2024/09/07 11:06:46.292246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.5702ms +[xorm] [info] 2024/09/07 11:08:46.289521 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9207ms +[xorm] [info] 2024/09/07 11:10:46.280801 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7921ms +[xorm] [info] 2024/09/07 11:12:46.294079 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4051ms +[xorm] [info] 2024/09/07 11:14:46.290610 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7541ms +[xorm] [info] 2024/09/07 11:16:46.305085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7767ms +[xorm] [info] 2024/09/07 11:18:46.275068 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7457ms +[xorm] [info] 2024/09/07 11:20:46.301088 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5271ms +[xorm] [info] 2024/09/07 11:22:46.291372 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6168ms +[xorm] [info] 2024/09/07 11:24:46.290055 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8211ms +[xorm] [info] 2024/09/07 11:26:46.274505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3944ms +[xorm] [info] 2024/09/07 11:28:46.286860 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3815ms +[xorm] [info] 2024/09/07 11:30:46.290540 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7259ms +[xorm] [info] 2024/09/07 11:32:46.289217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7322ms +[xorm] [info] 2024/09/07 11:34:46.282210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7984ms +[xorm] [info] 2024/09/07 11:36:46.294991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8417ms +[xorm] [info] 2024/09/07 11:38:46.285080 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1379ms +[xorm] [info] 2024/09/07 11:40:46.290093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8668ms +[xorm] [info] 2024/09/07 11:42:46.279173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1177ms +[xorm] [info] 2024/09/07 11:44:46.289920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6552ms +[xorm] [info] 2024/09/07 11:46:46.287178 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5262ms +[xorm] [info] 2024/09/07 11:48:46.285707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7281ms +[xorm] [info] 2024/09/07 11:50:46.307783 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.4465ms +[xorm] [info] 2024/09/07 11:52:46.289265 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4305ms +[xorm] [info] 2024/09/07 11:54:46.290797 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7279ms +[xorm] [info] 2024/09/07 11:56:46.276997 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5824ms +[xorm] [info] 2024/09/07 11:58:46.293796 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0415ms +[xorm] [info] 2024/09/07 12:00:46.276709 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9875ms +[xorm] [info] 2024/09/07 12:02:46.294623 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3677ms +[xorm] [info] 2024/09/07 12:04:46.286612 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4374ms +[xorm] [info] 2024/09/07 12:06:46.294362 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0519ms +[xorm] [info] 2024/09/07 12:08:46.292600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1845ms +[xorm] [info] 2024/09/07 12:10:46.275922 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2922ms +[xorm] [info] 2024/09/07 12:12:46.304608 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0446ms +[xorm] [info] 2024/09/07 12:14:46.301882 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7146ms +[xorm] [info] 2024/09/07 12:16:46.293146 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7245ms +[xorm] [info] 2024/09/07 12:18:46.285275 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.7801ms +[xorm] [info] 2024/09/07 12:20:46.303286 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4393ms +[xorm] [info] 2024/09/07 12:22:46.282212 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7592ms +[xorm] [info] 2024/09/07 12:24:46.295302 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8255ms +[xorm] [info] 2024/09/07 12:26:46.276358 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3827ms +[xorm] [info] 2024/09/07 12:28:46.282077 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7529ms +[xorm] [info] 2024/09/07 12:30:46.282386 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7521ms +[xorm] [info] 2024/09/07 12:32:46.280739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3279ms +[xorm] [info] 2024/09/07 12:34:46.307268 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3543ms +[xorm] [info] 2024/09/07 12:36:46.303710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8439ms +[xorm] [info] 2024/09/07 12:38:46.288720 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8955ms +[xorm] [info] 2024/09/07 12:40:46.285864 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3737ms +[xorm] [info] 2024/09/07 12:42:46.275401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9721ms +[xorm] [info] 2024/09/07 12:44:46.292361 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3748ms +[xorm] [info] 2024/09/07 12:46:46.296510 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5414ms +[xorm] [info] 2024/09/07 12:48:46.299054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2755ms +[xorm] [info] 2024/09/07 12:50:46.279547 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1347ms +[xorm] [info] 2024/09/07 12:52:46.294776 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3781ms +[xorm] [info] 2024/09/07 12:54:46.296806 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1572ms +[xorm] [info] 2024/09/07 12:56:46.289490 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.2195ms +[xorm] [info] 2024/09/07 12:58:46.289885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3564ms +[xorm] [info] 2024/09/07 13:00:46.294785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1533ms +[xorm] [info] 2024/09/07 13:02:46.291948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9026ms +[xorm] [info] 2024/09/07 13:04:46.285853 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0695ms +[xorm] [info] 2024/09/07 13:06:46.274465 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5595ms +[xorm] [info] 2024/09/07 13:08:46.298220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.0613ms +[xorm] [info] 2024/09/07 13:10:46.305128 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6505ms +[xorm] [info] 2024/09/07 13:12:46.285474 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5271ms +[xorm] [info] 2024/09/07 13:14:46.289289 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3899ms +[xorm] [info] 2024/09/07 13:16:46.281246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8986ms +[xorm] [info] 2024/09/07 13:18:46.285660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.059ms +[xorm] [info] 2024/09/07 13:20:46.288919 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7165ms +[xorm] [info] 2024/09/07 13:22:46.299039 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1001ms +[xorm] [info] 2024/09/07 13:24:46.293172 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9561ms +[xorm] [info] 2024/09/07 13:26:46.291719 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8588ms +[xorm] [info] 2024/09/07 13:28:46.294571 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7258ms +[xorm] [info] 2024/09/07 13:30:46.284396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.967ms +[xorm] [info] 2024/09/07 13:32:46.287375 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4104ms +[xorm] [info] 2024/09/07 13:34:46.289962 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.558ms +[xorm] [info] 2024/09/07 13:36:46.276387 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.039ms +[xorm] [info] 2024/09/07 13:38:46.275962 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0947ms +[xorm] [info] 2024/09/07 13:40:46.285701 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.724ms +[xorm] [info] 2024/09/07 13:42:46.303176 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0603ms +[xorm] [info] 2024/09/07 13:44:46.289238 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1978ms +[xorm] [info] 2024/09/07 13:46:46.284041 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8172ms +[xorm] [info] 2024/09/07 13:48:46.298966 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8678ms +[xorm] [info] 2024/09/07 13:50:46.304359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7758ms +[xorm] [info] 2024/09/07 13:52:46.285276 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.425ms +[xorm] [info] 2024/09/07 13:54:46.278115 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3125ms +[xorm] [info] 2024/09/07 13:56:46.288054 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4067ms +[xorm] [info] 2024/09/07 13:58:46.285996 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9067ms +[xorm] [info] 2024/09/07 14:00:46.301637 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3971ms +[xorm] [info] 2024/09/07 14:02:46.278494 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.1042ms +[xorm] [info] 2024/09/07 14:04:46.272454 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5599ms +[xorm] [info] 2024/09/07 14:06:46.301696 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1102ms +[xorm] [info] 2024/09/07 14:08:46.298748 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.7571ms +[xorm] [info] 2024/09/07 14:10:46.280541 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6207ms +[xorm] [info] 2024/09/07 14:12:46.286730 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5932ms +[xorm] [info] 2024/09/07 14:14:46.286630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.865ms +[xorm] [info] 2024/09/07 14:16:46.302813 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.9232ms +[xorm] [info] 2024/09/07 14:18:46.305916 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 97.2761ms +[xorm] [info] 2024/09/07 14:20:46.294601 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3521ms +[xorm] [info] 2024/09/07 14:22:46.282620 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2495ms +[xorm] [info] 2024/09/07 14:24:46.289300 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5894ms +[xorm] [info] 2024/09/07 14:26:46.292241 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5184ms +[xorm] [info] 2024/09/07 14:28:46.304527 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5677ms +[xorm] [info] 2024/09/07 14:30:46.280014 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.8514ms +[xorm] [info] 2024/09/07 14:32:46.299190 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.852ms +[xorm] [info] 2024/09/07 14:34:46.282058 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.967ms +[xorm] [info] 2024/09/07 14:36:46.294176 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6667ms +[xorm] [info] 2024/09/07 14:38:46.291942 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.129ms +[xorm] [info] 2024/09/07 14:40:46.282178 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2261ms +[xorm] [info] 2024/09/07 14:42:46.294779 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2363ms +[xorm] [info] 2024/09/07 14:44:46.284564 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.553ms +[xorm] [info] 2024/09/07 14:46:46.289977 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1459ms +[xorm] [info] 2024/09/07 14:48:46.301169 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8543ms +[xorm] [info] 2024/09/07 14:50:46.272120 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.7783ms +[xorm] [info] 2024/09/07 14:52:46.286693 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6389ms +[xorm] [info] 2024/09/07 14:54:46.276794 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.297ms +[xorm] [info] 2024/09/07 14:56:46.303693 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.3334ms +[xorm] [info] 2024/09/07 14:58:46.275068 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9506ms +[xorm] [info] 2024/09/07 15:00:46.276813 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7158ms +[xorm] [info] 2024/09/07 15:02:46.286573 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8503ms +[xorm] [info] 2024/09/07 15:04:46.271431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.6985ms +[xorm] [info] 2024/09/07 15:06:46.280736 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8441ms +[xorm] [info] 2024/09/07 15:08:46.284255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.668ms +[xorm] [info] 2024/09/07 15:10:46.292293 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4113ms +[xorm] [info] 2024/09/07 15:12:46.288920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.021ms +[xorm] [info] 2024/09/07 15:14:46.287711 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9447ms +[xorm] [info] 2024/09/07 15:16:46.291040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2261ms +[xorm] [info] 2024/09/07 15:18:46.287882 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0189ms +[xorm] [info] 2024/09/07 15:20:46.277688 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2457ms +[xorm] [info] 2024/09/07 15:22:46.294717 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8217ms +[xorm] [info] 2024/09/07 15:24:46.276414 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.6716ms +[xorm] [info] 2024/09/07 15:26:46.291949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1783ms +[xorm] [info] 2024/09/07 15:28:46.277921 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4395ms +[xorm] [info] 2024/09/07 15:30:46.281366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3265ms +[xorm] [info] 2024/09/07 15:32:46.284447 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2142ms +[xorm] [info] 2024/09/07 15:34:46.278000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4166ms +[xorm] [info] 2024/09/07 15:36:46.286844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8183ms +[xorm] [info] 2024/09/07 15:38:46.294488 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3304ms +[xorm] [info] 2024/09/07 15:40:46.280385 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9046ms +[xorm] [info] 2024/09/07 15:42:46.291624 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1722ms +[xorm] [info] 2024/09/07 15:44:46.293461 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5287ms +[xorm] [info] 2024/09/07 15:46:46.286931 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6583ms +[xorm] [info] 2024/09/07 15:48:46.290416 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6921ms +[xorm] [info] 2024/09/07 15:50:46.277480 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7311ms +[xorm] [info] 2024/09/07 15:52:46.286800 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6705ms +[xorm] [info] 2024/09/07 15:54:46.286668 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7202ms +[xorm] [info] 2024/09/07 15:56:46.287892 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1514ms +[xorm] [info] 2024/09/07 15:58:46.305811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.221ms +[xorm] [info] 2024/09/07 16:00:46.300259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4038ms +[xorm] [info] 2024/09/07 16:02:46.306325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1551ms +[xorm] [info] 2024/09/07 16:04:46.298991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9372ms +[xorm] [info] 2024/09/07 16:06:46.299131 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.5598ms +[xorm] [info] 2024/09/07 16:08:46.275691 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.6892ms +[xorm] [info] 2024/09/07 16:10:46.283623 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4247ms +[xorm] [info] 2024/09/07 16:12:46.276577 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3173ms +[xorm] [info] 2024/09/07 16:14:46.283663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7586ms +[xorm] [info] 2024/09/07 16:16:46.293291 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5203ms +[xorm] [info] 2024/09/07 16:18:46.293458 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2529ms +[xorm] [info] 2024/09/07 16:20:46.292998 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.927ms +[xorm] [info] 2024/09/07 16:22:46.289732 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6231ms +[xorm] [info] 2024/09/07 16:24:46.289649 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6071ms +[xorm] [info] 2024/09/07 16:26:46.281503 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6601ms +[xorm] [info] 2024/09/07 16:28:46.299119 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3506ms +[xorm] [info] 2024/09/07 16:30:46.281335 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0763ms +[xorm] [info] 2024/09/07 16:32:46.284597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7204ms +[xorm] [info] 2024/09/07 16:34:46.286893 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3309ms +[xorm] [info] 2024/09/07 16:36:46.281411 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3514ms +[xorm] [info] 2024/09/07 16:38:46.275295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3575ms +[xorm] [info] 2024/09/07 16:40:46.327792 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 119.8978ms +[xorm] [info] 2024/09/07 16:42:46.293226 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3011ms +[xorm] [info] 2024/09/07 16:44:46.284156 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3298ms +[xorm] [info] 2024/09/07 16:46:46.295416 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5957ms +[xorm] [info] 2024/09/07 16:48:46.283696 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1556ms +[xorm] [info] 2024/09/07 16:50:46.299613 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0741ms +[xorm] [info] 2024/09/07 16:52:46.287772 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0416ms +[xorm] [info] 2024/09/07 16:54:46.293194 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0113ms +[xorm] [info] 2024/09/07 16:56:46.300010 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.3946ms +[xorm] [info] 2024/09/07 16:58:46.287886 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5542ms +[xorm] [info] 2024/09/07 17:00:46.289680 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3877ms +[xorm] [info] 2024/09/07 17:02:46.276218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.681ms +[xorm] [info] 2024/09/07 17:04:46.289655 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0843ms +[xorm] [info] 2024/09/07 17:06:46.294968 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1806ms +[xorm] [info] 2024/09/07 17:08:46.281118 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1487ms +[xorm] [info] 2024/09/07 17:10:46.281602 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5477ms +[xorm] [info] 2024/09/07 17:12:46.292766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3312ms +[xorm] [info] 2024/09/07 17:14:46.274753 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.9941ms +[xorm] [info] 2024/09/07 17:16:46.296668 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4607ms +[xorm] [info] 2024/09/07 17:18:46.294312 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1667ms +[xorm] [info] 2024/09/07 17:20:46.296628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7386ms +[xorm] [info] 2024/09/07 17:22:46.287750 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.985ms +[xorm] [info] 2024/09/07 17:24:46.290854 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6779ms +[xorm] [info] 2024/09/07 17:26:46.276257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6539ms +[xorm] [info] 2024/09/07 17:28:46.286517 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1073ms +[xorm] [info] 2024/09/07 17:30:46.305820 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0352ms +[xorm] [info] 2024/09/07 17:32:46.308924 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.0747ms +[xorm] [info] 2024/09/07 17:34:46.277202 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1675ms +[xorm] [info] 2024/09/07 17:36:46.289923 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3869ms +[xorm] [info] 2024/09/07 17:38:46.273348 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.0788ms +[xorm] [info] 2024/09/07 17:40:46.273483 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.8982ms +[xorm] [info] 2024/09/07 17:42:46.292864 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6456ms +[xorm] [info] 2024/09/07 17:44:46.299007 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9445ms +[xorm] [info] 2024/09/07 17:46:46.304406 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.9496ms +[xorm] [info] 2024/09/07 17:48:46.282069 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.1451ms +[xorm] [info] 2024/09/07 17:50:46.298964 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1087ms +[xorm] [info] 2024/09/07 17:52:46.292472 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3086ms +[xorm] [info] 2024/09/07 17:54:46.284579 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3405ms +[xorm] [info] 2024/09/07 17:56:46.290749 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8685ms +[xorm] [info] 2024/09/07 17:58:46.283463 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.9607ms +[xorm] [info] 2024/09/07 18:00:46.277334 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4654ms +[xorm] [info] 2024/09/07 18:02:46.288752 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9807ms +[xorm] [info] 2024/09/07 18:04:46.299653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5513ms +[xorm] [info] 2024/09/07 18:06:46.301058 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3233ms +[xorm] [info] 2024/09/07 18:08:46.273938 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.825ms +[xorm] [info] 2024/09/07 18:10:46.297678 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2795ms +[xorm] [info] 2024/09/07 18:12:46.294562 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9568ms +[xorm] [info] 2024/09/07 18:14:46.288925 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4926ms +[xorm] [info] 2024/09/07 18:16:46.292234 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8471ms +[xorm] [info] 2024/09/07 18:18:46.287360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2601ms +[xorm] [info] 2024/09/07 18:20:46.283401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.897ms +[xorm] [info] 2024/09/07 18:22:46.283039 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6766ms +[xorm] [info] 2024/09/07 18:24:46.296638 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4606ms +[xorm] [info] 2024/09/07 18:26:46.296885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6178ms +[xorm] [info] 2024/09/07 18:28:46.293776 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0082ms +[xorm] [info] 2024/09/07 18:30:46.296988 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6457ms +[xorm] [info] 2024/09/07 18:32:46.287895 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8098ms +[xorm] [info] 2024/09/07 18:34:46.283397 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5386ms +[xorm] [info] 2024/09/07 18:36:46.294985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2793ms +[xorm] [info] 2024/09/07 18:38:46.300377 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2686ms +[xorm] [info] 2024/09/07 18:40:46.277805 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0821ms +[xorm] [info] 2024/09/07 18:42:46.299378 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3597ms +[xorm] [info] 2024/09/07 18:44:46.293925 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3142ms +[xorm] [info] 2024/09/07 18:46:46.308000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.7041ms +[xorm] [info] 2024/09/07 18:48:46.286773 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2173ms +[xorm] [info] 2024/09/07 18:50:46.282812 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3683ms +[xorm] [info] 2024/09/07 18:52:46.284229 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7576ms +[xorm] [info] 2024/09/07 18:54:46.302674 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8397ms +[xorm] [info] 2024/09/07 18:56:46.279641 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6418ms +[xorm] [info] 2024/09/07 18:58:46.295342 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2389ms +[xorm] [info] 2024/09/07 19:00:46.293568 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7922ms +[xorm] [info] 2024/09/07 19:02:46.283650 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3923ms +[xorm] [info] 2024/09/07 19:04:46.300891 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.321ms +[xorm] [info] 2024/09/07 19:06:46.303814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.729ms +[xorm] [info] 2024/09/07 19:08:46.283163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.979ms +[xorm] [info] 2024/09/07 19:10:46.287089 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.933ms +[xorm] [info] 2024/09/07 19:12:46.277959 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0346ms +[xorm] [info] 2024/09/07 19:14:46.300405 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6639ms +[xorm] [info] 2024/09/07 19:16:46.288026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0411ms +[xorm] [info] 2024/09/07 19:18:46.294610 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2759ms +[xorm] [info] 2024/09/07 19:20:46.283518 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9299ms +[xorm] [info] 2024/09/07 19:22:46.286090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5732ms +[xorm] [info] 2024/09/07 19:24:46.286337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1181ms +[xorm] [info] 2024/09/07 19:26:46.288666 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4375ms +[xorm] [info] 2024/09/07 19:28:46.289635 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9806ms +[xorm] [info] 2024/09/07 19:30:46.283215 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4138ms +[xorm] [info] 2024/09/07 19:32:46.287969 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3143ms +[xorm] [info] 2024/09/07 19:34:46.295422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9187ms +[xorm] [info] 2024/09/07 19:36:46.288182 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.284ms +[xorm] [info] 2024/09/07 19:38:46.278381 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1616ms +[xorm] [info] 2024/09/07 19:40:46.291358 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7825ms +[xorm] [info] 2024/09/07 19:42:46.288330 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7948ms +[xorm] [info] 2024/09/07 19:44:46.292318 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3171ms +[xorm] [info] 2024/09/07 19:46:46.285315 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5358ms +[xorm] [info] 2024/09/07 19:48:46.291047 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0646ms +[xorm] [info] 2024/09/07 19:50:46.293901 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1068ms +[xorm] [info] 2024/09/07 19:52:46.289926 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5297ms +[xorm] [info] 2024/09/07 19:54:46.301945 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.8986ms +[xorm] [info] 2024/09/07 19:56:46.291170 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1167ms +[xorm] [info] 2024/09/07 19:58:46.290527 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5762ms +[xorm] [info] 2024/09/07 20:00:46.285935 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1573ms +[xorm] [info] 2024/09/07 20:02:46.288097 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7708ms +[xorm] [info] 2024/09/07 20:04:46.290010 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4149ms +[xorm] [info] 2024/09/07 20:06:46.290287 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0636ms +[xorm] [info] 2024/09/07 20:08:46.281337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7102ms +[xorm] [info] 2024/09/07 20:10:46.309301 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 98.1672ms +[xorm] [info] 2024/09/07 20:12:46.275196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.846ms +[xorm] [info] 2024/09/07 20:14:46.279739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.8717ms +[xorm] [info] 2024/09/07 20:16:46.304896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6972ms +[xorm] [info] 2024/09/07 20:18:46.298627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0726ms +[xorm] [info] 2024/09/07 20:20:46.282784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5546ms +[xorm] [info] 2024/09/07 20:22:46.293647 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4162ms +[xorm] [info] 2024/09/07 20:24:46.300965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.5687ms +[xorm] [info] 2024/09/07 20:26:46.294652 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3323ms +[xorm] [info] 2024/09/07 20:28:46.287471 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9374ms +[xorm] [info] 2024/09/07 20:30:46.300279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5039ms +[xorm] [info] 2024/09/07 20:32:46.284956 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9458ms +[xorm] [info] 2024/09/07 20:34:46.288020 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.938ms +[xorm] [info] 2024/09/07 20:36:46.276433 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7907ms +[xorm] [info] 2024/09/07 20:38:46.284870 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4365ms +[xorm] [info] 2024/09/07 20:40:46.290175 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8993ms +[xorm] [info] 2024/09/07 20:42:46.296579 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9013ms +[xorm] [info] 2024/09/07 20:44:46.289887 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0056ms +[xorm] [info] 2024/09/07 20:46:46.296310 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3598ms +[xorm] [info] 2024/09/07 20:48:46.291966 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.884ms +[xorm] [info] 2024/09/07 20:50:46.308723 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7533ms +[xorm] [info] 2024/09/07 20:52:46.285684 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.4866ms +[xorm] [info] 2024/09/07 20:54:46.281529 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3851ms +[xorm] [info] 2024/09/07 20:56:46.288497 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8068ms +[xorm] [info] 2024/09/07 20:58:46.288174 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3654ms +[xorm] [info] 2024/09/07 21:00:46.290284 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6482ms +[xorm] [info] 2024/09/07 21:02:46.287767 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3963ms +[xorm] [info] 2024/09/07 21:04:46.298747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4919ms +[xorm] [info] 2024/09/07 21:06:46.296824 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2764ms +[xorm] [info] 2024/09/07 21:08:46.290954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6815ms +[xorm] [info] 2024/09/07 21:10:46.298779 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6368ms +[xorm] [info] 2024/09/07 21:12:46.287040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7045ms +[xorm] [info] 2024/09/07 21:14:46.304958 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.336ms +[xorm] [info] 2024/09/07 21:16:46.273803 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.1771ms +[xorm] [info] 2024/09/07 21:18:46.294739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.885ms +[xorm] [info] 2024/09/07 21:20:46.288979 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4921ms +[xorm] [info] 2024/09/07 21:22:46.296841 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1055ms +[xorm] [info] 2024/09/07 21:24:46.291018 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.12ms +[xorm] [info] 2024/09/07 21:26:46.286677 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9475ms +[xorm] [info] 2024/09/07 21:28:46.297622 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9679ms +[xorm] [info] 2024/09/07 21:30:46.292162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1547ms +[xorm] [info] 2024/09/07 21:32:46.280918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1417ms +[xorm] [info] 2024/09/07 21:34:46.290539 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3856ms +[xorm] [info] 2024/09/07 21:36:46.288983 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2323ms +[xorm] [info] 2024/09/07 21:38:46.290389 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1655ms +[xorm] [info] 2024/09/07 21:40:46.293520 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6029ms +[xorm] [info] 2024/09/07 21:42:46.283906 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2757ms +[xorm] [info] 2024/09/07 21:44:46.277095 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6248ms +[xorm] [info] 2024/09/07 21:46:46.300265 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6901ms +[xorm] [info] 2024/09/07 21:48:46.292645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.6337ms +[xorm] [info] 2024/09/07 21:50:46.270967 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.8874ms +[xorm] [info] 2024/09/07 21:52:46.278172 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2329ms +[xorm] [info] 2024/09/07 21:54:46.292400 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.6684ms +[xorm] [info] 2024/09/07 21:56:46.276142 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.3581ms +[xorm] [info] 2024/09/07 21:58:46.296925 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.4801ms +[xorm] [info] 2024/09/07 22:00:46.280920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9703ms +[xorm] [info] 2024/09/07 22:02:46.288993 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7127ms +[xorm] [info] 2024/09/07 22:04:46.288653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1121ms +[xorm] [info] 2024/09/07 22:06:46.292399 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1176ms +[xorm] [info] 2024/09/07 22:08:46.294411 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1999ms +[xorm] [info] 2024/09/07 22:10:46.287429 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5314ms +[xorm] [info] 2024/09/07 22:12:46.294526 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2963ms +[xorm] [info] 2024/09/07 22:14:46.282004 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1624ms +[xorm] [info] 2024/09/07 22:16:46.287990 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9796ms +[xorm] [info] 2024/09/07 22:18:46.292593 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9526ms +[xorm] [info] 2024/09/07 22:20:46.303987 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8554ms +[xorm] [info] 2024/09/07 22:22:46.286246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8989ms +[xorm] [info] 2024/09/07 22:24:46.281173 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6618ms +[xorm] [info] 2024/09/07 22:26:46.278000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6873ms +[xorm] [info] 2024/09/07 22:28:46.307181 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5638ms +[xorm] [info] 2024/09/07 22:30:46.292777 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6381ms +[xorm] [info] 2024/09/07 22:32:46.294545 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4094ms +[xorm] [info] 2024/09/07 22:34:46.291767 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6141ms +[xorm] [info] 2024/09/07 22:36:46.293521 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9678ms +[xorm] [info] 2024/09/07 22:38:46.289573 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4433ms +[xorm] [info] 2024/09/07 22:40:46.296965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7081ms +[xorm] [info] 2024/09/07 22:42:46.297216 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3925ms +[xorm] [info] 2024/09/07 22:44:46.286240 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8823ms +[xorm] [info] 2024/09/07 22:46:46.282867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1139ms +[xorm] [info] 2024/09/07 22:48:46.285712 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7701ms +[xorm] [info] 2024/09/07 22:50:46.302788 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1344ms +[xorm] [info] 2024/09/07 22:52:46.304664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5238ms +[xorm] [info] 2024/09/07 22:54:46.299218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.8367ms +[xorm] [info] 2024/09/07 22:56:46.277300 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7727ms +[xorm] [info] 2024/09/07 22:58:46.289576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6458ms +[xorm] [info] 2024/09/07 23:00:46.291693 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2247ms +[xorm] [info] 2024/09/07 23:02:46.307395 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8744ms +[xorm] [info] 2024/09/07 23:04:46.296492 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8436ms +[xorm] [info] 2024/09/07 23:06:46.305327 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3594ms +[xorm] [info] 2024/09/07 23:08:46.301008 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6742ms +[xorm] [info] 2024/09/07 23:10:46.287764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5725ms +[xorm] [info] 2024/09/07 23:12:46.290604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2638ms +[xorm] [info] 2024/09/07 23:14:46.295163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6953ms +[xorm] [info] 2024/09/07 23:16:46.270784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.2954ms +[xorm] [info] 2024/09/07 23:18:46.291356 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9889ms +[xorm] [info] 2024/09/07 23:20:46.275541 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.5086ms +[xorm] [info] 2024/09/07 23:22:46.279219 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1895ms +[xorm] [info] 2024/09/07 23:24:46.284918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5835ms +[xorm] [info] 2024/09/07 23:26:46.305967 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2921ms +[xorm] [info] 2024/09/07 23:28:46.278739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.9606ms +[xorm] [info] 2024/09/07 23:30:46.304402 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2387ms +[xorm] [info] 2024/09/07 23:32:46.290147 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9454ms +[xorm] [info] 2024/09/07 23:34:46.302552 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.439ms +[xorm] [info] 2024/09/07 23:36:46.294701 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5183ms +[xorm] [info] 2024/09/07 23:38:46.305838 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6238ms +[xorm] [info] 2024/09/07 23:40:46.291613 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6528ms +[xorm] [info] 2024/09/07 23:42:46.295622 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.425ms +[xorm] [info] 2024/09/07 23:44:46.285482 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0507ms +[xorm] [info] 2024/09/07 23:46:46.283699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1995ms +[xorm] [info] 2024/09/07 23:48:46.279052 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3417ms +[xorm] [info] 2024/09/07 23:50:46.282402 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1777ms +[xorm] [info] 2024/09/07 23:52:46.284846 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7083ms +[xorm] [info] 2024/09/07 23:54:46.304661 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7505ms +[xorm] [info] 2024/09/07 23:56:46.308435 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5545ms +[xorm] [info] 2024/09/07 23:58:46.274683 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.217ms +[xorm] [info] 2024/09/08 00:00:46.277794 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.7926ms +[xorm] [info] 2024/09/08 00:02:46.279064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.1614ms +[xorm] [info] 2024/09/08 00:04:46.284257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6189ms +[xorm] [info] 2024/09/08 00:06:46.282645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8904ms +[xorm] [info] 2024/09/08 00:08:46.292016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5786ms +[xorm] [info] 2024/09/08 00:10:46.281236 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1584ms +[xorm] [info] 2024/09/08 00:12:46.275721 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4739ms +[xorm] [info] 2024/09/08 00:14:46.283712 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2581ms +[xorm] [info] 2024/09/08 00:16:46.279728 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2559ms +[xorm] [info] 2024/09/08 00:18:46.292751 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5234ms +[xorm] [info] 2024/09/08 00:20:46.275030 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.977ms +[xorm] [info] 2024/09/08 00:22:46.290646 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7826ms +[xorm] [info] 2024/09/08 00:24:46.302025 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0535ms +[xorm] [info] 2024/09/08 00:26:46.311096 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.3801ms +[xorm] [info] 2024/09/08 00:28:46.307983 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.0124ms +[xorm] [info] 2024/09/08 00:30:46.278981 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5579ms +[xorm] [info] 2024/09/08 00:32:46.281233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6647ms +[xorm] [info] 2024/09/08 00:34:46.287338 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0424ms +[xorm] [info] 2024/09/08 00:36:46.293555 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9933ms +[xorm] [info] 2024/09/08 00:38:46.288875 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6442ms +[xorm] [info] 2024/09/08 00:40:46.288629 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0079ms +[xorm] [info] 2024/09/08 00:42:46.303060 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6038ms +[xorm] [info] 2024/09/08 00:44:46.283624 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1184ms +[xorm] [info] 2024/09/08 00:46:46.292792 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5624ms +[xorm] [info] 2024/09/08 00:48:46.287960 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7941ms +[xorm] [info] 2024/09/08 00:50:46.297392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0137ms +[xorm] [info] 2024/09/08 00:52:46.301844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7922ms +[xorm] [info] 2024/09/08 00:54:46.293980 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8016ms +[xorm] [info] 2024/09/08 00:56:46.285526 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1263ms +[xorm] [info] 2024/09/08 00:58:46.283255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2593ms +[xorm] [info] 2024/09/08 01:00:46.303857 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9369ms +[xorm] [info] 2024/09/08 01:02:46.291008 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2784ms +[xorm] [info] 2024/09/08 01:04:46.279790 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7994ms +[xorm] [info] 2024/09/08 01:06:46.290121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1741ms +[xorm] [info] 2024/09/08 01:08:46.300945 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9759ms +[xorm] [info] 2024/09/08 01:10:46.297087 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4268ms +[xorm] [info] 2024/09/08 01:12:46.293618 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8339ms +[xorm] [info] 2024/09/08 01:14:46.297447 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0993ms +[xorm] [info] 2024/09/08 01:16:46.305345 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3653ms +[xorm] [info] 2024/09/08 01:18:46.293896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8203ms +[xorm] [info] 2024/09/08 01:20:46.297028 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9998ms +[xorm] [info] 2024/09/08 01:22:46.287739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5673ms +[xorm] [info] 2024/09/08 01:24:46.295754 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7507ms +[xorm] [info] 2024/09/08 01:26:46.280517 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.6117ms +[xorm] [info] 2024/09/08 01:28:46.292718 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9364ms +[xorm] [info] 2024/09/08 01:30:46.290558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5091ms +[xorm] [info] 2024/09/08 01:32:46.306190 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1954ms +[xorm] [info] 2024/09/08 01:34:46.283812 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.8415ms +[xorm] [info] 2024/09/08 01:36:46.277190 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6656ms +[xorm] [info] 2024/09/08 01:38:46.283361 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7295ms +[xorm] [info] 2024/09/08 01:40:46.294399 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2428ms +[xorm] [info] 2024/09/08 01:42:46.278115 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9533ms +[xorm] [info] 2024/09/08 01:44:46.286364 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1483ms +[xorm] [info] 2024/09/08 01:46:46.280213 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2145ms +[xorm] [info] 2024/09/08 01:48:46.274694 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.522ms +[xorm] [info] 2024/09/08 01:50:46.270973 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.1357ms +[xorm] [info] 2024/09/08 01:52:46.294949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.184ms +[xorm] [info] 2024/09/08 01:54:46.289324 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2075ms +[xorm] [info] 2024/09/08 01:56:46.296589 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4336ms +[xorm] [info] 2024/09/08 01:58:46.289617 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8531ms +[xorm] [info] 2024/09/08 02:00:46.305074 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3645ms +[xorm] [info] 2024/09/08 02:02:46.276947 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4931ms +[xorm] [info] 2024/09/08 02:04:46.291438 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3931ms +[xorm] [info] 2024/09/08 02:06:46.275182 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.702ms +[xorm] [info] 2024/09/08 02:08:46.293372 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2031ms +[xorm] [info] 2024/09/08 02:10:46.287047 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8901ms +[xorm] [info] 2024/09/08 02:12:46.286590 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7979ms +[xorm] [info] 2024/09/08 02:14:46.291028 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6825ms +[xorm] [info] 2024/09/08 02:16:46.281994 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2416ms +[xorm] [info] 2024/09/08 02:18:46.291062 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.898ms +[xorm] [info] 2024/09/08 02:20:46.290207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7546ms +[xorm] [info] 2024/09/08 02:22:46.271758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.8859ms +[xorm] [info] 2024/09/08 02:24:46.280792 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3264ms +[xorm] [info] 2024/09/08 02:26:46.283547 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5239ms +[xorm] [info] 2024/09/08 02:28:46.284319 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4885ms +[xorm] [info] 2024/09/08 02:30:46.296933 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8874ms +[xorm] [info] 2024/09/08 02:32:46.300220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2687ms +[xorm] [info] 2024/09/08 02:34:46.284779 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4263ms +[xorm] [info] 2024/09/08 02:36:46.289241 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.266ms +[xorm] [info] 2024/09/08 02:38:46.278781 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.6628ms +[xorm] [info] 2024/09/08 02:40:46.292866 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3316ms +[xorm] [info] 2024/09/08 02:42:46.282863 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7621ms +[xorm] [info] 2024/09/08 02:44:46.294601 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8143ms +[xorm] [info] 2024/09/08 02:46:46.287785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5132ms +[xorm] [info] 2024/09/08 02:48:46.301196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7715ms +[xorm] [info] 2024/09/08 02:50:46.278406 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2276ms +[xorm] [info] 2024/09/08 02:52:46.281768 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0916ms +[xorm] [info] 2024/09/08 02:54:46.288830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3547ms +[xorm] [info] 2024/09/08 02:56:46.291325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6085ms +[xorm] [info] 2024/09/08 02:58:46.301051 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.6254ms +[xorm] [info] 2024/09/08 03:00:46.290423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7514ms +[xorm] [info] 2024/09/08 03:02:46.275873 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.3498ms +[xorm] [info] 2024/09/08 03:04:46.293957 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.524ms +[xorm] [info] 2024/09/08 03:06:46.297207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0734ms +[xorm] [info] 2024/09/08 03:08:46.274707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5866ms +[xorm] [info] 2024/09/08 03:10:46.289456 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9489ms +[xorm] [info] 2024/09/08 03:12:46.294436 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5403ms +[xorm] [info] 2024/09/08 03:14:46.301592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.015ms +[xorm] [info] 2024/09/08 03:16:46.283359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3409ms +[xorm] [info] 2024/09/08 03:18:46.290859 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5742ms +[xorm] [info] 2024/09/08 03:20:46.285482 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2333ms +[xorm] [info] 2024/09/08 03:22:46.292055 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1205ms +[xorm] [info] 2024/09/08 03:24:46.293364 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7756ms +[xorm] [info] 2024/09/08 03:26:46.284648 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7839ms +[xorm] [info] 2024/09/08 03:28:46.296512 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0779ms +[xorm] [info] 2024/09/08 03:30:46.273183 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0953ms +[xorm] [info] 2024/09/08 03:32:46.294279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4054ms +[xorm] [info] 2024/09/08 03:34:46.288634 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0254ms +[xorm] [info] 2024/09/08 03:36:46.297893 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2656ms +[xorm] [info] 2024/09/08 03:38:46.291544 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4489ms +[xorm] [info] 2024/09/08 03:40:46.297465 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8002ms +[xorm] [info] 2024/09/08 03:42:46.292358 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7942ms +[xorm] [info] 2024/09/08 03:44:46.289295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8309ms +[xorm] [info] 2024/09/08 03:46:46.277712 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8092ms +[xorm] [info] 2024/09/08 03:48:46.291689 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9764ms +[xorm] [info] 2024/09/08 03:50:46.295590 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1107ms +[xorm] [info] 2024/09/08 03:52:46.289641 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7462ms +[xorm] [info] 2024/09/08 03:54:46.274829 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.6252ms +[xorm] [info] 2024/09/08 03:56:46.294962 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7529ms +[xorm] [info] 2024/09/08 03:58:46.298830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1116ms +[xorm] [info] 2024/09/08 04:00:46.297579 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3118ms +[xorm] [info] 2024/09/08 04:02:46.285108 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7686ms +[xorm] [info] 2024/09/08 04:04:46.293378 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4865ms +[xorm] [info] 2024/09/08 04:06:46.282902 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5566ms +[xorm] [info] 2024/09/08 04:08:46.277716 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.245ms +[xorm] [info] 2024/09/08 04:10:46.292762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5186ms +[xorm] [info] 2024/09/08 04:12:46.303897 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5943ms +[xorm] [info] 2024/09/08 04:14:46.296431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1484ms +[xorm] [info] 2024/09/08 04:16:46.282053 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9077ms +[xorm] [info] 2024/09/08 04:18:46.283155 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.63ms +[xorm] [info] 2024/09/08 04:20:46.282697 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5598ms +[xorm] [info] 2024/09/08 04:22:46.284944 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4793ms +[xorm] [info] 2024/09/08 04:24:46.272998 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.6349ms +[xorm] [info] 2024/09/08 04:26:46.278255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3626ms +[xorm] [info] 2024/09/08 04:28:46.277172 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5814ms +[xorm] [info] 2024/09/08 04:30:46.293279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.455ms +[xorm] [info] 2024/09/08 04:32:46.288472 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9395ms +[xorm] [info] 2024/09/08 04:34:46.278915 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0481ms +[xorm] [info] 2024/09/08 04:36:46.276821 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.9458ms +[xorm] [info] 2024/09/08 04:38:46.307354 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5779ms +[xorm] [info] 2024/09/08 04:40:46.278946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0212ms +[xorm] [info] 2024/09/08 04:42:46.286299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9883ms +[xorm] [info] 2024/09/08 04:44:46.304550 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.4624ms +[xorm] [info] 2024/09/08 04:46:46.293537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0958ms +[xorm] [info] 2024/09/08 04:48:46.272370 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.3449ms +[xorm] [info] 2024/09/08 04:50:46.280521 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.9888ms +[xorm] [info] 2024/09/08 04:52:46.284766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1495ms +[xorm] [info] 2024/09/08 04:54:46.286277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3486ms +[xorm] [info] 2024/09/08 04:56:46.298673 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.9595ms +[xorm] [info] 2024/09/08 04:58:46.288850 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6534ms +[xorm] [info] 2024/09/08 05:00:46.282764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9745ms +[xorm] [info] 2024/09/08 05:02:46.287662 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5699ms +[xorm] [info] 2024/09/08 05:04:46.290249 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.145ms +[xorm] [info] 2024/09/08 05:06:46.286606 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1811ms +[xorm] [info] 2024/09/08 05:08:46.286645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5714ms +[xorm] [info] 2024/09/08 05:10:46.287593 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3455ms +[xorm] [info] 2024/09/08 05:12:46.298821 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.5923ms +[xorm] [info] 2024/09/08 05:14:46.279928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2444ms +[xorm] [info] 2024/09/08 05:16:46.280363 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8158ms +[xorm] [info] 2024/09/08 05:18:46.299900 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7896ms +[xorm] [info] 2024/09/08 05:20:46.282986 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0672ms +[xorm] [info] 2024/09/08 05:22:46.297646 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3138ms +[xorm] [info] 2024/09/08 05:24:46.282791 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5073ms +[xorm] [info] 2024/09/08 05:26:46.295557 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6613ms +[xorm] [info] 2024/09/08 05:28:46.283608 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4846ms +[xorm] [info] 2024/09/08 05:30:46.281477 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7625ms +[xorm] [info] 2024/09/08 05:32:46.290250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1106ms +[xorm] [info] 2024/09/08 05:34:46.290880 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5445ms +[xorm] [info] 2024/09/08 05:36:46.301000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7931ms +[xorm] [info] 2024/09/08 05:38:46.288434 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6876ms +[xorm] [info] 2024/09/08 05:40:46.308274 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0156ms +[xorm] [info] 2024/09/08 05:42:46.293967 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.808ms +[xorm] [info] 2024/09/08 05:44:46.290362 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4576ms +[xorm] [info] 2024/09/08 05:46:46.299169 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1731ms +[xorm] [info] 2024/09/08 05:48:46.295318 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6259ms +[xorm] [info] 2024/09/08 05:50:46.273335 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.575ms +[xorm] [info] 2024/09/08 05:52:46.294528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2235ms +[xorm] [info] 2024/09/08 05:54:46.285421 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.268ms +[xorm] [info] 2024/09/08 05:56:46.287193 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6926ms +[xorm] [info] 2024/09/08 05:58:46.300871 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1624ms +[xorm] [info] 2024/09/08 06:00:46.276021 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6257ms +[xorm] [info] 2024/09/08 06:02:46.290510 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6114ms +[xorm] [info] 2024/09/08 06:04:46.298809 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8835ms +[xorm] [info] 2024/09/08 06:06:46.286642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7468ms +[xorm] [info] 2024/09/08 06:08:46.291558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6745ms +[xorm] [info] 2024/09/08 06:10:46.297869 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.9987ms +[xorm] [info] 2024/09/08 06:12:46.300830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1228ms +[xorm] [info] 2024/09/08 06:14:46.279995 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.8203ms +[xorm] [info] 2024/09/08 06:16:46.294295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.1849ms +[xorm] [info] 2024/09/08 06:18:46.291227 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3468ms +[xorm] [info] 2024/09/08 06:20:46.301522 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4926ms +[xorm] [info] 2024/09/08 06:22:46.290547 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1475ms +[xorm] [info] 2024/09/08 06:24:46.286195 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.5651ms +[xorm] [info] 2024/09/08 06:26:46.280454 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.883ms +[xorm] [info] 2024/09/08 06:28:46.276370 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0159ms +[xorm] [info] 2024/09/08 06:30:46.289451 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6762ms +[xorm] [info] 2024/09/08 06:32:46.293063 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4071ms +[xorm] [info] 2024/09/08 06:34:46.299988 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.5744ms +[xorm] [info] 2024/09/08 06:36:46.276804 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7984ms +[xorm] [info] 2024/09/08 06:38:46.285995 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2802ms +[xorm] [info] 2024/09/08 06:40:46.301340 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.9018ms +[xorm] [info] 2024/09/08 06:42:46.275536 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4127ms +[xorm] [info] 2024/09/08 06:44:46.276216 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9878ms +[xorm] [info] 2024/09/08 06:46:46.287770 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2391ms +[xorm] [info] 2024/09/08 06:48:46.279456 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3688ms +[xorm] [info] 2024/09/08 06:50:46.297410 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9997ms +[xorm] [info] 2024/09/08 06:52:46.279301 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.58ms +[xorm] [info] 2024/09/08 06:54:46.285942 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1932ms +[xorm] [info] 2024/09/08 06:56:46.289976 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7533ms +[xorm] [info] 2024/09/08 06:58:46.299100 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5703ms +[xorm] [info] 2024/09/08 07:00:46.279945 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.781ms +[xorm] [info] 2024/09/08 07:02:46.280739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1789ms +[xorm] [info] 2024/09/08 07:04:46.297802 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2175ms +[xorm] [info] 2024/09/08 07:06:46.287269 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1276ms +[xorm] [info] 2024/09/08 07:08:46.292250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5022ms +[xorm] [info] 2024/09/08 07:10:46.296741 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9426ms +[xorm] [info] 2024/09/08 07:12:46.281000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7205ms +[xorm] [info] 2024/09/08 07:14:46.288294 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0541ms +[xorm] [info] 2024/09/08 07:16:46.307838 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3ms +[xorm] [info] 2024/09/08 07:18:46.280521 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.689ms +[xorm] [info] 2024/09/08 07:20:46.287132 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6976ms +[xorm] [info] 2024/09/08 07:22:46.274631 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6298ms +[xorm] [info] 2024/09/08 07:24:46.283490 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3027ms +[xorm] [info] 2024/09/08 07:26:46.272788 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.4146ms +[xorm] [info] 2024/09/08 07:28:46.284990 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8792ms +[xorm] [info] 2024/09/08 07:30:46.281828 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5699ms +[xorm] [info] 2024/09/08 07:32:46.283755 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2258ms +[xorm] [info] 2024/09/08 07:34:46.295412 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6783ms +[xorm] [info] 2024/09/08 07:36:46.293270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0546ms +[xorm] [info] 2024/09/08 07:38:46.298936 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.5934ms +[xorm] [info] 2024/09/08 07:40:46.277594 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8579ms +[xorm] [info] 2024/09/08 07:42:46.288616 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4317ms +[xorm] [info] 2024/09/08 07:44:46.292920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4959ms +[xorm] [info] 2024/09/08 07:46:46.296571 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7664ms +[xorm] [info] 2024/09/08 07:48:46.287422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6306ms +[xorm] [info] 2024/09/08 07:50:46.294444 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.001ms +[xorm] [info] 2024/09/08 07:52:46.275259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.289ms +[xorm] [info] 2024/09/08 07:54:46.287393 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0811ms +[xorm] [info] 2024/09/08 07:56:46.298991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9979ms +[xorm] [info] 2024/09/08 07:58:46.280331 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0161ms +[xorm] [info] 2024/09/08 08:00:46.283710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4433ms +[xorm] [info] 2024/09/08 08:02:46.300160 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.0559ms +[xorm] [info] 2024/09/08 08:04:46.276028 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2262ms +[xorm] [info] 2024/09/08 08:06:46.294292 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0197ms +[xorm] [info] 2024/09/08 08:08:46.283517 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0643ms +[xorm] [info] 2024/09/08 08:10:46.292663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0767ms +[xorm] [info] 2024/09/08 08:12:46.304294 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6328ms +[xorm] [info] 2024/09/08 08:14:46.300861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4466ms +[xorm] [info] 2024/09/08 08:16:46.282972 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.926ms +[xorm] [info] 2024/09/08 08:18:46.287558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1008ms +[xorm] [info] 2024/09/08 08:20:46.280428 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9485ms +[xorm] [info] 2024/09/08 08:22:46.284506 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2427ms +[xorm] [info] 2024/09/08 08:24:46.278753 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3065ms +[xorm] [info] 2024/09/08 08:26:46.280396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.6857ms +[xorm] [info] 2024/09/08 08:28:46.281867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3309ms +[xorm] [info] 2024/09/08 08:30:46.288494 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1955ms +[xorm] [info] 2024/09/08 08:32:46.285341 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3486ms +[xorm] [info] 2024/09/08 08:34:46.300744 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6551ms +[xorm] [info] 2024/09/08 08:36:46.277610 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6732ms +[xorm] [info] 2024/09/08 08:38:46.299510 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3616ms +[xorm] [info] 2024/09/08 08:40:46.299830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0195ms +[xorm] [info] 2024/09/08 08:42:46.289151 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6162ms +[xorm] [info] 2024/09/08 08:44:46.283488 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7471ms +[xorm] [info] 2024/09/08 08:46:46.277625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2001ms +[xorm] [info] 2024/09/08 08:48:46.297490 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.2236ms +[xorm] [info] 2024/09/08 08:50:46.289566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.744ms +[xorm] [info] 2024/09/08 08:52:46.286228 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3686ms +[xorm] [info] 2024/09/08 08:54:46.289276 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7639ms +[xorm] [info] 2024/09/08 08:56:46.289943 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8028ms +[xorm] [info] 2024/09/08 08:58:46.283913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1884ms +[xorm] [info] 2024/09/08 09:00:46.290505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3518ms +[xorm] [info] 2024/09/08 09:02:46.279191 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8045ms +[xorm] [info] 2024/09/08 09:04:46.281290 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5561ms +[xorm] [info] 2024/09/08 09:06:46.286380 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5646ms +[xorm] [info] 2024/09/08 09:08:46.276627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0216ms +[xorm] [info] 2024/09/08 09:10:46.288567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1899ms +[xorm] [info] 2024/09/08 09:12:46.283828 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8682ms +[xorm] [info] 2024/09/08 09:14:46.293406 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.073ms +[xorm] [info] 2024/09/08 09:16:46.300356 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5474ms +[xorm] [info] 2024/09/08 09:18:46.295421 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5667ms +[xorm] [info] 2024/09/08 09:20:46.298948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.311ms +[xorm] [info] 2024/09/08 09:22:46.276379 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8792ms +[xorm] [info] 2024/09/08 09:24:46.292570 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7725ms +[xorm] [info] 2024/09/08 09:26:46.281538 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3556ms +[xorm] [info] 2024/09/08 09:28:46.283219 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8466ms +[xorm] [info] 2024/09/08 09:30:46.286088 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3362ms +[xorm] [info] 2024/09/08 09:32:46.282979 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3654ms +[xorm] [info] 2024/09/08 09:34:46.282971 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4791ms +[xorm] [info] 2024/09/08 09:36:46.289326 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3826ms +[xorm] [info] 2024/09/08 09:38:46.295117 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9989ms +[xorm] [info] 2024/09/08 09:40:46.289370 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.5737ms +[xorm] [info] 2024/09/08 09:42:46.293881 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9347ms +[xorm] [info] 2024/09/08 09:44:46.300279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9753ms +[xorm] [info] 2024/09/08 09:46:46.298877 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2483ms +[xorm] [info] 2024/09/08 09:48:46.291824 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7298ms +[xorm] [info] 2024/09/08 09:50:46.297929 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1344ms +[xorm] [info] 2024/09/08 09:52:46.290351 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.454ms +[xorm] [info] 2024/09/08 09:54:46.288134 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9365ms +[xorm] [info] 2024/09/08 09:56:46.301513 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9644ms +[xorm] [info] 2024/09/08 09:58:46.293489 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3319ms +[xorm] [info] 2024/09/08 10:00:46.291171 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2027ms +[xorm] [info] 2024/09/08 10:02:46.289284 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0024ms +[xorm] [info] 2024/09/08 10:04:46.292057 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3944ms +[xorm] [info] 2024/09/08 10:06:46.284283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8154ms +[xorm] [info] 2024/09/08 10:08:46.293814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8054ms +[xorm] [info] 2024/09/08 10:10:46.293518 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8779ms +[xorm] [info] 2024/09/08 10:12:46.305090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7151ms +[xorm] [info] 2024/09/08 10:14:46.288151 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4672ms +[xorm] [info] 2024/09/08 10:16:46.281227 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4632ms +[xorm] [info] 2024/09/08 10:18:46.284323 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4529ms +[xorm] [info] 2024/09/08 10:20:46.288883 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6594ms +[xorm] [info] 2024/09/08 10:22:46.293909 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7943ms +[xorm] [info] 2024/09/08 10:24:46.283505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.812ms +[xorm] [info] 2024/09/08 10:26:46.297479 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4865ms +[xorm] [info] 2024/09/08 10:28:46.277760 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.4234ms +[xorm] [info] 2024/09/08 10:30:46.294594 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8277ms +[xorm] [info] 2024/09/08 10:32:46.284059 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2779ms +[xorm] [info] 2024/09/08 10:34:46.299470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3577ms +[xorm] [info] 2024/09/08 10:36:46.306025 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0712ms +[xorm] [info] 2024/09/08 10:38:46.291439 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.007ms +[xorm] [info] 2024/09/08 10:40:46.285064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0869ms +[xorm] [info] 2024/09/08 10:42:46.311753 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.0553ms +[xorm] [info] 2024/09/08 10:44:46.276020 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9645ms +[xorm] [info] 2024/09/08 10:46:46.293193 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.6707ms +[xorm] [info] 2024/09/08 10:48:46.291095 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1218ms +[xorm] [info] 2024/09/08 10:50:46.284030 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6957ms +[xorm] [info] 2024/09/08 10:52:46.278669 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1506ms +[xorm] [info] 2024/09/08 10:54:46.304272 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5957ms +[xorm] [info] 2024/09/08 10:56:46.292894 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6149ms +[xorm] [info] 2024/09/08 10:58:46.277479 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.6968ms +[xorm] [info] 2024/09/08 11:00:46.288750 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0583ms +[xorm] [info] 2024/09/08 11:02:46.282797 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5066ms +[xorm] [info] 2024/09/08 11:04:46.282279 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8232ms +[xorm] [info] 2024/09/08 11:06:46.287809 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.064ms +[xorm] [info] 2024/09/08 11:08:46.294328 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6872ms +[xorm] [info] 2024/09/08 11:10:46.300772 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6218ms +[xorm] [info] 2024/09/08 11:12:46.283430 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.234ms +[xorm] [info] 2024/09/08 11:14:46.290203 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8656ms +[xorm] [info] 2024/09/08 11:16:46.290627 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7405ms +[xorm] [info] 2024/09/08 11:18:46.287722 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.628ms +[xorm] [info] 2024/09/08 11:20:46.288810 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.713ms +[xorm] [info] 2024/09/08 11:22:46.301906 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6632ms +[xorm] [info] 2024/09/08 11:24:46.291747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.074ms +[xorm] [info] 2024/09/08 11:26:46.290463 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0599ms +[xorm] [info] 2024/09/08 11:28:46.274790 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8087ms +[xorm] [info] 2024/09/08 11:30:46.297989 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7941ms +[xorm] [info] 2024/09/08 11:32:46.290823 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8095ms +[xorm] [info] 2024/09/08 11:34:46.284363 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9638ms +[xorm] [info] 2024/09/08 11:36:46.283796 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7238ms +[xorm] [info] 2024/09/08 11:38:46.279448 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3552ms +[xorm] [info] 2024/09/08 11:40:46.284556 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.6898ms +[xorm] [info] 2024/09/08 11:42:46.281142 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3365ms +[xorm] [info] 2024/09/08 11:44:46.284715 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.0791ms +[xorm] [info] 2024/09/08 11:46:46.278941 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4063ms +[xorm] [info] 2024/09/08 11:48:46.297791 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.5862ms +[xorm] [info] 2024/09/08 11:50:46.293232 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5638ms +[xorm] [info] 2024/09/08 11:52:46.307270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.3536ms +[xorm] [info] 2024/09/08 11:54:46.281663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.672ms +[xorm] [info] 2024/09/08 11:56:46.289044 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1966ms +[xorm] [info] 2024/09/08 11:58:46.277280 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0192ms +[xorm] [info] 2024/09/08 12:00:46.282554 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7077ms +[xorm] [info] 2024/09/08 12:02:46.279425 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1799ms +[xorm] [info] 2024/09/08 12:04:46.300305 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3698ms +[xorm] [info] 2024/09/08 12:06:46.279715 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.2805ms +[xorm] [info] 2024/09/08 12:08:46.294086 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6609ms +[xorm] [info] 2024/09/08 12:10:46.291359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.2895ms +[xorm] [info] 2024/09/08 12:12:46.291633 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0576ms +[xorm] [info] 2024/09/08 12:14:46.273394 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5299ms +[xorm] [info] 2024/09/08 12:16:46.277378 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6112ms +[xorm] [info] 2024/09/08 12:18:46.297818 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2683ms +[xorm] [info] 2024/09/08 12:20:46.282270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8753ms +[xorm] [info] 2024/09/08 12:22:46.284368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5084ms +[xorm] [info] 2024/09/08 12:24:46.295612 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8059ms +[xorm] [info] 2024/09/08 12:26:46.282700 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5322ms +[xorm] [info] 2024/09/08 12:28:46.299928 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5477ms +[xorm] [info] 2024/09/08 12:30:46.293270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4938ms +[xorm] [info] 2024/09/08 12:32:46.292401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4413ms +[xorm] [info] 2024/09/08 12:34:46.279638 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.2598ms +[xorm] [info] 2024/09/08 12:36:46.295246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2874ms +[xorm] [info] 2024/09/08 12:38:46.299978 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9764ms +[xorm] [info] 2024/09/08 12:40:46.286871 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0901ms +[xorm] [info] 2024/09/08 12:42:46.293859 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.267ms +[xorm] [info] 2024/09/08 12:44:46.306604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.193ms +[xorm] [info] 2024/09/08 12:46:46.298060 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7238ms +[xorm] [info] 2024/09/08 12:48:46.302353 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2931ms +[xorm] [info] 2024/09/08 12:50:46.287510 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1374ms +[xorm] [info] 2024/09/08 12:52:46.278571 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5741ms +[xorm] [info] 2024/09/08 12:54:46.278591 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1699ms +[xorm] [info] 2024/09/08 12:56:46.295934 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1038ms +[xorm] [info] 2024/09/08 12:58:46.277549 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.3266ms +[xorm] [info] 2024/09/08 13:00:46.303756 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1941ms +[xorm] [info] 2024/09/08 13:02:46.297404 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4249ms +[xorm] [info] 2024/09/08 13:04:46.284347 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3376ms +[xorm] [info] 2024/09/08 13:06:46.292940 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1791ms +[xorm] [info] 2024/09/08 13:08:46.288087 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9684ms +[xorm] [info] 2024/09/08 13:10:46.296374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0495ms +[xorm] [info] 2024/09/08 13:12:46.280244 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.4591ms +[xorm] [info] 2024/09/08 13:14:46.291844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4819ms +[xorm] [info] 2024/09/08 13:16:46.281660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1287ms +[xorm] [info] 2024/09/08 13:18:46.284246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.08ms +[xorm] [info] 2024/09/08 13:20:46.290945 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3292ms +[xorm] [info] 2024/09/08 13:22:46.274270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.4845ms +[xorm] [info] 2024/09/08 13:24:46.304337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 97.0012ms +[xorm] [info] 2024/09/08 13:26:46.285926 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8737ms +[xorm] [info] 2024/09/08 13:28:46.283769 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6456ms +[xorm] [info] 2024/09/08 13:30:46.281835 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2855ms +[xorm] [info] 2024/09/08 13:32:46.305049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6611ms +[xorm] [info] 2024/09/08 13:34:46.281269 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1498ms +[xorm] [info] 2024/09/08 13:36:46.294017 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2569ms +[xorm] [info] 2024/09/08 13:38:46.283383 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5373ms +[xorm] [info] 2024/09/08 13:40:46.300708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5153ms +[xorm] [info] 2024/09/08 13:42:46.282488 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2014ms +[xorm] [info] 2024/09/08 13:44:46.291853 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0659ms +[xorm] [info] 2024/09/08 13:46:46.299675 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1431ms +[xorm] [info] 2024/09/08 13:48:46.295895 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0217ms +[xorm] [info] 2024/09/08 13:50:46.307194 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9122ms +[xorm] [info] 2024/09/08 13:52:46.289434 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.4459ms +[xorm] [info] 2024/09/08 13:54:46.286585 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2713ms +[xorm] [info] 2024/09/08 13:56:46.291447 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2334ms +[xorm] [info] 2024/09/08 13:58:46.278086 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3165ms +[xorm] [info] 2024/09/08 14:00:46.301369 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8051ms +[xorm] [info] 2024/09/08 14:02:46.309417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.1472ms +[xorm] [info] 2024/09/08 14:04:46.285002 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9549ms +[xorm] [info] 2024/09/08 14:06:46.290374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.8115ms +[xorm] [info] 2024/09/08 14:08:46.293536 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.394ms +[xorm] [info] 2024/09/08 14:10:46.323861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 112.9935ms +[xorm] [info] 2024/09/08 14:12:46.284818 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.9291ms +[xorm] [info] 2024/09/08 14:14:46.298264 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8341ms +[xorm] [info] 2024/09/08 14:16:46.294853 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9676ms +[xorm] [info] 2024/09/08 14:18:46.298776 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3333ms +[xorm] [info] 2024/09/08 14:20:46.289913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8672ms +[xorm] [info] 2024/09/08 14:22:46.302108 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0451ms +[xorm] [info] 2024/09/08 14:24:46.287592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.475ms +[xorm] [info] 2024/09/08 14:26:46.300040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7835ms +[xorm] [info] 2024/09/08 14:28:46.296567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9273ms +[xorm] [info] 2024/09/08 14:30:46.289149 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6172ms +[xorm] [info] 2024/09/08 14:32:46.292052 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0629ms +[xorm] [info] 2024/09/08 14:34:46.290060 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5958ms +[xorm] [info] 2024/09/08 14:36:46.290467 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.872ms +[xorm] [info] 2024/09/08 14:38:46.275130 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.4824ms +[xorm] [info] 2024/09/08 14:40:46.287431 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9101ms +[xorm] [info] 2024/09/08 14:42:46.291899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1441ms +[xorm] [info] 2024/09/08 14:44:46.294049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1642ms +[xorm] [info] 2024/09/08 14:46:46.305974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9909ms +[xorm] [info] 2024/09/08 14:48:46.287124 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.952ms +[xorm] [info] 2024/09/08 14:50:46.299972 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.1199ms +[xorm] [info] 2024/09/08 14:52:46.299702 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5426ms +[xorm] [info] 2024/09/08 14:54:46.293233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8692ms +[xorm] [info] 2024/09/08 14:56:46.302962 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2942ms +[xorm] [info] 2024/09/08 14:58:46.286451 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3943ms +[xorm] [info] 2024/09/08 15:00:46.300670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6973ms +[xorm] [info] 2024/09/08 15:02:46.301015 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4745ms +[xorm] [info] 2024/09/08 15:04:46.276877 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8522ms +[xorm] [info] 2024/09/08 15:06:46.294884 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2765ms +[xorm] [info] 2024/09/08 15:08:46.294009 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5792ms +[xorm] [info] 2024/09/08 15:10:46.298703 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4448ms +[xorm] [info] 2024/09/08 15:12:46.286405 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.457ms +[xorm] [info] 2024/09/08 15:14:46.278650 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2757ms +[xorm] [info] 2024/09/08 15:16:46.290448 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6979ms +[xorm] [info] 2024/09/08 15:18:46.275611 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3878ms +[xorm] [info] 2024/09/08 15:20:46.283826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4154ms +[xorm] [info] 2024/09/08 15:22:46.292336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7143ms +[xorm] [info] 2024/09/08 15:24:46.287271 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9407ms +[xorm] [info] 2024/09/08 15:26:46.295969 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3917ms +[xorm] [info] 2024/09/08 15:28:46.281176 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7296ms +[xorm] [info] 2024/09/08 15:30:46.288924 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5363ms +[xorm] [info] 2024/09/08 15:32:46.279711 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6163ms +[xorm] [info] 2024/09/08 15:34:46.280153 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2589ms +[xorm] [info] 2024/09/08 15:36:46.285676 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3882ms +[xorm] [info] 2024/09/08 15:38:46.306301 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.4889ms +[xorm] [info] 2024/09/08 15:40:46.284064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1156ms +[xorm] [info] 2024/09/08 15:42:46.295719 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.514ms +[xorm] [info] 2024/09/08 15:44:46.283739 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2066ms +[xorm] [info] 2024/09/08 15:46:46.283574 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3844ms +[xorm] [info] 2024/09/08 15:48:46.296367 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1537ms +[xorm] [info] 2024/09/08 15:50:46.292283 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7807ms +[xorm] [info] 2024/09/08 15:52:46.290854 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7997ms +[xorm] [info] 2024/09/08 15:54:46.276003 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2362ms +[xorm] [info] 2024/09/08 15:56:46.285622 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5945ms +[xorm] [info] 2024/09/08 15:58:46.301664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3959ms +[xorm] [info] 2024/09/08 16:00:46.299651 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.128ms +[xorm] [info] 2024/09/08 16:02:46.286846 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2178ms +[xorm] [info] 2024/09/08 16:04:46.283161 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0593ms +[xorm] [info] 2024/09/08 16:06:46.290075 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0444ms +[xorm] [info] 2024/09/08 16:08:46.283266 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9681ms +[xorm] [info] 2024/09/08 16:10:46.292161 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9221ms +[xorm] [info] 2024/09/08 16:12:46.283012 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.136ms +[xorm] [info] 2024/09/08 16:14:46.289666 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.976ms +[xorm] [info] 2024/09/08 16:16:46.288362 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9197ms +[xorm] [info] 2024/09/08 16:18:46.298061 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9702ms +[xorm] [info] 2024/09/08 16:20:46.292207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4033ms +[xorm] [info] 2024/09/08 16:22:46.300731 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9077ms +[xorm] [info] 2024/09/08 16:24:46.288933 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5085ms +[xorm] [info] 2024/09/08 16:26:46.287494 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7234ms +[xorm] [info] 2024/09/08 16:28:46.288516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6027ms +[xorm] [info] 2024/09/08 16:30:46.276678 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7667ms +[xorm] [info] 2024/09/08 16:32:46.298674 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2958ms +[xorm] [info] 2024/09/08 16:34:46.275663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5054ms +[xorm] [info] 2024/09/08 16:36:46.288647 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3726ms +[xorm] [info] 2024/09/08 16:38:46.296025 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6269ms +[xorm] [info] 2024/09/08 16:40:46.280537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9094ms +[xorm] [info] 2024/09/08 16:42:46.284021 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6066ms +[xorm] [info] 2024/09/08 16:44:46.288726 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1501ms +[xorm] [info] 2024/09/08 16:46:46.307896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5466ms +[xorm] [info] 2024/09/08 16:48:46.286834 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1562ms +[xorm] [info] 2024/09/08 16:50:46.281758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0967ms +[xorm] [info] 2024/09/08 16:52:46.282561 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2775ms +[xorm] [info] 2024/09/08 16:54:46.299215 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0845ms +[xorm] [info] 2024/09/08 16:56:46.290480 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3237ms +[xorm] [info] 2024/09/08 16:58:46.272000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.0955ms +[xorm] [info] 2024/09/08 17:00:46.294673 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7057ms +[xorm] [info] 2024/09/08 17:02:46.283067 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6964ms +[xorm] [info] 2024/09/08 17:04:46.278159 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5471ms +[xorm] [info] 2024/09/08 17:06:46.280384 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7492ms +[xorm] [info] 2024/09/08 17:08:46.293692 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4284ms +[xorm] [info] 2024/09/08 17:10:46.294642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0899ms +[xorm] [info] 2024/09/08 17:12:46.283427 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6183ms +[xorm] [info] 2024/09/08 17:14:46.302101 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7114ms +[xorm] [info] 2024/09/08 17:16:46.284438 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6765ms +[xorm] [info] 2024/09/08 17:18:46.296539 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0685ms +[xorm] [info] 2024/09/08 17:20:46.297026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.7137ms +[xorm] [info] 2024/09/08 17:22:46.283017 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4352ms +[xorm] [info] 2024/09/08 17:24:46.277057 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7956ms +[xorm] [info] 2024/09/08 17:26:46.286437 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9705ms +[xorm] [info] 2024/09/08 17:28:46.278651 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8514ms +[xorm] [info] 2024/09/08 17:30:46.295550 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0025ms +[xorm] [info] 2024/09/08 17:32:46.297915 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.8862ms +[xorm] [info] 2024/09/08 17:34:46.291936 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0233ms +[xorm] [info] 2024/09/08 17:36:46.290534 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8423ms +[xorm] [info] 2024/09/08 17:38:46.286622 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0745ms +[xorm] [info] 2024/09/08 17:40:46.293885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2948ms +[xorm] [info] 2024/09/08 17:42:46.282760 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1025ms +[xorm] [info] 2024/09/08 17:44:46.300274 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7728ms +[xorm] [info] 2024/09/08 17:46:46.284341 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0271ms +[xorm] [info] 2024/09/08 17:48:46.304747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0859ms +[xorm] [info] 2024/09/08 17:50:46.278468 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7457ms +[xorm] [info] 2024/09/08 17:52:46.277277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2594ms +[xorm] [info] 2024/09/08 17:54:46.283558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9328ms +[xorm] [info] 2024/09/08 17:56:46.302967 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2489ms +[xorm] [info] 2024/09/08 17:58:46.295948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0935ms +[xorm] [info] 2024/09/08 18:00:46.299127 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9385ms +[xorm] [info] 2024/09/08 18:02:46.302315 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.8269ms +[xorm] [info] 2024/09/08 18:04:46.282786 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4873ms +[xorm] [info] 2024/09/08 18:06:46.285366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3959ms +[xorm] [info] 2024/09/08 18:08:46.281265 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.07ms +[xorm] [info] 2024/09/08 18:10:46.288340 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1234ms +[xorm] [info] 2024/09/08 18:12:46.294906 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2667ms +[xorm] [info] 2024/09/08 18:14:46.285484 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4817ms +[xorm] [info] 2024/09/08 18:16:46.289282 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0535ms +[xorm] [info] 2024/09/08 18:18:46.301705 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7943ms +[xorm] [info] 2024/09/08 18:20:46.284704 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.311ms +[xorm] [info] 2024/09/08 18:22:46.286347 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3526ms +[xorm] [info] 2024/09/08 18:24:46.290093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7093ms +[xorm] [info] 2024/09/08 18:26:46.293694 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1868ms +[xorm] [info] 2024/09/08 18:28:46.282749 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2503ms +[xorm] [info] 2024/09/08 18:30:46.303150 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5768ms +[xorm] [info] 2024/09/08 18:32:46.289711 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3393ms +[xorm] [info] 2024/09/08 18:34:46.279585 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5327ms +[xorm] [info] 2024/09/08 18:36:46.283913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3231ms +[xorm] [info] 2024/09/08 18:38:46.303583 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7517ms +[xorm] [info] 2024/09/08 18:40:46.294361 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.0848ms +[xorm] [info] 2024/09/08 18:42:46.300747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3658ms +[xorm] [info] 2024/09/08 18:44:46.279573 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4522ms +[xorm] [info] 2024/09/08 18:46:46.292169 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2267ms +[xorm] [info] 2024/09/08 18:48:46.299437 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1249ms +[xorm] [info] 2024/09/08 18:50:46.301015 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4904ms +[xorm] [info] 2024/09/08 18:52:46.292692 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6706ms +[xorm] [info] 2024/09/08 18:54:46.287275 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4997ms +[xorm] [info] 2024/09/08 18:56:46.296008 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3656ms +[xorm] [info] 2024/09/08 18:58:46.281866 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0008ms +[xorm] [info] 2024/09/08 19:00:46.302989 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.7186ms +[xorm] [info] 2024/09/08 19:02:46.293417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7629ms +[xorm] [info] 2024/09/08 19:04:46.303949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6729ms +[xorm] [info] 2024/09/08 19:06:46.301896 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6814ms +[xorm] [info] 2024/09/08 19:08:46.285813 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.58ms +[xorm] [info] 2024/09/08 19:10:46.293711 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5268ms +[xorm] [info] 2024/09/08 19:12:46.295388 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9555ms +[xorm] [info] 2024/09/08 19:14:46.289156 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5498ms +[xorm] [info] 2024/09/08 19:16:46.291352 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4655ms +[xorm] [info] 2024/09/08 19:18:46.296449 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3409ms +[xorm] [info] 2024/09/08 19:20:46.284881 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.414ms +[xorm] [info] 2024/09/08 19:22:46.305721 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4515ms +[xorm] [info] 2024/09/08 19:24:46.287350 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7615ms +[xorm] [info] 2024/09/08 19:26:46.284008 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5328ms +[xorm] [info] 2024/09/08 19:28:46.281400 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9114ms +[xorm] [info] 2024/09/08 19:30:46.287388 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4092ms +[xorm] [info] 2024/09/08 19:32:46.286895 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6346ms +[xorm] [info] 2024/09/08 19:34:46.287163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4057ms +[xorm] [info] 2024/09/08 19:36:46.298553 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.9269ms +[xorm] [info] 2024/09/08 19:38:46.279275 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3593ms +[xorm] [info] 2024/09/08 19:40:46.289999 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1907ms +[xorm] [info] 2024/09/08 19:42:46.277628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4396ms +[xorm] [info] 2024/09/08 19:44:46.304356 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8313ms +[xorm] [info] 2024/09/08 19:46:46.292529 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8751ms +[xorm] [info] 2024/09/08 19:48:46.286465 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1333ms +[xorm] [info] 2024/09/08 19:50:46.302692 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6132ms +[xorm] [info] 2024/09/08 19:52:46.302750 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3448ms +[xorm] [info] 2024/09/08 19:54:46.279949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9955ms +[xorm] [info] 2024/09/08 19:56:46.288415 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3866ms +[xorm] [info] 2024/09/08 19:58:46.290844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7621ms +[xorm] [info] 2024/09/08 20:00:46.288984 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8017ms +[xorm] [info] 2024/09/08 20:02:46.280360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.593ms +[xorm] [info] 2024/09/08 20:04:46.282303 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1391ms +[xorm] [info] 2024/09/08 20:06:46.276489 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1111ms +[xorm] [info] 2024/09/08 20:08:46.294724 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.545ms +[xorm] [info] 2024/09/08 20:10:46.300480 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1999ms +[xorm] [info] 2024/09/08 20:12:46.286020 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5414ms +[xorm] [info] 2024/09/08 20:14:46.292648 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6007ms +[xorm] [info] 2024/09/08 20:16:46.287326 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7335ms +[xorm] [info] 2024/09/08 20:18:46.294269 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4151ms +[xorm] [info] 2024/09/08 20:20:46.288660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3623ms +[xorm] [info] 2024/09/08 20:22:46.296262 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8162ms +[xorm] [info] 2024/09/08 20:24:46.299259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0116ms +[xorm] [info] 2024/09/08 20:26:46.280814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7195ms +[xorm] [info] 2024/09/08 20:28:46.293540 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3791ms +[xorm] [info] 2024/09/08 20:30:46.305319 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7934ms +[xorm] [info] 2024/09/08 20:32:46.287335 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5376ms +[xorm] [info] 2024/09/08 20:34:46.287850 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7642ms +[xorm] [info] 2024/09/08 20:36:46.282708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.268ms +[xorm] [info] 2024/09/08 20:38:46.280196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0482ms +[xorm] [info] 2024/09/08 20:40:46.295261 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9782ms +[xorm] [info] 2024/09/08 20:42:46.294988 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2376ms +[xorm] [info] 2024/09/08 20:44:46.295003 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9899ms +[xorm] [info] 2024/09/08 20:46:46.288566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3045ms +[xorm] [info] 2024/09/08 20:48:46.282482 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0387ms +[xorm] [info] 2024/09/08 20:50:46.293763 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1677ms +[xorm] [info] 2024/09/08 20:52:46.305091 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1874ms +[xorm] [info] 2024/09/08 20:54:46.284272 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4587ms +[xorm] [info] 2024/09/08 20:56:46.282233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.722ms +[xorm] [info] 2024/09/08 20:58:46.296767 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2967ms +[xorm] [info] 2024/09/08 21:00:46.303567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1182ms +[xorm] [info] 2024/09/08 21:02:46.295542 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2975ms +[xorm] [info] 2024/09/08 21:04:46.303653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5486ms +[xorm] [info] 2024/09/08 21:06:46.287687 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3516ms +[xorm] [info] 2024/09/08 21:08:46.292651 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3852ms +[xorm] [info] 2024/09/08 21:10:46.286053 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3104ms +[xorm] [info] 2024/09/08 21:12:46.288222 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2344ms +[xorm] [info] 2024/09/08 21:14:46.297380 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6798ms +[xorm] [info] 2024/09/08 21:16:46.296902 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2014ms +[xorm] [info] 2024/09/08 21:18:46.293103 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.045ms +[xorm] [info] 2024/09/08 21:20:46.283721 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5304ms +[xorm] [info] 2024/09/08 21:22:46.284388 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2578ms +[xorm] [info] 2024/09/08 21:24:46.276620 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7225ms +[xorm] [info] 2024/09/08 21:26:46.285111 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.462ms +[xorm] [info] 2024/09/08 21:28:46.284981 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5496ms +[xorm] [info] 2024/09/08 21:30:46.293246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.9823ms +[xorm] [info] 2024/09/08 21:32:46.296786 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6262ms +[xorm] [info] 2024/09/08 21:34:46.289600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9294ms +[xorm] [info] 2024/09/08 21:36:46.292692 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8307ms +[xorm] [info] 2024/09/08 21:38:46.286824 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8789ms +[xorm] [info] 2024/09/08 21:40:46.287414 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6359ms +[xorm] [info] 2024/09/08 21:42:46.298879 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9763ms +[xorm] [info] 2024/09/08 21:44:46.296036 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5822ms +[xorm] [info] 2024/09/08 21:46:46.279929 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7886ms +[xorm] [info] 2024/09/08 21:48:46.278046 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5921ms +[xorm] [info] 2024/09/08 21:50:46.286983 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3733ms +[xorm] [info] 2024/09/08 21:52:46.277985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5849ms +[xorm] [info] 2024/09/08 21:54:46.288278 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3584ms +[xorm] [info] 2024/09/08 21:56:46.278660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5674ms +[xorm] [info] 2024/09/08 21:58:46.288668 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1927ms +[xorm] [info] 2024/09/08 22:00:46.286381 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6732ms +[xorm] [info] 2024/09/08 22:02:46.287576 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8908ms +[xorm] [info] 2024/09/08 22:04:46.295493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5329ms +[xorm] [info] 2024/09/08 22:06:46.280421 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3197ms +[xorm] [info] 2024/09/08 22:08:46.289392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1446ms +[xorm] [info] 2024/09/08 22:10:46.278457 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.426ms +[xorm] [info] 2024/09/08 22:12:46.288714 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5469ms +[xorm] [info] 2024/09/08 22:14:46.287726 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4178ms +[xorm] [info] 2024/09/08 22:16:46.279603 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.834ms +[xorm] [info] 2024/09/08 22:18:46.298339 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7804ms +[xorm] [info] 2024/09/08 22:20:46.287609 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8061ms +[xorm] [info] 2024/09/08 22:22:46.292824 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4107ms +[xorm] [info] 2024/09/08 22:24:46.288790 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9424ms +[xorm] [info] 2024/09/08 22:26:46.290215 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0445ms +[xorm] [info] 2024/09/08 22:28:46.299202 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0748ms +[xorm] [info] 2024/09/08 22:30:46.277840 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2045ms +[xorm] [info] 2024/09/08 22:32:46.299131 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.454ms +[xorm] [info] 2024/09/08 22:34:46.293811 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6249ms +[xorm] [info] 2024/09/08 22:36:46.284451 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8252ms +[xorm] [info] 2024/09/08 22:38:46.289145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0834ms +[xorm] [info] 2024/09/08 22:40:46.288769 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5128ms +[xorm] [info] 2024/09/08 22:42:46.296671 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4912ms +[xorm] [info] 2024/09/08 22:44:46.308623 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.7133ms +[xorm] [info] 2024/09/08 22:46:46.275141 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3649ms +[xorm] [info] 2024/09/08 22:48:46.297807 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4946ms +[xorm] [info] 2024/09/08 22:50:46.305477 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3809ms +[xorm] [info] 2024/09/08 22:52:46.288916 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9284ms +[xorm] [info] 2024/09/08 22:54:46.285065 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2642ms +[xorm] [info] 2024/09/08 22:56:46.292217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7144ms +[xorm] [info] 2024/09/08 22:58:46.291662 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2321ms +[xorm] [info] 2024/09/08 23:00:46.289625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0205ms +[xorm] [info] 2024/09/08 23:02:46.293566 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7786ms +[xorm] [info] 2024/09/08 23:04:46.293763 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3089ms +[xorm] [info] 2024/09/08 23:06:46.277486 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8707ms +[xorm] [info] 2024/09/08 23:08:46.272869 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.5027ms +[xorm] [info] 2024/09/08 23:10:46.288107 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7684ms +[xorm] [info] 2024/09/08 23:12:46.289730 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4393ms +[xorm] [info] 2024/09/08 23:14:46.298717 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7032ms +[xorm] [info] 2024/09/08 23:16:46.289346 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9577ms +[xorm] [info] 2024/09/08 23:18:46.304373 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9145ms +[xorm] [info] 2024/09/08 23:20:46.276012 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6051ms +[xorm] [info] 2024/09/08 23:22:46.290353 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.246ms +[xorm] [info] 2024/09/08 23:24:46.293763 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6185ms +[xorm] [info] 2024/09/08 23:26:46.295832 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3992ms +[xorm] [info] 2024/09/08 23:28:46.303407 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0095ms +[xorm] [info] 2024/09/08 23:30:46.287436 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2021ms +[xorm] [info] 2024/09/08 23:32:46.285485 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8824ms +[xorm] [info] 2024/09/08 23:34:46.279227 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0056ms +[xorm] [info] 2024/09/08 23:36:46.290373 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4316ms +[xorm] [info] 2024/09/08 23:38:46.276002 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2864ms +[xorm] [info] 2024/09/08 23:40:46.291504 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5611ms +[xorm] [info] 2024/09/08 23:42:46.291427 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4165ms +[xorm] [info] 2024/09/08 23:44:46.296325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1017ms +[xorm] [info] 2024/09/08 23:46:46.276769 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3866ms +[xorm] [info] 2024/09/08 23:48:46.295819 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3653ms +[xorm] [info] 2024/09/08 23:50:46.282747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4749ms +[xorm] [info] 2024/09/08 23:52:46.291250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8969ms +[xorm] [info] 2024/09/08 23:54:46.288342 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2767ms +[xorm] [info] 2024/09/08 23:56:46.270652 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5676ms +[xorm] [info] 2024/09/08 23:58:46.290085 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1581ms +[xorm] [info] 2024/09/09 00:00:46.285389 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0955ms +[xorm] [info] 2024/09/09 00:02:46.294668 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3004ms +[xorm] [info] 2024/09/09 00:04:46.277755 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2864ms +[xorm] [info] 2024/09/09 00:06:46.289734 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5127ms +[xorm] [info] 2024/09/09 00:08:46.282664 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.909ms +[xorm] [info] 2024/09/09 00:10:46.293325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.4877ms +[xorm] [info] 2024/09/09 00:12:46.283015 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.28ms +[xorm] [info] 2024/09/09 00:14:46.288059 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7375ms +[xorm] [info] 2024/09/09 00:16:46.294369 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2051ms +[xorm] [info] 2024/09/09 00:18:46.295327 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.193ms +[xorm] [info] 2024/09/09 00:20:46.290933 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1436ms +[xorm] [info] 2024/09/09 00:22:46.302844 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7769ms +[xorm] [info] 2024/09/09 00:24:46.286643 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6033ms +[xorm] [info] 2024/09/09 00:26:46.292934 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0049ms +[xorm] [info] 2024/09/09 00:28:46.271254 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.9487ms +[xorm] [info] 2024/09/09 00:30:46.284361 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7237ms +[xorm] [info] 2024/09/09 00:32:46.287894 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1261ms +[xorm] [info] 2024/09/09 00:34:46.296562 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3769ms +[xorm] [info] 2024/09/09 00:36:46.275974 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6728ms +[xorm] [info] 2024/09/09 00:38:46.276770 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9315ms +[xorm] [info] 2024/09/09 00:40:46.284359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7193ms +[xorm] [info] 2024/09/09 00:42:46.282422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0561ms +[xorm] [info] 2024/09/09 00:44:46.288262 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8195ms +[xorm] [info] 2024/09/09 00:46:46.283267 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8212ms +[xorm] [info] 2024/09/09 00:48:46.293542 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9517ms +[xorm] [info] 2024/09/09 00:50:46.276131 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.8347ms +[xorm] [info] 2024/09/09 00:52:46.287396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9317ms +[xorm] [info] 2024/09/09 00:54:46.278916 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4966ms +[xorm] [info] 2024/09/09 00:56:46.295743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7339ms +[xorm] [info] 2024/09/09 00:58:46.280380 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0507ms +[xorm] [info] 2024/09/09 01:00:46.280388 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0249ms +[xorm] [info] 2024/09/09 01:02:46.286708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3841ms +[xorm] [info] 2024/09/09 01:04:46.279988 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7918ms +[xorm] [info] 2024/09/09 01:06:46.289831 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8598ms +[xorm] [info] 2024/09/09 01:08:46.281248 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0801ms +[xorm] [info] 2024/09/09 01:10:46.286793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2841ms +[xorm] [info] 2024/09/09 01:12:46.282679 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7754ms +[xorm] [info] 2024/09/09 01:14:46.277795 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7854ms +[xorm] [info] 2024/09/09 01:16:46.286786 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1036ms +[xorm] [info] 2024/09/09 01:18:46.286212 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.055ms +[xorm] [info] 2024/09/09 01:20:46.284256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9471ms +[xorm] [info] 2024/09/09 01:22:46.299905 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6238ms +[xorm] [info] 2024/09/09 01:24:46.293782 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6223ms +[xorm] [info] 2024/09/09 01:26:46.291808 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8349ms +[xorm] [info] 2024/09/09 01:28:46.292433 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8378ms +[xorm] [info] 2024/09/09 01:30:46.292699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5292ms +[xorm] [info] 2024/09/09 01:32:46.285179 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8875ms +[xorm] [info] 2024/09/09 01:34:46.301946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7445ms +[xorm] [info] 2024/09/09 01:36:46.292891 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8061ms +[xorm] [info] 2024/09/09 01:38:46.285074 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2078ms +[xorm] [info] 2024/09/09 01:40:46.288069 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.877ms +[xorm] [info] 2024/09/09 01:42:46.300214 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.5197ms +[xorm] [info] 2024/09/09 01:44:46.277510 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5782ms +[xorm] [info] 2024/09/09 01:46:46.284643 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8762ms +[xorm] [info] 2024/09/09 01:48:46.299642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1646ms +[xorm] [info] 2024/09/09 01:50:46.305009 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9404ms +[xorm] [info] 2024/09/09 01:52:46.302715 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3157ms +[xorm] [info] 2024/09/09 01:54:46.303406 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4363ms +[xorm] [info] 2024/09/09 01:56:46.291413 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.1765ms +[xorm] [info] 2024/09/09 01:58:46.283143 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6759ms +[xorm] [info] 2024/09/09 02:00:46.291052 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0517ms +[xorm] [info] 2024/09/09 02:02:46.282758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9216ms +[xorm] [info] 2024/09/09 02:04:46.291496 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.962ms +[xorm] [info] 2024/09/09 02:06:46.299904 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6194ms +[xorm] [info] 2024/09/09 02:08:46.275028 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.1978ms +[xorm] [info] 2024/09/09 02:10:46.299374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4567ms +[xorm] [info] 2024/09/09 02:12:46.282586 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8727ms +[xorm] [info] 2024/09/09 02:14:46.283666 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1501ms +[xorm] [info] 2024/09/09 02:16:46.288138 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.3757ms +[xorm] [info] 2024/09/09 02:18:46.304084 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9811ms +[xorm] [info] 2024/09/09 02:20:46.283986 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3967ms +[xorm] [info] 2024/09/09 02:22:46.285814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.2317ms +[xorm] [info] 2024/09/09 02:24:46.275600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0956ms +[xorm] [info] 2024/09/09 02:26:46.283393 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.7924ms +[xorm] [info] 2024/09/09 02:28:46.287277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7006ms +[xorm] [info] 2024/09/09 02:30:46.286687 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8922ms +[xorm] [info] 2024/09/09 02:32:46.289757 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.387ms +[xorm] [info] 2024/09/09 02:34:46.285871 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3248ms +[xorm] [info] 2024/09/09 02:36:46.285464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4412ms +[xorm] [info] 2024/09/09 02:38:46.301119 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8376ms +[xorm] [info] 2024/09/09 02:40:46.288066 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6807ms +[xorm] [info] 2024/09/09 02:42:46.295861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8817ms +[xorm] [info] 2024/09/09 02:44:46.287970 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3017ms +[xorm] [info] 2024/09/09 02:46:46.278764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5674ms +[xorm] [info] 2024/09/09 02:48:46.289070 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3039ms +[xorm] [info] 2024/09/09 02:50:46.291796 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1677ms +[xorm] [info] 2024/09/09 02:52:46.290080 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.5664ms +[xorm] [info] 2024/09/09 02:54:46.284678 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8469ms +[xorm] [info] 2024/09/09 02:56:46.282512 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1795ms +[xorm] [info] 2024/09/09 02:58:46.281517 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.837ms +[xorm] [info] 2024/09/09 03:00:46.282374 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5682ms +[xorm] [info] 2024/09/09 03:02:46.299476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9884ms +[xorm] [info] 2024/09/09 03:04:46.293026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8041ms +[xorm] [info] 2024/09/09 03:06:46.282203 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4825ms +[xorm] [info] 2024/09/09 03:08:46.282883 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4964ms +[xorm] [info] 2024/09/09 03:10:46.279313 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1004ms +[xorm] [info] 2024/09/09 03:12:46.279626 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6357ms +[xorm] [info] 2024/09/09 03:14:46.298148 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.442ms +[xorm] [info] 2024/09/09 03:16:46.288023 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7706ms +[xorm] [info] 2024/09/09 03:18:46.290392 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1571ms +[xorm] [info] 2024/09/09 03:20:46.292038 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8567ms +[xorm] [info] 2024/09/09 03:22:46.280685 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5182ms +[xorm] [info] 2024/09/09 03:24:46.286640 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.536ms +[xorm] [info] 2024/09/09 03:26:46.287949 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7073ms +[xorm] [info] 2024/09/09 03:28:46.298214 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.4333ms +[xorm] [info] 2024/09/09 03:30:46.294191 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3804ms +[xorm] [info] 2024/09/09 03:32:46.291373 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.5442ms +[xorm] [info] 2024/09/09 03:34:46.295162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6109ms +[xorm] [info] 2024/09/09 03:36:46.285556 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7783ms +[xorm] [info] 2024/09/09 03:38:46.288082 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7461ms +[xorm] [info] 2024/09/09 03:40:46.280740 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.748ms +[xorm] [info] 2024/09/09 03:42:46.293604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.5966ms +[xorm] [info] 2024/09/09 03:44:46.287294 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0968ms +[xorm] [info] 2024/09/09 03:46:46.286232 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5148ms +[xorm] [info] 2024/09/09 03:48:46.279317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.7714ms +[xorm] [info] 2024/09/09 03:50:46.277515 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.9947ms +[xorm] [info] 2024/09/09 03:52:46.270259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.828ms +[xorm] [info] 2024/09/09 03:54:46.284685 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6973ms +[xorm] [info] 2024/09/09 03:56:46.280899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9586ms +[xorm] [info] 2024/09/09 03:58:46.291947 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2094ms +[xorm] [info] 2024/09/09 04:00:46.301645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2782ms +[xorm] [info] 2024/09/09 04:02:46.307123 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5679ms +[xorm] [info] 2024/09/09 04:04:46.294778 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8872ms +[xorm] [info] 2024/09/09 04:06:46.287317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0147ms +[xorm] [info] 2024/09/09 04:08:46.275813 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2413ms +[xorm] [info] 2024/09/09 04:10:46.287451 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1576ms +[xorm] [info] 2024/09/09 04:12:46.293602 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5283ms +[xorm] [info] 2024/09/09 04:14:46.276572 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3137ms +[xorm] [info] 2024/09/09 04:16:46.284101 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3541ms +[xorm] [info] 2024/09/09 04:18:46.299695 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2169ms +[xorm] [info] 2024/09/09 04:20:46.278569 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0361ms +[xorm] [info] 2024/09/09 04:22:46.293250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8989ms +[xorm] [info] 2024/09/09 04:24:46.294143 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8147ms +[xorm] [info] 2024/09/09 04:26:46.277194 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5005ms +[xorm] [info] 2024/09/09 04:28:46.288816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1528ms +[xorm] [info] 2024/09/09 04:30:46.293430 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6894ms +[xorm] [info] 2024/09/09 04:32:46.299718 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9007ms +[xorm] [info] 2024/09/09 04:34:46.291316 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0353ms +[xorm] [info] 2024/09/09 04:36:46.288822 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8036ms +[xorm] [info] 2024/09/09 04:38:46.281597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1203ms +[xorm] [info] 2024/09/09 04:40:46.288370 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0624ms +[xorm] [info] 2024/09/09 04:42:46.302954 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9881ms +[xorm] [info] 2024/09/09 04:44:46.283096 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6332ms +[xorm] [info] 2024/09/09 04:46:46.302001 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1011ms +[xorm] [info] 2024/09/09 04:48:46.297442 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3891ms +[xorm] [info] 2024/09/09 04:50:46.278509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6836ms +[xorm] [info] 2024/09/09 04:52:46.299638 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7169ms +[xorm] [info] 2024/09/09 04:54:46.300100 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.2169ms +[xorm] [info] 2024/09/09 04:56:46.284995 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9013ms +[xorm] [info] 2024/09/09 04:58:46.286017 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.1449ms +[xorm] [info] 2024/09/09 05:00:46.285604 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4911ms +[xorm] [info] 2024/09/09 05:02:46.305386 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3644ms +[xorm] [info] 2024/09/09 05:04:46.283743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1618ms +[xorm] [info] 2024/09/09 05:06:46.305347 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2048ms +[xorm] [info] 2024/09/09 05:08:46.286106 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4676ms +[xorm] [info] 2024/09/09 05:10:46.277391 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3088ms +[xorm] [info] 2024/09/09 05:12:46.286611 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5209ms +[xorm] [info] 2024/09/09 05:14:46.278818 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1331ms +[xorm] [info] 2024/09/09 05:16:46.285600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1295ms +[xorm] [info] 2024/09/09 05:18:46.305670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9923ms +[xorm] [info] 2024/09/09 05:20:46.299537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7369ms +[xorm] [info] 2024/09/09 05:22:46.290590 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.602ms +[xorm] [info] 2024/09/09 05:24:46.285955 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.5544ms +[xorm] [info] 2024/09/09 05:26:46.290323 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6624ms +[xorm] [info] 2024/09/09 05:28:46.282244 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3575ms +[xorm] [info] 2024/09/09 05:30:46.290255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8156ms +[xorm] [info] 2024/09/09 05:32:46.289712 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3526ms +[xorm] [info] 2024/09/09 05:34:46.305366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9381ms +[xorm] [info] 2024/09/09 05:36:46.281356 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.2061ms +[xorm] [info] 2024/09/09 05:38:46.290239 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7715ms +[xorm] [info] 2024/09/09 05:40:46.285991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2552ms +[xorm] [info] 2024/09/09 05:42:46.291401 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1173ms +[xorm] [info] 2024/09/09 05:44:46.300360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6568ms +[xorm] [info] 2024/09/09 05:46:46.308598 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.577ms +[xorm] [info] 2024/09/09 05:48:46.288860 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6937ms +[xorm] [info] 2024/09/09 05:50:46.287434 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.4751ms +[xorm] [info] 2024/09/09 05:52:46.279379 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8478ms +[xorm] [info] 2024/09/09 05:54:46.294093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2974ms +[xorm] [info] 2024/09/09 05:56:46.281678 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8742ms +[xorm] [info] 2024/09/09 05:58:46.293216 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.2309ms +[xorm] [info] 2024/09/09 06:00:46.293457 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3582ms +[xorm] [info] 2024/09/09 06:02:46.293936 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4722ms +[xorm] [info] 2024/09/09 06:04:46.297523 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.792ms +[xorm] [info] 2024/09/09 06:06:46.277727 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2661ms +[xorm] [info] 2024/09/09 06:08:46.291082 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0971ms +[xorm] [info] 2024/09/09 06:10:46.295967 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8977ms +[xorm] [info] 2024/09/09 06:12:46.281644 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8654ms +[xorm] [info] 2024/09/09 06:14:46.285858 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8735ms +[xorm] [info] 2024/09/09 06:16:46.273167 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.2704ms +[xorm] [info] 2024/09/09 06:18:46.293021 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.891ms +[xorm] [info] 2024/09/09 06:20:46.299516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.3926ms +[xorm] [info] 2024/09/09 06:22:46.276597 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0131ms +[xorm] [info] 2024/09/09 06:24:46.304612 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.8605ms +[xorm] [info] 2024/09/09 06:26:46.300903 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6766ms +[xorm] [info] 2024/09/09 06:28:46.283653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6103ms +[xorm] [info] 2024/09/09 06:30:46.298905 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.8277ms +[xorm] [info] 2024/09/09 06:32:46.283612 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7491ms +[xorm] [info] 2024/09/09 06:34:46.291732 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7262ms +[xorm] [info] 2024/09/09 06:36:46.281814 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4555ms +[xorm] [info] 2024/09/09 06:38:46.289398 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9849ms +[xorm] [info] 2024/09/09 06:40:46.297889 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4809ms +[xorm] [info] 2024/09/09 06:42:46.286766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7613ms +[xorm] [info] 2024/09/09 06:44:46.293948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7989ms +[xorm] [info] 2024/09/09 06:46:46.301419 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9422ms +[xorm] [info] 2024/09/09 06:48:46.309015 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1761ms +[xorm] [info] 2024/09/09 06:50:46.304341 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2499ms +[xorm] [info] 2024/09/09 06:52:46.282803 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3397ms +[xorm] [info] 2024/09/09 06:54:46.288022 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6858ms +[xorm] [info] 2024/09/09 06:56:46.294536 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8507ms +[xorm] [info] 2024/09/09 06:58:46.281788 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9807ms +[xorm] [info] 2024/09/09 07:00:46.300002 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3249ms +[xorm] [info] 2024/09/09 07:02:46.303014 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9245ms +[xorm] [info] 2024/09/09 07:04:46.297443 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6676ms +[xorm] [info] 2024/09/09 07:06:46.296498 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3565ms +[xorm] [info] 2024/09/09 07:08:46.303830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.2042ms +[xorm] [info] 2024/09/09 07:10:46.292793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8237ms +[xorm] [info] 2024/09/09 07:12:46.288830 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9577ms +[xorm] [info] 2024/09/09 07:14:46.286136 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8706ms +[xorm] [info] 2024/09/09 07:16:46.286048 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1027ms +[xorm] [info] 2024/09/09 07:18:46.281708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.8244ms +[xorm] [info] 2024/09/09 07:20:46.282393 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.735ms +[xorm] [info] 2024/09/09 07:22:46.282363 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0676ms +[xorm] [info] 2024/09/09 07:24:46.292234 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2341ms +[xorm] [info] 2024/09/09 07:26:46.278764 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.469ms +[xorm] [info] 2024/09/09 07:28:46.295866 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.206ms +[xorm] [info] 2024/09/09 07:30:46.290528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1909ms +[xorm] [info] 2024/09/09 07:32:46.278355 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6622ms +[xorm] [info] 2024/09/09 07:34:46.285610 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.5175ms +[xorm] [info] 2024/09/09 07:36:46.288553 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4885ms +[xorm] [info] 2024/09/09 07:38:46.277197 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4447ms +[xorm] [info] 2024/09/09 07:40:46.299653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2492ms +[xorm] [info] 2024/09/09 07:42:46.285872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4516ms +[xorm] [info] 2024/09/09 07:44:46.307105 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3547ms +[xorm] [info] 2024/09/09 07:46:46.291659 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1336ms +[xorm] [info] 2024/09/09 07:48:46.287667 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6828ms +[xorm] [info] 2024/09/09 07:50:46.278959 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0535ms +[xorm] [info] 2024/09/09 07:52:46.292113 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.195ms +[xorm] [info] 2024/09/09 07:54:46.274999 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3998ms +[xorm] [info] 2024/09/09 07:56:46.306399 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9308ms +[xorm] [info] 2024/09/09 07:58:46.290251 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1406ms +[xorm] [info] 2024/09/09 08:00:46.314422 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 107.0191ms +[xorm] [info] 2024/09/09 08:02:46.287164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0441ms +[xorm] [info] 2024/09/09 08:04:46.284067 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5511ms +[xorm] [info] 2024/09/09 08:06:46.283412 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.0244ms +[xorm] [info] 2024/09/09 08:08:46.286656 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2852ms +[xorm] [info] 2024/09/09 08:10:46.295451 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7177ms +[xorm] [info] 2024/09/09 08:12:46.303535 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5015ms +[xorm] [info] 2024/09/09 08:14:46.300745 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2899ms +[xorm] [info] 2024/09/09 08:16:46.296670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4992ms +[xorm] [info] 2024/09/09 08:18:46.299581 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9015ms +[xorm] [info] 2024/09/09 08:20:46.286232 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2153ms +[xorm] [info] 2024/09/09 08:22:46.288198 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8464ms +[xorm] [info] 2024/09/09 08:24:46.305259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3609ms +[xorm] [info] 2024/09/09 08:26:46.298237 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2572ms +[xorm] [info] 2024/09/09 08:28:46.306396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7923ms +[xorm] [info] 2024/09/09 08:30:46.303032 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.8399ms +[xorm] [info] 2024/09/09 08:32:46.299336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.6156ms +[xorm] [info] 2024/09/09 08:34:46.301188 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.38ms +[xorm] [info] 2024/09/09 08:36:46.297040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.428ms +[xorm] [info] 2024/09/09 08:38:46.295148 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6238ms +[xorm] [info] 2024/09/09 08:40:46.293134 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6401ms +[xorm] [info] 2024/09/09 08:42:46.289537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0858ms +[xorm] [info] 2024/09/09 08:44:47.555323 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 1.3424816s +[xorm] [info] 2024/09/09 08:46:46.780387 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 573.6253ms +[xorm] [info] 2024/09/09 08:48:47.193857 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 977.0486ms +[xorm] [info] 2024/09/09 08:50:47.201236 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 983.8668ms +[xorm] [info] 2024/09/09 08:52:47.169509 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 953.6793ms +[xorm] [info] 2024/09/09 08:54:47.161670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 954.4751ms +[xorm] [info] 2024/09/09 08:56:46.274152 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.0838ms +[xorm] [info] 2024/09/09 08:58:46.291271 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2802ms +[xorm] [info] 2024/09/09 09:00:46.302032 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.573ms +[xorm] [info] 2024/09/09 09:02:46.294129 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8774ms +[xorm] [info] 2024/09/09 09:04:46.290892 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6001ms +[xorm] [info] 2024/09/09 09:06:46.281910 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.365ms +[xorm] [info] 2024/09/09 09:08:46.299025 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.0286ms +[xorm] [info] 2024/09/09 09:10:46.291377 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9956ms +[xorm] [info] 2024/09/09 09:12:46.295199 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3321ms +[xorm] [info] 2024/09/09 09:14:46.283243 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4972ms +[xorm] [info] 2024/09/09 09:16:46.277723 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8261ms +[xorm] [info] 2024/09/09 09:18:46.288046 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9192ms +[xorm] [info] 2024/09/09 09:20:46.284649 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7419ms +[xorm] [info] 2024/09/09 09:22:46.287024 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.1898ms +[xorm] [info] 2024/09/09 09:24:46.292259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.9697ms +[xorm] [info] 2024/09/09 09:26:46.286530 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5297ms +[xorm] [info] 2024/09/09 09:28:46.289784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2377ms +[xorm] [info] 2024/09/09 09:30:46.300302 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8569ms +[xorm] [info] 2024/09/09 09:32:46.306345 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.5761ms +[xorm] [info] 2024/09/09 09:34:46.293466 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6845ms +[xorm] [info] 2024/09/09 09:36:46.298196 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8631ms +[xorm] [info] 2024/09/09 09:38:46.307261 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1684ms +[xorm] [info] 2024/09/09 09:40:46.297567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0787ms +[xorm] [info] 2024/09/09 09:42:46.283462 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0468ms +[xorm] [info] 2024/09/09 09:44:46.279288 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.5851ms +[xorm] [info] 2024/09/09 09:46:46.293913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.6915ms +[xorm] [info] 2024/09/09 09:48:46.295273 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9415ms +[xorm] [info] 2024/09/09 09:50:46.350136 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 134.0497ms +[xorm] [info] 2024/09/09 09:52:46.292909 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7485ms +[xorm] [info] 2024/09/09 09:54:46.292486 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.5542ms +[xorm] [info] 2024/09/09 09:56:46.288499 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4725ms +[xorm] [info] 2024/09/09 09:58:46.290044 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.066ms +[xorm] [info] 2024/09/09 10:00:46.293231 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1071ms +[xorm] [info] 2024/09/09 10:02:46.297327 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.8049ms +[xorm] [info] 2024/09/09 10:04:46.282728 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.4905ms +[xorm] [info] 2024/09/09 10:06:46.292136 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1212ms +[xorm] [info] 2024/09/09 10:08:46.289184 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6513ms +[xorm] [info] 2024/09/09 10:10:46.290334 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9561ms +[xorm] [info] 2024/09/09 10:12:46.288245 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8444ms +[xorm] [info] 2024/09/09 10:14:46.278565 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1297ms +[xorm] [info] 2024/09/09 10:16:46.281088 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6443ms +[xorm] [info] 2024/09/09 10:18:46.297145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5093ms +[xorm] [info] 2024/09/09 10:20:46.283019 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6135ms +[xorm] [info] 2024/09/09 10:22:46.488890 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 273.7162ms +[xorm] [info] 2024/09/09 10:24:46.287124 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1919ms +[xorm] [info] 2024/09/09 10:26:46.295641 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9685ms +[xorm] [info] 2024/09/09 10:28:46.299518 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.5875ms +[xorm] [info] 2024/09/09 10:30:46.316021 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 108.3441ms +[xorm] [info] 2024/09/09 10:32:46.299295 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3226ms +[xorm] [info] 2024/09/09 10:34:46.296016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6ms +[xorm] [info] 2024/09/09 10:36:46.290747 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.27ms +[xorm] [info] 2024/09/09 10:38:46.290708 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7441ms +[xorm] [info] 2024/09/09 10:40:46.306416 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1426ms +[xorm] [info] 2024/09/09 10:42:46.287449 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0036ms +[xorm] [info] 2024/09/09 10:44:46.297877 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2436ms +[xorm] [info] 2024/09/09 10:46:46.294263 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3221ms +[xorm] [info] 2024/09/09 10:48:46.304670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6916ms +[xorm] [info] 2024/09/09 10:50:46.280991 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.3304ms +[xorm] [info] 2024/09/09 10:52:46.284642 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4958ms +[xorm] [info] 2024/09/09 10:54:46.282067 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1868ms +[xorm] [info] 2024/09/09 10:56:46.307837 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.6123ms +[xorm] [info] 2024/09/09 10:58:46.281057 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5496ms +[xorm] [info] 2024/09/09 11:00:46.305093 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7077ms +[xorm] [info] 2024/09/09 11:02:46.275353 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.3011ms +[xorm] [info] 2024/09/09 11:04:46.300528 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.3172ms +[xorm] [info] 2024/09/09 11:06:46.277278 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7554ms +[xorm] [info] 2024/09/09 11:08:46.288491 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6824ms +[xorm] [info] 2024/09/09 11:10:46.296985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9977ms +[xorm] [info] 2024/09/09 11:12:46.285907 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0485ms +[xorm] [info] 2024/09/09 11:14:46.305257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3747ms +[xorm] [info] 2024/09/09 11:16:46.305858 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.4709ms +[xorm] [info] 2024/09/09 11:18:46.298823 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3063ms +[xorm] [info] 2024/09/09 11:20:46.299658 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3024ms +[xorm] [info] 2024/09/09 11:22:46.296699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7702ms +[xorm] [info] 2024/09/09 11:24:46.285533 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6475ms +[xorm] [info] 2024/09/09 11:26:46.299951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6684ms +[xorm] [info] 2024/09/09 11:28:46.315760 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 101.3529ms +[xorm] [info] 2024/09/09 11:30:46.296762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4135ms +[xorm] [info] 2024/09/09 11:32:46.287587 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3977ms +[xorm] [info] 2024/09/09 11:34:46.286368 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4152ms +[xorm] [info] 2024/09/09 11:36:46.295676 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5279ms +[xorm] [info] 2024/09/09 11:38:46.286426 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1576ms +[xorm] [info] 2024/09/09 11:40:46.295082 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7834ms +[xorm] [info] 2024/09/09 11:42:46.284304 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7237ms +[xorm] [info] 2024/09/09 11:44:46.299577 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1452ms +[xorm] [info] 2024/09/09 11:46:46.283900 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8992ms +[xorm] [info] 2024/09/09 11:48:46.300149 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.2302ms +[xorm] [info] 2024/09/09 11:50:46.282540 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5107ms +[xorm] [info] 2024/09/09 11:52:46.304033 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8766ms +[xorm] [info] 2024/09/09 11:54:46.302945 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2342ms +[xorm] [info] 2024/09/09 11:56:46.313082 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.5857ms +[xorm] [info] 2024/09/09 11:58:46.288853 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9392ms +[xorm] [info] 2024/09/09 12:00:46.282512 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0206ms +[xorm] [info] 2024/09/09 12:02:46.304663 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.6722ms +[xorm] [info] 2024/09/09 12:04:46.290704 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.3806ms +[xorm] [info] 2024/09/09 12:06:46.319989 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 115.3884ms +[xorm] [info] 2024/09/09 12:08:46.294477 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.7157ms +[xorm] [info] 2024/09/09 12:10:46.293114 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.3335ms +[xorm] [info] 2024/09/09 12:12:46.285443 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.692ms +[xorm] [info] 2024/09/09 12:14:46.301629 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3814ms +[xorm] [info] 2024/09/09 12:16:46.290007 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5101ms +[xorm] [info] 2024/09/09 12:18:46.278212 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9148ms +[xorm] [info] 2024/09/09 12:20:46.293861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1644ms +[xorm] [info] 2024/09/09 12:22:46.297385 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9763ms +[xorm] [info] 2024/09/09 12:24:46.284913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.865ms +[xorm] [info] 2024/09/09 12:26:46.306639 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.2288ms +[xorm] [info] 2024/09/09 12:28:46.302184 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.2846ms +[xorm] [info] 2024/09/09 12:30:46.279555 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2897ms +[xorm] [info] 2024/09/09 12:32:46.297258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3558ms +[xorm] [info] 2024/09/09 12:34:46.271176 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.7668ms +[xorm] [info] 2024/09/09 12:36:46.281958 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7994ms +[xorm] [info] 2024/09/09 12:38:46.281820 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8704ms +[xorm] [info] 2024/09/09 12:40:46.303459 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4031ms +[xorm] [info] 2024/09/09 12:42:46.290593 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9801ms +[xorm] [info] 2024/09/09 12:44:46.307992 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.9784ms +[xorm] [info] 2024/09/09 12:46:46.292444 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6647ms +[xorm] [info] 2024/09/09 12:48:46.292258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6568ms +[xorm] [info] 2024/09/09 12:50:46.297779 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3108ms +[xorm] [info] 2024/09/09 12:52:46.289395 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8436ms +[xorm] [info] 2024/09/09 12:54:46.302530 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5457ms +[xorm] [info] 2024/09/09 12:56:46.300396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3473ms +[xorm] [info] 2024/09/09 12:58:46.294185 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1487ms +[xorm] [info] 2024/09/09 13:00:46.288876 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8182ms +[xorm] [info] 2024/09/09 13:02:46.284198 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8062ms +[xorm] [info] 2024/09/09 13:04:46.293645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.7983ms +[xorm] [info] 2024/09/09 13:06:46.281375 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2015ms +[xorm] [info] 2024/09/09 13:08:46.297530 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3169ms +[xorm] [info] 2024/09/09 13:10:46.288553 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7507ms +[xorm] [info] 2024/09/09 13:12:46.301356 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6822ms +[xorm] [info] 2024/09/09 13:14:46.277458 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.1401ms +[xorm] [info] 2024/09/09 13:16:46.302661 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.8711ms +[xorm] [info] 2024/09/09 13:18:46.285922 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6286ms +[xorm] [info] 2024/09/09 13:20:46.293001 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7857ms +[xorm] [info] 2024/09/09 13:22:46.298920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.074ms +[xorm] [info] 2024/09/09 13:24:46.276815 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.708ms +[xorm] [info] 2024/09/09 13:26:46.291327 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5596ms +[xorm] [info] 2024/09/09 13:28:46.303168 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1703ms +[xorm] [info] 2024/09/09 13:30:46.302570 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.7123ms +[xorm] [info] 2024/09/09 13:32:46.278766 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.2199ms +[xorm] [info] 2024/09/09 13:34:46.279307 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4859ms +[xorm] [info] 2024/09/09 13:36:46.283030 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2655ms +[xorm] [info] 2024/09/09 13:38:46.282516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.6266ms +[xorm] [info] 2024/09/09 13:40:46.304907 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.9507ms +[xorm] [info] 2024/09/09 13:42:46.294699 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.5116ms +[xorm] [info] 2024/09/09 13:44:46.303946 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9594ms +[xorm] [info] 2024/09/09 13:46:46.290182 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4617ms +[xorm] [info] 2024/09/09 13:48:46.292314 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3198ms +[xorm] [info] 2024/09/09 13:50:46.281280 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8983ms +[xorm] [info] 2024/09/09 13:52:46.285446 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.5527ms +[xorm] [info] 2024/09/09 13:54:46.291213 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7929ms +[xorm] [info] 2024/09/09 13:56:46.305059 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4652ms +[xorm] [info] 2024/09/09 13:58:46.306223 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.3105ms +[xorm] [info] 2024/09/09 14:00:46.277903 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.6077ms +[xorm] [info] 2024/09/09 14:02:46.279375 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.96ms +[xorm] [info] 2024/09/09 14:04:46.288884 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0437ms +[xorm] [info] 2024/09/09 14:06:46.302726 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2856ms +[xorm] [info] 2024/09/10 17:27:08.718509 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:27:08.766299 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 30.8596ms +[xorm] [info] 2024/09/10 17:27:08.798457 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 32.0378ms +[xorm] [info] 2024/09/10 17:29:08.950717 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.0691ms +[xorm] [info] 2024/09/10 17:31:08.941628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.1538ms +[xorm] [info] 2024/09/10 17:33:08.942793 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3773ms +[xorm] [info] 2024/09/10 17:35:08.958464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8558ms +[xorm] [info] 2024/09/10 17:36:10.646796 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:36:10.690174 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 28.7829ms +[xorm] [info] 2024/09/10 17:36:10.719040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 28.7851ms +[xorm] [info] 2024/09/10 17:37:01.708064 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:37:01.750748 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 27.6791ms +[xorm] [info] 2024/09/10 17:37:01.779711 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 28.2275ms +[xorm] [info] 2024/09/10 17:37:30.627009 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:37:30.664248 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 24.9573ms +[xorm] [info] 2024/09/10 17:37:30.690537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 26.1768ms +[xorm] [info] 2024/09/10 17:37:58.162805 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:37:58.206988 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 30.1509ms +[xorm] [info] 2024/09/10 17:37:58.235833 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 28.7564ms +[xorm] [info] 2024/09/10 17:38:51.678923 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:38:51.717935 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 26.1153ms +[xorm] [info] 2024/09/10 17:38:51.743899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 25.8738ms +[xorm] [info] 2024/09/10 17:39:50.299776 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:39:50.338455 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 25.9781ms +[xorm] [info] 2024/09/10 17:39:50.364785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 26.1933ms +[xorm] [info] 2024/09/10 17:41:50.514744 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5853ms +[xorm] [info] 2024/09/10 17:43:50.521084 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9879ms +[xorm] [info] 2024/09/10 17:45:50.520816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4083ms +[xorm] [info] 2024/09/10 17:47:50.513366 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.0124ms +[xorm] [info] 2024/09/10 17:49:50.520165 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.544ms +[xorm] [info] 2024/09/10 17:51:50.526256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0049ms +[xorm] [info] 2024/09/10 17:53:05.754352 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:53:05.790414 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 24.1167ms +[xorm] [info] 2024/09/10 17:53:05.815420 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 23.6204ms +[xorm] [info] 2024/09/10 17:55:05.960130 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3665ms +[xorm] [info] 2024/09/10 17:57:05.977336 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3599ms +[xorm] [info] 2024/09/10 17:57:38.911884 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:57:38.960342 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 27.3889ms +[xorm] [info] 2024/09/10 17:57:38.998086 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 36.7491ms +[xorm] [info] 2024/09/10 17:57:45.741739 PING DATABASE mysql +[xorm] [info] 2024/09/10 17:57:45.783765 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 27.9896ms +[xorm] [info] 2024/09/10 17:57:45.812027 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 27.8551ms +[xorm] [info] 2024/09/10 18:01:29.450610 PING DATABASE mysql +[xorm] [info] 2024/09/10 18:01:29.489170 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [zyos_website db_mapping] - 25.781ms +[xorm] [info] 2024/09/10 18:01:29.515899 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 26.3824ms +[xorm] [info] 2024/09/10 18:03:29.683600 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.3806ms +[xorm] [info] 2024/09/10 18:05:29.666988 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7838ms +[xorm] [info] 2024/09/10 18:07:29.670670 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.9216ms +[xorm] [info] 2024/09/10 18:09:29.685587 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7932ms +[xorm] [info] 2024/09/10 18:11:29.675790 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7063ms +[xorm] [info] 2024/09/10 18:13:29.679316 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3618ms +[xorm] [info] 2024/09/10 18:15:29.684281 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9188ms +[xorm] [info] 2024/09/10 18:17:29.676738 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6738ms +[xorm] [info] 2024/09/10 18:19:29.671047 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.8543ms +[xorm] [info] 2024/09/10 18:21:29.932246 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 333.7601ms +[xorm] [info] 2024/09/10 18:23:29.765119 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 178.2569ms +[xorm] [info] 2024/09/10 18:25:30.401742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 801.8299ms +[xorm] [info] 2024/09/10 18:27:29.684780 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.7083ms +[xorm] [info] 2024/09/10 18:29:29.688972 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4614ms +[xorm] [info] 2024/09/10 18:31:29.678818 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7854ms +[xorm] [info] 2024/09/10 18:33:29.677505 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8177ms +[xorm] [info] 2024/09/10 18:35:29.670872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9823ms +[xorm] [info] 2024/09/10 18:37:29.673448 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7057ms +[xorm] [info] 2024/09/10 18:39:29.665168 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3048ms +[xorm] [info] 2024/09/10 18:41:30.056124 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 465.0612ms +[xorm] [info] 2024/09/10 18:43:29.669746 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.3528ms +[xorm] [info] 2024/09/10 18:45:29.700451 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.1013ms +[xorm] [info] 2024/09/10 18:47:29.684515 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.2556ms +[xorm] [info] 2024/09/10 18:49:29.670163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9287ms +[xorm] [info] 2024/09/10 18:51:29.691794 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.3477ms +[xorm] [info] 2024/09/10 18:53:29.669912 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4855ms +[xorm] [info] 2024/09/10 18:55:29.686365 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.5884ms +[xorm] [info] 2024/09/10 18:57:29.676162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6037ms +[xorm] [info] 2024/09/10 18:59:29.677371 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7876ms +[xorm] [info] 2024/09/10 19:01:29.684586 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1684ms +[xorm] [info] 2024/09/10 19:03:29.666985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8424ms +[xorm] [info] 2024/09/10 19:05:29.685803 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.8866ms +[xorm] [info] 2024/09/10 19:07:29.678730 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1895ms +[xorm] [info] 2024/09/10 19:09:29.679329 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1563ms +[xorm] [info] 2024/09/10 19:11:29.684049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8263ms +[xorm] [info] 2024/09/10 19:13:29.655210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.5803ms +[xorm] [info] 2024/09/10 19:15:29.665257 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.9464ms +[xorm] [info] 2024/09/10 19:17:29.673016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5886ms +[xorm] [info] 2024/09/10 19:19:29.687210 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.0414ms +[xorm] [info] 2024/09/10 19:21:29.691226 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.3069ms +[xorm] [info] 2024/09/10 19:23:29.686221 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.513ms +[xorm] [info] 2024/09/10 19:25:29.683828 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.9975ms +[xorm] [info] 2024/09/10 19:27:29.670134 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.963ms +[xorm] [info] 2024/09/10 19:29:29.679426 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9521ms +[xorm] [info] 2024/09/10 19:31:29.666743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2709ms +[xorm] [info] 2024/09/10 19:33:29.670220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7659ms +[xorm] [info] 2024/09/10 19:35:29.668598 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2124ms +[xorm] [info] 2024/09/10 19:37:29.676977 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6231ms +[xorm] [info] 2024/09/10 19:39:29.686437 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9835ms +[xorm] [info] 2024/09/10 19:41:29.670263 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.8957ms +[xorm] [info] 2024/09/10 19:43:29.662306 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1497ms +[xorm] [info] 2024/09/10 19:45:29.670487 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9799ms +[xorm] [info] 2024/09/10 19:47:29.666695 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9117ms +[xorm] [info] 2024/09/10 19:49:29.662488 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7848ms +[xorm] [info] 2024/09/10 19:51:29.676986 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.8438ms +[xorm] [info] 2024/09/10 19:53:29.675153 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0578ms +[xorm] [info] 2024/09/10 19:55:29.667805 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1971ms +[xorm] [info] 2024/09/10 19:57:29.667809 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3671ms +[xorm] [info] 2024/09/10 19:59:29.686389 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.12ms +[xorm] [info] 2024/09/10 20:01:29.677785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7852ms +[xorm] [info] 2024/09/10 20:03:29.668425 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2682ms +[xorm] [info] 2024/09/10 20:05:29.662292 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7847ms +[xorm] [info] 2024/09/10 20:07:29.675920 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1053ms +[xorm] [info] 2024/09/10 20:09:29.686396 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8041ms +[xorm] [info] 2024/09/10 20:11:29.687806 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.9215ms +[xorm] [info] 2024/09/10 20:13:29.665771 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7054ms +[xorm] [info] 2024/09/10 20:15:29.660113 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.5979ms +[xorm] [info] 2024/09/10 20:17:29.670728 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2381ms +[xorm] [info] 2024/09/10 20:19:29.688164 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.816ms +[xorm] [info] 2024/09/10 20:21:29.666276 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9433ms +[xorm] [info] 2024/09/10 20:23:29.682833 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.745ms +[xorm] [info] 2024/09/10 20:25:29.680467 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9932ms +[xorm] [info] 2024/09/10 20:27:29.672102 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8033ms +[xorm] [info] 2024/09/10 20:29:29.670550 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8433ms +[xorm] [info] 2024/09/10 20:31:29.673716 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.26ms +[xorm] [info] 2024/09/10 20:33:29.678909 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3062ms +[xorm] [info] 2024/09/10 20:35:29.675561 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5661ms +[xorm] [info] 2024/09/10 20:37:29.680517 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.621ms +[xorm] [info] 2024/09/10 20:39:29.677537 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.832ms +[xorm] [info] 2024/09/10 20:41:29.707329 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 107.1759ms +[xorm] [info] 2024/09/10 20:43:29.675734 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.783ms +[xorm] [info] 2024/09/10 20:45:29.674172 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6026ms +[xorm] [info] 2024/09/10 20:47:29.673423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7191ms +[xorm] [info] 2024/09/10 20:49:29.683890 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5843ms +[xorm] [info] 2024/09/10 20:51:29.682299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.1077ms +[xorm] [info] 2024/09/10 20:53:29.668666 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7873ms +[xorm] [info] 2024/09/10 20:55:29.677163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.4708ms +[xorm] [info] 2024/09/10 20:57:29.681944 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.5954ms +[xorm] [info] 2024/09/10 20:59:29.679725 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.0588ms +[xorm] [info] 2024/09/10 21:01:29.674852 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9465ms +[xorm] [info] 2024/09/10 21:03:29.672379 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5999ms +[xorm] [info] 2024/09/10 21:05:29.674104 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8502ms +[xorm] [info] 2024/09/10 21:07:29.683010 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.0092ms +[xorm] [info] 2024/09/10 21:09:29.672948 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8291ms +[xorm] [info] 2024/09/10 21:11:29.663187 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1023ms +[xorm] [info] 2024/09/10 21:13:29.695179 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 97.5637ms +[xorm] [info] 2024/09/10 21:15:29.679875 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.055ms +[xorm] [info] 2024/09/10 21:17:29.680861 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8519ms +[xorm] [info] 2024/09/10 21:19:29.674420 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0854ms +[xorm] [info] 2024/09/10 21:21:29.655151 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 66.6848ms +[xorm] [info] 2024/09/10 21:23:29.670911 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4908ms +[xorm] [info] 2024/09/10 21:25:29.681415 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.8778ms +[xorm] [info] 2024/09/10 21:27:29.675705 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2438ms +[xorm] [info] 2024/09/10 21:29:29.669529 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.7254ms +[xorm] [info] 2024/09/10 21:31:29.667313 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8516ms +[xorm] [info] 2024/09/10 21:33:29.679486 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1019ms +[xorm] [info] 2024/09/10 21:35:29.669255 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4273ms +[xorm] [info] 2024/09/10 21:37:29.665276 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7371ms +[xorm] [info] 2024/09/10 21:39:29.668693 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8577ms +[xorm] [info] 2024/09/10 21:41:29.678523 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1718ms +[xorm] [info] 2024/09/10 21:43:29.670713 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9117ms +[xorm] [info] 2024/09/10 21:45:29.668667 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4079ms +[xorm] [info] 2024/09/10 21:47:29.682812 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.1155ms +[xorm] [info] 2024/09/10 21:49:29.684580 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.1565ms +[xorm] [info] 2024/09/10 21:51:29.682075 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7193ms +[xorm] [info] 2024/09/10 21:53:29.667002 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.8422ms +[xorm] [info] 2024/09/10 21:55:29.662985 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.3008ms +[xorm] [info] 2024/09/10 21:57:29.674965 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0067ms +[xorm] [info] 2024/09/10 21:59:29.699411 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 103.6952ms +[xorm] [info] 2024/09/10 22:01:29.662476 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.6151ms +[xorm] [info] 2024/09/10 22:03:29.665878 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1278ms +[xorm] [info] 2024/09/10 22:05:29.667063 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.0269ms +[xorm] [info] 2024/09/10 22:07:29.677852 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4316ms +[xorm] [info] 2024/09/10 22:09:29.670564 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4261ms +[xorm] [info] 2024/09/10 22:11:29.661913 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8774ms +[xorm] [info] 2024/09/10 22:13:29.671330 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1475ms +[xorm] [info] 2024/09/10 22:15:29.679565 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8016ms +[xorm] [info] 2024/09/10 22:17:29.693071 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6543ms +[xorm] [info] 2024/09/10 22:19:29.674102 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1232ms +[xorm] [info] 2024/09/10 22:21:29.665952 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.9085ms +[xorm] [info] 2024/09/10 22:23:29.677981 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.9226ms +[xorm] [info] 2024/09/10 22:25:29.675307 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5683ms +[xorm] [info] 2024/09/10 22:27:29.662105 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0449ms +[xorm] [info] 2024/09/10 22:29:29.673660 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.5541ms +[xorm] [info] 2024/09/10 22:31:29.679563 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8281ms +[xorm] [info] 2024/09/10 22:33:29.691800 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8792ms +[xorm] [info] 2024/09/10 22:35:29.675831 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1349ms +[xorm] [info] 2024/09/10 22:37:29.672357 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0177ms +[xorm] [info] 2024/09/10 22:39:29.675826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.2907ms +[xorm] [info] 2024/09/10 22:41:29.686119 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.704ms +[xorm] [info] 2024/09/10 22:43:29.666617 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.8778ms +[xorm] [info] 2024/09/10 22:45:29.688399 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7409ms +[xorm] [info] 2024/09/10 22:47:29.680867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.2678ms +[xorm] [info] 2024/09/10 22:49:29.674324 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3773ms +[xorm] [info] 2024/09/10 22:51:29.686456 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7115ms +[xorm] [info] 2024/09/10 22:53:29.671990 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.0725ms +[xorm] [info] 2024/09/10 22:55:29.671162 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6374ms +[xorm] [info] 2024/09/10 22:57:29.683160 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 94.806ms +[xorm] [info] 2024/09/10 22:59:29.719160 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 128.8416ms +[xorm] [info] 2024/09/10 23:01:29.672535 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.6146ms +[xorm] [info] 2024/09/10 23:03:29.669565 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.448ms +[xorm] [info] 2024/09/10 23:05:29.670464 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8202ms +[xorm] [info] 2024/09/10 23:07:29.674697 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6152ms +[xorm] [info] 2024/09/10 23:09:29.689102 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.8448ms +[xorm] [info] 2024/09/10 23:11:29.671498 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.7532ms +[xorm] [info] 2024/09/10 23:13:29.665558 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1924ms +[xorm] [info] 2024/09/10 23:15:29.674858 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.4043ms +[xorm] [info] 2024/09/10 23:17:29.685421 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.1163ms +[xorm] [info] 2024/09/10 23:19:29.689362 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.8015ms +[xorm] [info] 2024/09/10 23:21:29.669073 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4938ms +[xorm] [info] 2024/09/10 23:23:29.674059 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3078ms +[xorm] [info] 2024/09/10 23:25:29.673785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.857ms +[xorm] [info] 2024/09/10 23:27:29.666780 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.638ms +[xorm] [info] 2024/09/10 23:29:29.685624 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.6824ms +[xorm] [info] 2024/09/10 23:31:29.670079 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5862ms +[xorm] [info] 2024/09/10 23:33:29.693346 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4696ms +[xorm] [info] 2024/09/10 23:35:29.675367 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4525ms +[xorm] [info] 2024/09/10 23:37:29.665056 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6564ms +[xorm] [info] 2024/09/10 23:39:29.683466 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9459ms +[xorm] [info] 2024/09/10 23:41:29.673337 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.1349ms +[xorm] [info] 2024/09/10 23:43:29.669858 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1015ms +[xorm] [info] 2024/09/10 23:45:29.673540 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.1182ms +[xorm] [info] 2024/09/10 23:47:29.672409 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9137ms +[xorm] [info] 2024/09/10 23:49:29.680760 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6427ms +[xorm] [info] 2024/09/10 23:51:29.668748 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.3853ms +[xorm] [info] 2024/09/10 23:53:29.672967 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1194ms +[xorm] [info] 2024/09/10 23:55:29.671562 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.3522ms +[xorm] [info] 2024/09/10 23:57:29.685669 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8946ms +[xorm] [info] 2024/09/10 23:59:29.690139 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 99.8521ms +[xorm] [info] 2024/09/11 00:01:29.662127 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5211ms +[xorm] [info] 2024/09/11 00:03:29.666911 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9601ms +[xorm] [info] 2024/09/11 00:05:29.668211 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.4578ms +[xorm] [info] 2024/09/11 00:07:29.689056 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.4785ms +[xorm] [info] 2024/09/11 00:09:29.685789 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4958ms +[xorm] [info] 2024/09/11 00:11:29.668218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4412ms +[xorm] [info] 2024/09/11 00:13:29.671163 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8217ms +[xorm] [info] 2024/09/11 00:15:29.667391 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.849ms +[xorm] [info] 2024/09/11 00:17:29.675807 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4575ms +[xorm] [info] 2024/09/11 00:19:29.669099 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.6397ms +[xorm] [info] 2024/09/11 00:21:29.667466 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1094ms +[xorm] [info] 2024/09/11 00:23:29.679040 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.9444ms +[xorm] [info] 2024/09/11 00:25:29.682626 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.1733ms +[xorm] [info] 2024/09/11 00:27:29.684059 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.0533ms +[xorm] [info] 2024/09/11 00:29:29.669612 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.6874ms +[xorm] [info] 2024/09/11 00:31:29.674794 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.9945ms +[xorm] [info] 2024/09/11 00:33:29.675867 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.736ms +[xorm] [info] 2024/09/11 00:35:29.671731 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.56ms +[xorm] [info] 2024/09/11 00:37:29.668057 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.3259ms +[xorm] [info] 2024/09/11 00:39:29.675423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7472ms +[xorm] [info] 2024/09/11 00:41:29.654657 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.5221ms +[xorm] [info] 2024/09/11 00:43:29.668114 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5009ms +[xorm] [info] 2024/09/11 00:45:29.666762 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5307ms +[xorm] [info] 2024/09/11 00:47:29.675318 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1331ms +[xorm] [info] 2024/09/11 00:49:29.676086 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4797ms +[xorm] [info] 2024/09/11 00:51:29.681218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.6846ms +[xorm] [info] 2024/09/11 00:53:29.668669 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.486ms +[xorm] [info] 2024/09/11 00:55:29.678023 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.3929ms +[xorm] [info] 2024/09/11 00:57:29.671179 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8941ms +[xorm] [info] 2024/09/11 00:59:29.686360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.6847ms +[xorm] [info] 2024/09/11 01:01:29.671247 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2222ms +[xorm] [info] 2024/09/11 01:03:29.676217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.448ms +[xorm] [info] 2024/09/11 01:05:29.673364 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.5229ms +[xorm] [info] 2024/09/11 01:07:29.663940 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1464ms +[xorm] [info] 2024/09/11 01:09:29.675049 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4818ms +[xorm] [info] 2024/09/11 01:11:29.690194 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.9735ms +[xorm] [info] 2024/09/11 01:13:29.690602 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2024ms +[xorm] [info] 2024/09/11 01:15:29.662425 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5375ms +[xorm] [info] 2024/09/11 01:17:29.673307 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2697ms +[xorm] [info] 2024/09/11 01:19:29.677866 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7407ms +[xorm] [info] 2024/09/11 01:21:29.677885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.2426ms +[xorm] [info] 2024/09/11 01:23:29.671710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.0606ms +[xorm] [info] 2024/09/11 01:25:29.672005 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5729ms +[xorm] [info] 2024/09/11 01:27:29.674984 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9269ms +[xorm] [info] 2024/09/11 01:29:29.681743 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5296ms +[xorm] [info] 2024/09/11 01:31:29.673277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5591ms +[xorm] [info] 2024/09/11 01:33:29.666851 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0737ms +[xorm] [info] 2024/09/11 01:35:29.668628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.2599ms +[xorm] [info] 2024/09/11 01:37:29.671636 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8558ms +[xorm] [info] 2024/09/11 01:39:29.668620 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0858ms +[xorm] [info] 2024/09/11 01:41:29.669792 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.805ms +[xorm] [info] 2024/09/11 01:43:29.679259 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5808ms +[xorm] [info] 2024/09/11 01:45:29.675002 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.707ms +[xorm] [info] 2024/09/11 01:47:29.673186 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.7593ms +[xorm] [info] 2024/09/11 01:49:29.671233 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8084ms +[xorm] [info] 2024/09/11 01:51:29.691284 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6422ms +[xorm] [info] 2024/09/11 01:53:29.664855 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.0943ms +[xorm] [info] 2024/09/11 01:55:29.669380 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0278ms +[xorm] [info] 2024/09/11 01:57:29.665145 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7851ms +[xorm] [info] 2024/09/11 01:59:29.686249 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6046ms +[xorm] [info] 2024/09/11 02:01:29.684925 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3648ms +[xorm] [info] 2024/09/11 02:03:29.671752 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3905ms +[xorm] [info] 2024/09/11 02:05:29.691218 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.4048ms +[xorm] [info] 2024/09/11 02:07:29.674446 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0188ms +[xorm] [info] 2024/09/11 02:09:29.691377 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4056ms +[xorm] [info] 2024/09/11 02:11:29.674130 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9224ms +[xorm] [info] 2024/09/11 02:13:29.677346 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0768ms +[xorm] [info] 2024/09/11 02:15:29.687281 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9052ms +[xorm] [info] 2024/09/11 02:17:29.677237 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9859ms +[xorm] [info] 2024/09/11 02:19:29.674772 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1041ms +[xorm] [info] 2024/09/11 02:21:29.667309 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0087ms +[xorm] [info] 2024/09/11 02:23:29.678220 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.512ms +[xorm] [info] 2024/09/11 02:25:29.691098 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.9456ms +[xorm] [info] 2024/09/11 02:27:29.685445 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.7448ms +[xorm] [info] 2024/09/11 02:29:29.670723 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2322ms +[xorm] [info] 2024/09/11 02:31:29.668832 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8234ms +[xorm] [info] 2024/09/11 02:33:29.677305 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.055ms +[xorm] [info] 2024/09/11 02:35:29.668525 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5296ms +[xorm] [info] 2024/09/11 02:37:29.674647 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 81.177ms +[xorm] [info] 2024/09/11 02:39:29.677675 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0832ms +[xorm] [info] 2024/09/11 02:41:29.668026 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5302ms +[xorm] [info] 2024/09/11 02:43:29.682872 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.2356ms +[xorm] [info] 2024/09/11 02:45:29.662651 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.8461ms +[xorm] [info] 2024/09/11 02:47:29.674717 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.404ms +[xorm] [info] 2024/09/11 02:49:29.665784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.4407ms +[xorm] [info] 2024/09/11 02:51:29.673567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3929ms +[xorm] [info] 2024/09/11 02:53:29.669461 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.1916ms +[xorm] [info] 2024/09/11 02:55:29.670198 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.7632ms +[xorm] [info] 2024/09/11 02:57:29.668156 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5736ms +[xorm] [info] 2024/09/11 02:59:29.672625 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.7195ms +[xorm] [info] 2024/09/11 03:01:29.664209 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.702ms +[xorm] [info] 2024/09/11 03:03:29.678502 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2691ms +[xorm] [info] 2024/09/11 03:05:29.665493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.6905ms +[xorm] [info] 2024/09/11 03:07:29.679534 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9103ms +[xorm] [info] 2024/09/11 03:09:29.678325 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0164ms +[xorm] [info] 2024/09/11 03:11:29.671797 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.9255ms +[xorm] [info] 2024/09/11 03:13:29.674121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3091ms +[xorm] [info] 2024/09/11 03:15:29.679033 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5939ms +[xorm] [info] 2024/09/11 03:17:29.692784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.8529ms +[xorm] [info] 2024/09/11 03:19:29.684931 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.726ms +[xorm] [info] 2024/09/11 03:21:29.668826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7552ms +[xorm] [info] 2024/09/11 03:23:29.677825 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.1627ms +[xorm] [info] 2024/09/11 03:25:29.680417 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.6016ms +[xorm] [info] 2024/09/11 03:27:29.681418 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7523ms +[xorm] [info] 2024/09/11 03:29:29.692125 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.6642ms +[xorm] [info] 2024/09/11 03:31:29.669548 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.3164ms +[xorm] [info] 2024/09/11 03:33:29.680675 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.916ms +[xorm] [info] 2024/09/11 03:35:29.692415 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.7828ms +[xorm] [info] 2024/09/11 03:37:29.672317 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.4281ms +[xorm] [info] 2024/09/11 03:39:29.671653 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1123ms +[xorm] [info] 2024/09/11 03:41:29.660875 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.5915ms +[xorm] [info] 2024/09/11 03:43:29.680078 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7075ms +[xorm] [info] 2024/09/11 03:45:29.672016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1007ms +[xorm] [info] 2024/09/11 03:47:29.672331 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0725ms +[xorm] [info] 2024/09/11 03:49:29.673918 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1684ms +[xorm] [info] 2024/09/11 03:51:29.678448 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.0136ms +[xorm] [info] 2024/09/11 03:53:29.678599 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.156ms +[xorm] [info] 2024/09/11 03:55:29.680056 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4681ms +[xorm] [info] 2024/09/11 03:57:29.678120 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.4702ms +[xorm] [info] 2024/09/11 03:59:29.686493 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 98.516ms +[xorm] [info] 2024/09/11 04:01:29.679009 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1024ms +[xorm] [info] 2024/09/11 04:03:29.676620 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8612ms +[xorm] [info] 2024/09/11 04:05:29.679549 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.1029ms +[xorm] [info] 2024/09/11 04:07:29.664630 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0502ms +[xorm] [info] 2024/09/11 04:09:29.673875 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.729ms +[xorm] [info] 2024/09/11 04:11:29.668730 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5479ms +[xorm] [info] 2024/09/11 04:13:29.673885 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.4817ms +[xorm] [info] 2024/09/11 04:15:29.680758 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7293ms +[xorm] [info] 2024/09/11 04:17:29.669050 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.8993ms +[xorm] [info] 2024/09/11 04:19:29.682132 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.5806ms +[xorm] [info] 2024/09/11 04:21:29.679033 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.6563ms +[xorm] [info] 2024/09/11 04:23:29.672236 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.944ms +[xorm] [info] 2024/09/11 04:25:29.687359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.3642ms +[xorm] [info] 2024/09/11 04:27:29.665825 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.2589ms +[xorm] [info] 2024/09/11 04:29:29.691634 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.101ms +[xorm] [info] 2024/09/11 04:31:29.679607 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6772ms +[xorm] [info] 2024/09/11 04:33:29.666601 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.7929ms +[xorm] [info] 2024/09/11 04:35:29.684816 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.4002ms +[xorm] [info] 2024/09/11 04:37:29.684976 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.8682ms +[xorm] [info] 2024/09/11 04:39:29.667384 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0534ms +[xorm] [info] 2024/09/11 04:41:29.678610 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9505ms +[xorm] [info] 2024/09/11 04:43:29.685354 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2498ms +[xorm] [info] 2024/09/11 04:45:29.684863 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.8656ms +[xorm] [info] 2024/09/11 04:47:29.665016 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 67.2445ms +[xorm] [info] 2024/09/11 04:49:29.665349 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2012ms +[xorm] [info] 2024/09/11 04:51:29.680960 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.3202ms +[xorm] [info] 2024/09/11 04:53:29.673658 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1685ms +[xorm] [info] 2024/09/11 04:55:29.672516 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.822ms +[xorm] [info] 2024/09/11 04:57:29.669789 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4716ms +[xorm] [info] 2024/09/11 04:59:29.672740 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3823ms +[xorm] [info] 2024/09/11 05:01:29.663319 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.9965ms +[xorm] [info] 2024/09/11 05:03:29.659418 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.48ms +[xorm] [info] 2024/09/11 05:05:29.665423 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.9542ms +[xorm] [info] 2024/09/11 05:07:29.672147 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8854ms +[xorm] [info] 2024/09/11 05:09:29.666391 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2089ms +[xorm] [info] 2024/09/11 05:11:29.671299 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.435ms +[xorm] [info] 2024/09/11 05:13:29.698088 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.69ms +[xorm] [info] 2024/09/11 05:15:29.662217 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.4592ms +[xorm] [info] 2024/09/11 05:17:29.665827 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.8771ms +[xorm] [info] 2024/09/11 05:19:29.670624 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0317ms +[xorm] [info] 2024/09/11 05:21:29.682091 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.4238ms +[xorm] [info] 2024/09/11 05:23:29.687090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.67ms +[xorm] [info] 2024/09/11 05:25:29.674380 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.0555ms +[xorm] [info] 2024/09/11 05:27:29.666603 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.2615ms +[xorm] [info] 2024/09/11 05:29:29.670243 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.1728ms +[xorm] [info] 2024/09/11 05:31:29.670212 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.7401ms +[xorm] [info] 2024/09/11 05:33:29.675323 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 85.2034ms +[xorm] [info] 2024/09/11 05:35:29.677165 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.6755ms +[xorm] [info] 2024/09/11 05:37:29.679324 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.9701ms +[xorm] [info] 2024/09/11 05:39:29.668007 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5001ms +[xorm] [info] 2024/09/11 05:41:29.668064 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4671ms +[xorm] [info] 2024/09/11 05:43:29.685121 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.9523ms +[xorm] [info] 2024/09/11 05:45:29.676109 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1968ms +[xorm] [info] 2024/09/11 05:47:29.684926 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 86.3073ms +[xorm] [info] 2024/09/11 05:49:29.675826 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.2503ms +[xorm] [info] 2024/09/11 05:51:29.690969 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.5991ms +[xorm] [info] 2024/09/11 05:53:29.670390 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.5499ms +[xorm] [info] 2024/09/11 05:55:29.672171 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0482ms +[xorm] [info] 2024/09/11 05:57:29.686000 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7605ms +[xorm] [info] 2024/09/11 05:59:29.676549 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.6838ms +[xorm] [info] 2024/09/11 06:01:29.660270 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 70.7268ms +[xorm] [info] 2024/09/11 06:03:29.675268 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.913ms +[xorm] [info] 2024/09/11 06:05:29.662497 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.6728ms +[xorm] [info] 2024/09/11 06:07:29.669803 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7968ms +[xorm] [info] 2024/09/11 06:09:29.683526 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5305ms +[xorm] [info] 2024/09/11 06:11:29.667636 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.0372ms +[xorm] [info] 2024/09/11 06:13:29.666250 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5229ms +[xorm] [info] 2024/09/11 06:15:29.668115 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0684ms +[xorm] [info] 2024/09/11 06:17:29.677565 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.9297ms +[xorm] [info] 2024/09/11 06:19:29.697592 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 96.6485ms +[xorm] [info] 2024/09/11 06:21:29.677428 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.912ms +[xorm] [info] 2024/09/11 06:23:29.668189 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.5537ms +[xorm] [info] 2024/09/11 06:25:29.674470 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.7934ms +[xorm] [info] 2024/09/11 06:27:29.671253 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.2543ms +[xorm] [info] 2024/09/11 06:29:29.669701 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0388ms +[xorm] [info] 2024/09/11 06:31:29.665721 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.4806ms +[xorm] [info] 2024/09/11 06:33:29.675486 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0781ms +[xorm] [info] 2024/09/11 06:35:29.674605 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.0307ms +[xorm] [info] 2024/09/11 06:37:29.685072 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.6035ms +[xorm] [info] 2024/09/11 06:39:29.677424 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5225ms +[xorm] [info] 2024/09/11 06:41:29.665933 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.1104ms +[xorm] [info] 2024/09/11 06:43:29.669972 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.7481ms +[xorm] [info] 2024/09/11 06:45:29.678957 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.1372ms +[xorm] [info] 2024/09/11 06:47:29.660258 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.9994ms +[xorm] [info] 2024/09/11 06:49:29.681759 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.8792ms +[xorm] [info] 2024/09/11 06:51:29.673360 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.9316ms +[xorm] [info] 2024/09/11 06:53:29.663207 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.2817ms +[xorm] [info] 2024/09/11 06:55:29.664480 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.8095ms +[xorm] [info] 2024/09/11 06:57:29.686277 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.4588ms +[xorm] [info] 2024/09/11 06:59:29.683798 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7583ms +[xorm] [info] 2024/09/11 07:01:29.692567 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.7408ms +[xorm] [info] 2024/09/11 07:03:29.678912 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.4312ms +[xorm] [info] 2024/09/11 07:05:29.685376 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.2907ms +[xorm] [info] 2024/09/11 07:07:29.688359 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.7073ms +[xorm] [info] 2024/09/11 07:09:29.683850 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.159ms +[xorm] [info] 2024/09/11 07:11:29.679441 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.5447ms +[xorm] [info] 2024/09/11 07:13:29.678935 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 88.5007ms +[xorm] [info] 2024/09/11 07:15:29.663963 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 68.6401ms +[xorm] [info] 2024/09/11 07:17:29.670700 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8684ms +[xorm] [info] 2024/09/11 07:19:29.666722 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.1962ms +[xorm] [info] 2024/09/11 07:21:29.669230 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.0838ms +[xorm] [info] 2024/09/11 07:23:29.667124 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.8838ms +[xorm] [info] 2024/09/11 07:25:29.669448 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.6356ms +[xorm] [info] 2024/09/11 07:27:29.671871 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 71.6722ms +[xorm] [info] 2024/09/11 07:29:29.679951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.7093ms +[xorm] [info] 2024/09/11 07:31:29.681435 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2062ms +[xorm] [info] 2024/09/11 07:33:29.680998 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7015ms +[xorm] [info] 2024/09/11 07:35:29.679768 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.183ms +[xorm] [info] 2024/09/11 07:37:29.679282 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.5022ms +[xorm] [info] 2024/09/11 07:39:29.675966 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.9527ms +[xorm] [info] 2024/09/11 07:41:29.673127 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 74.5942ms +[xorm] [info] 2024/09/11 07:43:29.680996 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.8409ms +[xorm] [info] 2024/09/11 07:45:29.676780 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.9505ms +[xorm] [info] 2024/09/11 07:47:29.667645 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 75.1178ms +[xorm] [info] 2024/09/11 07:49:29.667909 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7336ms +[xorm] [info] 2024/09/11 07:51:29.681951 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.4524ms +[xorm] [info] 2024/09/11 07:53:29.689634 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.6141ms +[xorm] [info] 2024/09/11 07:55:29.672042 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.9259ms +[xorm] [info] 2024/09/11 07:57:29.684287 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.2043ms +[xorm] [info] 2024/09/11 07:59:29.684710 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 93.0124ms +[xorm] [info] 2024/09/11 08:01:29.676848 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.2467ms +[xorm] [info] 2024/09/11 08:03:29.667555 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 79.3515ms +[xorm] [info] 2024/09/11 08:05:29.691090 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.0782ms +[xorm] [info] 2024/09/11 08:07:29.674784 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.1874ms +[xorm] [info] 2024/09/11 08:09:29.684817 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.0225ms +[xorm] [info] 2024/09/11 08:11:29.680155 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.4269ms +[xorm] [info] 2024/09/11 08:13:29.683755 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.4615ms +[xorm] [info] 2024/09/11 08:15:29.667234 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 76.526ms +[xorm] [info] 2024/09/11 08:17:29.667441 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.5293ms +[xorm] [info] 2024/09/11 08:19:29.673849 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.3407ms +[xorm] [info] 2024/09/11 08:21:29.693701 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 100.0213ms +[xorm] [info] 2024/09/11 08:23:29.684605 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 91.0431ms +[xorm] [info] 2024/09/11 08:25:29.665377 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 72.1753ms +[xorm] [info] 2024/09/11 08:27:29.683621 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 92.816ms +[xorm] [info] 2024/09/11 08:29:29.680262 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.1094ms +[xorm] [info] 2024/09/11 08:31:29.680785 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.7365ms +[xorm] [info] 2024/09/11 08:33:29.670934 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 80.7847ms +[xorm] [info] 2024/09/11 08:35:29.671463 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.7977ms +[xorm] [info] 2024/09/11 08:37:29.656245 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 69.7642ms +[xorm] [info] 2024/09/11 08:39:29.674256 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 77.3048ms +[xorm] [info] 2024/09/11 08:41:29.679644 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.6321ms +[xorm] [info] 2024/09/11 08:43:29.666605 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.0128ms +[xorm] [info] 2024/09/11 08:45:29.679525 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.5317ms +[xorm] [info] 2024/09/11 08:47:29.672681 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 82.751ms +[xorm] [info] 2024/09/11 08:49:29.683425 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 89.7761ms +[xorm] [info] 2024/09/11 08:51:30.512169 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 921.8582ms +[xorm] [info] 2024/09/11 08:53:30.505742 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 907.5676ms +[xorm] [info] 2024/09/11 08:55:30.468382 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 872.7661ms +[xorm] [info] 2024/09/11 08:57:30.430484 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 833.5904ms +[xorm] [info] 2024/09/11 08:59:30.381468 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 793.3013ms +[xorm] [info] 2024/09/11 09:01:30.369555 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 774.2435ms +[xorm] [info] 2024/09/11 09:03:29.691344 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.283ms +[xorm] [info] 2024/09/11 09:05:29.680578 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 84.6142ms +[xorm] [info] 2024/09/11 09:07:29.673523 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 78.0809ms +[xorm] [info] 2024/09/11 09:09:29.686707 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 87.9265ms +[xorm] [info] 2024/09/11 09:11:29.680628 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 90.7296ms +[xorm] [info] 2024/09/11 09:13:29.670936 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 73.7736ms +[xorm] [info] 2024/09/11 09:15:29.683205 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 83.3246ms +[xorm] [info] 2024/09/11 09:17:29.700354 [SQL] SELECT `db_master_id`, `db_host`, `db_username`, `db_password`, `db_name`, `external_mysql`, `is_dev`, `created_at`, `updated_at`, `deleted_at` FROM `db_mapping` WHERE (deleted_at != ? AND is_dev = '1' AND db_master_id=?) [1 123456] - 95.6306ms diff --git a/wap.conf b/wap.conf new file mode 100644 index 0000000..8f0d455 --- /dev/null +++ b/wap.conf @@ -0,0 +1,35 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + #将DNS指向kubernetes集群内的DNS + resolver kube-dns.kube-system.svc.cluster.local valid=30s; + + set $oss_endpoint_service zyos-oss.dev.svc.cluster.local:5000; + set $endpoint_service zyos-app.dev.svc.cluster.local:5000; + + location /static { + root /usr/share/nginx/html; + index index.html index.htm; + } + location /api/qiniu { + proxy_pass http://$oss_endpoint_service; + proxy_set_header Connection ""; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + break; + } + #proxy server + location /api { + proxy_pass http://$endpoint_service; + + proxy_http_version 1.1; + + proxy_set_header Connection ""; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + break; + } +} \ No newline at end of file