格式化项目代码

pull/23/head
taoshihan1991 5 years ago
parent 2596e46821
commit 1581b69627

@ -18,6 +18,7 @@ var installCmd = &cobra.Command{
install()
},
}
func install() {
sqlFile := config.Dir + "go-fly.sql"
isExit, _ := tools.IsFileExist(config.MysqlConf)

@ -1,10 +1,12 @@
package cmd
import (
"errors"
"fmt"
"github.com/spf13/cobra"
"os"
)
var rootCmd = &cobra.Command{
Use: "go-fly",
Short: "go-fly",
@ -14,6 +16,7 @@ var rootCmd = &cobra.Command{
},
}
func args(cmd *cobra.Command, args []string) error {
if len(args) < 1 {

@ -13,6 +13,7 @@ import (
"os/exec"
"path/filepath"
)
var (
port string
tcpport string
@ -27,6 +28,7 @@ var serverCmd = &cobra.Command{
run()
},
}
func init() {
serverCmd.PersistentFlags().StringVarP(&port, "port", "p", "8081", "监听端口号")
serverCmd.PersistentFlags().StringVarP(&tcpport, "tcpport", "t", "8082", "监听tcp端口号")

@ -7,12 +7,14 @@ import (
"io/ioutil"
"os"
)
var (
PageSize uint = 10
VisitorPageSize uint = 8
Version = "0.1.2"
GoflyConfig *Config
)
const Dir = "config/"
const AccountConf = Dir + "account.json"
const MysqlConf = Dir + "mysql.json"
@ -21,10 +23,12 @@ const LangConf=Dir+"language.json"
const MainConf = Dir + "config.json"
const WeixinToken = ""
const ServerJiang = ""
func init() {
//配置文件
GoflyConfig = CreateConfig()
}
type Mysql struct {
Server string
Port string
@ -39,6 +43,7 @@ type Config struct {
Upload string
NoticeServerJiang bool
}
func CreateConfig() *Config {
var configObj Config
c := &Config{

@ -39,5 +39,3 @@ func CreateLanguage(lang string)*Language{
}
return language
}

@ -9,6 +9,7 @@ import (
"sort"
"time"
)
type vistor struct {
conn *websocket.Conn
name string
@ -22,6 +23,7 @@ type Message struct{
content []byte
messageType int
}
var clientList = make(map[string]*vistor)
var kefuList = make(map[string][]*websocket.Conn)
var message = make(chan *Message)
@ -43,6 +45,7 @@ type ClientMessage struct {
ClientIp string `json:"client_ip"`
Refer string `json:"refer"`
}
//定时检测客户端是否在线
func init() {
upgrader = websocket.Upgrader{
@ -119,6 +122,7 @@ func SendKefuOnline(clientMsg ClientMessage, conn *websocket.Conn) {
jsonStrByte, _ := json.Marshal(sendMsg)
conn.WriteMessage(websocket.TextMessage, jsonStrByte)
}
//发送通知
func SendNotice(msg string, conn *websocket.Conn) {
sendMsg := TypeMessage{
@ -148,7 +152,7 @@ func sendPingToClient() {
var newkfConns = make([]*websocket.Conn, 0)
for _, kefuConn := range kfConns {
if(kefuConn==nil){
if kefuConn == nil {
continue
}
err := kefuConn.WriteMessage(websocket.TextMessage, str)
@ -167,6 +171,7 @@ func sendPingToClient() {
}()
}
//定时给更新数据库状态
func sendPingUpdateStatus() {
for {
@ -180,6 +185,7 @@ func sendPingUpdateStatus() {
time.Sleep(20 * time.Second)
}
}
//定时推送当前在线用户
func sendPingOnlineUsers() {
var visitorIds []string
@ -311,6 +317,3 @@ func singleBroadcaster(){
}
}

@ -13,6 +13,7 @@ import (
)
const PageSize = 20
func GetFolders(c *gin.Context) {
fid := c.Query("fid")
currentPage, _ := strconv.Atoi(c.Query("page"))
@ -69,6 +70,7 @@ func GetFolderList(c *gin.Context) {
"result": result,
})
}
//输出列表
func ActionFolder(w http.ResponseWriter, r *http.Request) {
fid := tools.GetUrlArg(r, "fid")

@ -5,9 +5,11 @@ import (
"github.com/taoshihan1991/imaptool/tools"
"net/http"
)
func Index(c *gin.Context) {
c.Redirect(302, "/index")
}
//首页跳转
func ActionIndex(w http.ResponseWriter, r *http.Request) {
if r.URL.RequestURI() == "/favicon.ico" {

@ -5,6 +5,7 @@ import (
"github.com/taoshihan1991/imaptool/tools"
"time"
)
// @Summary 登陆验证接口
// @Produce json
// @Accept multipart/form-data

@ -13,6 +13,7 @@ import (
"strings"
"time"
)
// @Summary 发送消息接口
// @Produce json
// @Accept multipart/form-data

@ -8,6 +8,7 @@ import (
"github.com/taoshihan1991/imaptool/tools"
"os"
)
func MysqlGetConf(c *gin.Context) {
mysqlInfo := config.GetMysql()
c.JSON(200, gin.H{

@ -11,6 +11,7 @@ import (
"net/http"
"time"
)
func GetNotice(c *gin.Context) {
kefuId := c.Query("kefu_id")
welcomes := models.FindWelcomesByUserId(kefuId)
@ -61,6 +62,7 @@ func DelNotice(c *gin.Context) {
"result": "",
})
}
var upgrader = websocket.Upgrader{}
var oldFolders map[string]int

@ -1,4 +1,5 @@
package controller
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`

@ -16,7 +16,7 @@ func SendServerJiang(content string)string{
return ""
}
sendStr := fmt.Sprintf("%s,访客来了", content)
desp:="[登录](https://gofly.sopans.com/main)";
desp := "[登录](https://gofly.sopans.com/main)"
url := serverJiangAPI + "?text=" + sendStr + "&desp=" + desp
//log.Println(url)
res := tools.Get(url)

@ -5,7 +5,9 @@ import (
"log"
"net"
)
var clientTcpList = make(map[string]net.Conn)
func NewTcpServer(tcpBaseServer string) {
listener, err := net.Listen("tcp", tcpBaseServer)
if err != nil {

@ -12,6 +12,7 @@ import (
"math/rand"
"strconv"
)
func PostVisitor(c *gin.Context) {
name := c.PostForm("name")
avator := c.PostForm("avator")
@ -112,6 +113,7 @@ func GetVisitor(c *gin.Context) {
"result": vistor,
})
}
// @Summary 获取访客列表接口
// @Produce json
// @Accept multipart/form-data
@ -135,6 +137,7 @@ func GetVisitors(c *gin.Context) {
},
})
}
// @Summary 获取访客聊天信息接口
// @Produce json
// @Accept multipart/form-data

@ -6,10 +6,12 @@ import (
_ "github.com/go-sql-driver/mysql"
"github.com/taoshihan1991/imaptool/config"
)
type Mysql struct {
SqlDB *sql.DB
Dsn string
}
func NewMysql() *Mysql {
mysql := config.CreateMysql()
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", mysql.Username, mysql.Password, mysql.Server, mysql.Port, mysql.Database)

@ -6,6 +6,7 @@ import (
"github.com/gin-gonic/gin"
"log"
)
func CasbinACL(c *gin.Context) {
roleId, _ := c.Get("role_id")
sub := fmt.Sprintf("%s_%d", "role", int(roleId.(float64)))

@ -5,6 +5,7 @@ import (
"github.com/taoshihan1991/imaptool/tools"
"time"
)
func JwtPageMiddleware(c *gin.Context) {
//暂时不处理
//token := c.Query("token")
@ -27,7 +28,7 @@ func JwtApiMiddleware(c *gin.Context){
}
createTime := int64(userinfo["create_time"].(float64))
var expire int64 = 24 * 60 * 60
nowTime:=time.Now().Unix();
nowTime := time.Now().Unix()
if (nowTime - createTime) >= expire {
c.JSON(200, gin.H{
"code": 401,

@ -11,4 +11,3 @@ func SetLanguage(c *gin.Context){
}
c.Set("lang", lang)
}

@ -47,4 +47,3 @@ func RbacAuth(c *gin.Context){
}
}
}

@ -1,12 +1,14 @@
package models
var CustomConfigs []Config
type Config struct {
ID uint `gorm:"primary_key" json:"id"`
ConfName string `json:"conf_name"`
ConfKey string `json:"conf_key"`
ConfValue string `json:"conf_value"`
}
func UpdateConfig(key string, value string) {
c := &Config{
ConfValue: value,

@ -8,6 +8,7 @@ type Ipblack struct{
KefuId string `json:"kefu_id"`
CreateAt time.Time `json:"create_at"`
}
func CreateIpblack(ip string, kefuId string) uint {
black := &Ipblack{
IP: ip,
@ -38,6 +39,7 @@ func FindIps(query interface{},args []interface{},page uint,pagesize uint)[]Ipbl
}
return ipblacks
}
//查询条数
func CountIps(query interface{}, args []interface{}) uint {
var count uint

@ -1,4 +1,5 @@
package models
type Message struct {
Model
KefuId string `json:"kefu_id"`
@ -7,6 +8,7 @@ type Message struct {
MesType string `json:"mes_type"`
Status string `json:"status"`
}
func CreateMessage(kefu_id string, visitor_id string, content string, mes_type string) {
v := &Message{
KefuId: kefu_id,
@ -22,6 +24,7 @@ func FindMessageByVisitorId(visitor_id string)[]Message{
DB.Where("visitor_id=?", visitor_id).Order("id asc").Find(&messages)
return messages
}
//修改消息状态
func ReadMessageByVisitorId(visitor_id string) {
message := &Message{
@ -29,12 +32,14 @@ func ReadMessageByVisitorId(visitor_id string){
}
DB.Model(&message).Where("visitor_id=?", visitor_id).Update(message)
}
//获取未读数
func FindUnreadMessageNumByVisitorId(visitor_id string) uint {
var count uint
DB.Where("visitor_id=? and status=?", visitor_id, "unread").Count(&count)
return count
}
//查询条数
func CountMessage() uint {
var count uint

@ -6,13 +6,16 @@ import (
"github.com/taoshihan1991/imaptool/config"
"time"
)
var DB *gorm.DB
type Model struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt *time.Time `sql:"index" json:"deleted_at"`
}
func init() {
mysql := config.CreateMysql()
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", mysql.Username, mysql.Password, mysql.Server, mysql.Port, mysql.Database)

@ -1,10 +1,12 @@
package models
type Role struct {
Id string `json:"role_id"`
Name string `json:"role_name"`
Method string `json:"method"`
Path string `json:"path"`
}
func FindRoles() []Role {
var roles []Role
DB.Order("id desc").Find(&roles)

@ -9,6 +9,7 @@ type User_role struct{
UserId string `json:"user_id"`
RoleId uint `json:"role_id"`
}
func FindRoleByUserId(userId interface{}) User_role {
var uRole User_role
DB.Where("user_id = ?", userId).First(&uRole)

@ -3,6 +3,7 @@ package models
import (
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type User struct {
Model
Name string `json:"name"`
@ -12,6 +13,7 @@ type User struct {
RoleName string `json:"role_name" sql:"-"`
RoleId string `json:"role_id" sql:"-"`
}
func CreateUser(name string, password string, avator string, nickname string) uint {
user := &User{
Name: name,

@ -12,6 +12,7 @@ type Visitor struct {
City string `json:"city"`
ClientIp string `json:"client_ip"`
}
func CreateVisitor(name string, avator string, sourceIp string, toId string, visitorId string, refer string, city string, clientIp string) {
old := FindVisitorByVistorId(visitorId)
if old.Name != "" {
@ -61,8 +62,7 @@ func FindVisitorsOnline()[]Visitor{
return visitors
}
func UpdateVisitorStatus(visitorId string, status uint) {
visitor:=Visitor{
}
visitor := Visitor{}
DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update("status", status)
}
func UpdateVisitor(visitorId string, status uint, clientIp string, sourceIp string, refer string) {
@ -71,16 +71,17 @@ func UpdateVisitor(visitorId string,status uint,clientIp string,sourceIp string,
ClientIp: clientIp,
SourceIp: sourceIp,
Refer: refer,
}
DB.Model(visitor).Where("visitor_id = ?", visitorId).Update(visitor)
}
//查询条数
func CountVisitors() uint {
var count uint
DB.Model(&Visitor{}).Count(&count)
return count
}
//查询条数
func CountVisitorsByKefuId(kefuId string) uint {
var count uint

@ -9,6 +9,7 @@ type Welcome struct {
IsDefault uint `json:"is_default"`
Ctime time.Time `json:"ctime"`
}
func CreateWelcome(userId string, content string) uint {
if userId == "" || content == "" {
return 0

@ -41,6 +41,7 @@ func (obj *CommonHtml) Display(file string, data interface{}) {
t, _ := template.New(file).Parse(main)
t.Execute(obj.Rw, data)
}
//首页
func PageIndex(c *gin.Context) {
lang := c.Query("lang")

@ -9,6 +9,3 @@ import (
func PageLogin(c *gin.Context) {
c.HTML(http.StatusOK, "login.html", nil)
}

@ -4,6 +4,7 @@ import (
"github.com/gin-gonic/gin"
"net/http"
)
//设置界面
func PageSetting(c *gin.Context) {
c.HTML(http.StatusOK, "setting.html", gin.H{
@ -11,6 +12,7 @@ func PageSetting(c *gin.Context) {
"action": "setting",
})
}
//设置欢迎
func PageSettingWelcome(c *gin.Context) {
c.HTML(http.StatusOK, "setting_welcome.html", gin.H{
@ -18,6 +20,7 @@ func PageSettingWelcome(c *gin.Context) {
"action": "setting_welcome",
})
}
//设置mysql
func PageSettingMysql(c *gin.Context) {
c.HTML(http.StatusOK, "setting_mysql.html", gin.H{
@ -25,6 +28,7 @@ func PageSettingMysql(c *gin.Context) {
"action": "setting_mysql",
})
}
//设置部署
func PageSettingDeploy(c *gin.Context) {
c.HTML(http.StatusOK, "setting_deploy.html", gin.H{
@ -32,10 +36,12 @@ func PageSettingDeploy(c *gin.Context) {
"action": "setting_deploy",
})
}
//前台js部署
func PageWebJs(c *gin.Context) {
c.HTML(http.StatusOK, "chat_web.js", nil)
}
//前台css部署
func PageWebCss(c *gin.Context) {
c.HTML(http.StatusOK, "chat_web.css", nil)
@ -46,6 +52,7 @@ func PageKefuList(c *gin.Context) {
"action": "setting_kefu_list",
})
}
//角色列表
func PageRoleList(c *gin.Context) {
c.HTML(http.StatusOK, "setting_role_list.html", gin.H{
@ -53,6 +60,7 @@ func PageRoleList(c *gin.Context) {
"action": "roles_list",
})
}
//角色列表
func PageIpblack(c *gin.Context) {
c.HTML(http.StatusOK, "setting_ipblack.html", gin.H{
@ -60,6 +68,7 @@ func PageIpblack(c *gin.Context) {
"action": "setting_ipblack",
})
}
//配置项列表
func PageConfig(c *gin.Context) {
c.HTML(http.StatusOK, "setting_config.html", gin.H{
@ -67,5 +76,3 @@ func PageConfig(c *gin.Context) {
"action": "setting_config",
})
}

@ -4,7 +4,7 @@ import (
"github.com/ipipdotnet/ipdb-go"
)
func ParseIp(myip string)(*ipdb.CityInfo) {
func ParseIp(myip string) *ipdb.CityInfo {
db, err := ipdb.NewCity("./config/city.free.ipdb")
if err != nil {
return nil

@ -17,6 +17,7 @@ func partition(arr *[]int,left int,right int)int{
(*arr)[right] = temp
return i + 1
}
//递归
func QuickSort(arr *[]int, left int, right int) {
if left >= right {
@ -26,6 +27,7 @@ func QuickSort(arr *[]int,left int,right int){
QuickSort(arr, left, privot-1)
QuickSort(arr, privot+1, right)
}
//快速排序2
//找到一个基准,左边是所有比它小的,右边是比它大的,分别递归左右
func QuickSort2(arr *[]int, left int, right int) {
@ -52,6 +54,7 @@ func QuickSort2(arr *[]int,left int,right int){
QuickSort(arr, left, i-1)
QuickSort(arr, i+1, right)
}
//冒泡排序
//比较相邻元素,较大的往右移
func BubbleSort(arr *[]int) {
@ -74,6 +77,7 @@ func BubbleSort(arr *[]int){
}
}
}
//插入排序
//将未排序部分插入到已排序部分的适当位置
func InsertionSort(arr *[]int) {
@ -90,6 +94,7 @@ func InsertionSort(arr *[]int){
(*arr)[j+1] = curKey
}
}
//选择排序
//选择一个最小值,再寻找比它还小的进行交换
func SelectionSort(arr *[]int) {
@ -105,6 +110,7 @@ func SelectionSort(arr *[]int){
(*arr)[minIndex] = temp
}
}
//归并排序
//合久必分,分久必合,利用临时数组合并两个有序数组
func MergeSort(arr *[]int, left int, right int) {

@ -1,7 +1,9 @@
package tools
import (
"github.com/satori/go.uuid"
)
func Uuid() string {
u2 := uuid.NewV4()
return u2.String()

Loading…
Cancel
Save