Commit 2b531f21 by 朱继来

发送后台用户登录日志邮件

parent a34d2c46
package main
import (
"encoding/json"
"flag"
"fmt"
"github.com/ichunt2019/logger"
"go-queue-server/dal/db"
"go-queue-server/util"
"go-queue-server/util/ding"
"time"
)
type UserLoginMail struct {
UserId int `db:"userId"`
LoginTime string `db:"loginTime"`
Name string `db:"name"`
Email string `db:"email"`
Department_name string `db:"department_name"`
Position_name string `db:"position_name"`
}
func initDb(action string, dns string) (err error) {
err = db.CreateDB(action, dns)
if err != nil {
return
}
return
}
var ConfigDir string
var LogDir string
// 解析命令行参数
func initArgs() {
flag.StringVar(&ConfigDir, "configDir", "", "配置文件")
flag.StringVar(&LogDir, "logDir", "", "日志目录")
flag.Parse()
}
func main() {
initArgs()
//初始化配置文件
util.Init(ConfigDir)
logConfig := make(map[string]string)
logConfig["log_path"] = LogDir + "cms/user_login_mail"
logConfig["log_chan_size"] = "1000"
logger.InitLogger("file", logConfig)
logger.Init()
//初始化db
initDb("InitCmsDB", util.Configs.Liexincms_databases.Dns)
// 获取上一天时间
prev_begin_time := time.Now().AddDate(0, 0, 0).Format("2006-01-02")
prev_end_time := time.Now().AddDate(0, 0, 0).Format("2006-01-02") + " 23:59:59"
row, err := db.CmsDB.Queryx("SELECT ul.userId, ul.loginTime, ui.name, ui.email, ui.department_name, ui.position_name FROM user_login AS ul INNER JOIN user_info as ui "+
"ON ul.userId = ui.userId WHERE ul.loginTime BETWEEN ? AND ? GROUP BY ul.userId", prev_begin_time, prev_end_time)
defer row.Close()
if err != nil {
logger.Info("获取后台登录用户日志失败: ", err.Error())
return
}
var post_data = make(map[string]interface{})
post_data["toUser"] = "xb@ichunt.com"
var user_login_data []interface{}
for row.Next() {
var user_login_mail UserLoginMail
row.StructScan(&user_login_mail)
user_login_data = append(user_login_data, user_login_mail)
}
post_data["data"] = user_login_data
post_data_json, _ := json.Marshal(post_data)
res := send_mail(string(post_data_json))
if res {
fmt.Println("邮件发送成功")
} else {
fmt.Println("邮件发送失败")
}
}
// 发送邮件
func send_mail(data string) bool {
crm_url := util.Configs.Cms_user_domain.SendUserLoginMailUrl // 邮件接口
header_map := map[string]string{}
res := util.HttpPost(crm_url, data, header_map)
// 钉钉通知 默认参数
var mobile []string = make([]string, 0)
var isAtAll bool = false
if res == nil {
ding.Send(util.Configs.Ding_msg.Webhook,"监控告警", "后台用户登录邮件接口请求失败,原因:" + string(res), mobile, isAtAll)
return false
}
ding.Send(util.Configs.Ding_msg.Webhook, "监控告警", "推送后台用户登录邮件:" + data, mobile, isAtAll)
return true
}
package user_login_mail
import (
"flag"
"fmt"
"github.com/ichunt2019/logger"
"go-queue-server/dal/db"
"go-queue-server/util"
)
func initDb(dns string) (err error) {
err = db.Init(dns)
if err != nil {
return
}
return
}
var ConfigDir string
var LogDir string
// 解析命令行参数
func initArgs() {
flag.StringVar(&ConfigDir, "configDir", "", "配置文件")
flag.StringVar(&LogDir, "logDir", "", "日志目录")
flag.Parse()
}
func main() {
initArgs()
//初始化配置文件
util.Init(ConfigDir)
logConfig := make(map[string]string)
logConfig["log_path"] = LogDir+"cms/user_login_mail"
logConfig["log_chan_size"] = "1000"
logger.InitLogger("file",logConfig)
logger.Init()
//初始化db
initDb(util.Configs.Liexin_databases.Dns)
fmt.Println(111)
}
\ No newline at end of file
......@@ -19,4 +19,7 @@ goods_url="http://192.168.2.232:60004/synchronization"
message_url="http://api.liexin.com/msg/sendMessageByAuto"
[Fengkong_domain]
go_url="http://192.168.2.179:8000"
\ No newline at end of file
go_url="http://192.168.2.179:8000"
[Cms_user_domain]
send_user_login_mail="http://user.liexin.net/api/send_user_login_log"
\ No newline at end of file
......@@ -16,4 +16,7 @@ orderProTrack_hook="https://oapi.dingtalk.com/robot/send?access_token=bd9c05935d
api_url="http://api.ichunt.com/"
[Fengkong_domain]
go_url="http://172.18.137.41:8000"
\ No newline at end of file
go_url="http://172.18.137.41:8000"
[Cms_user_domain]
send_user_login_mail="http://user.ichunt.net/api/send_user_login_log"
\ No newline at end of file
package UserInfo
type UserInfo struct {
UserId int `db:"userId"`
Name string `db:"name"`
EngName string `db:"engName"`
Email string `db:"email"`
WorkNumber string `db:"workNumber"`
Mobile string `db:"mobile"`
Gender int `db:"gender"`
IdCard string `db:"idCard"`
Tel string `db:"tel"`
WorkAddr string `db:"workAddr"`
Fax string `db:"fax"`
Degree string `db:"degree"`
Schoole string `db:"schoole"`
QQ string `db:"qq"`
Wechat string `db:"wechat"`
Dingtalk string `db:"dingtalk"`
Header string `db:"header"`
Country string `db:"country"`
Province string `db:"province"`
City string `db:"city"`
Address string `db:"address"`
Abo string `db:"abo"`
JobLevel string `db:"jobLevel"`
Department_id int `db:"department_id"`
Department_name string `db:"department_name"`
Position_id int `db:"position_id"`
Position_name string `db:"position_name"`
Birthday string `db:"birthday"`
Superior string `db:"superior"`
UnemployDate string `db:"unemployDate"`
EntryDate string `db:"entryDate"`
PersonSite string `db:"personSite"`
Resume string `db:"resume"`
Introduction string `db:"introduction"`
EmergencyPeople string `db:"emergencyPeople"`
EmergencyPhone string `db:"emergencyPhone"`
Status int `db:"status"`
Ctime string `db:"ctime"`
Mtime string `db:"mtime"`
}
package UserLogin
type UserLogin struct {
UserId int `db:"userId"`
Skey string `db:"skey"`
LoginType int `db:"loginType"`
LoginTime string `db:"loginTime"`
ExpireTime string `db:"expireTime"`
AccessToken string `db:"accessToken"`
LoginIp string `db:"loginIp"`
Platform int `db:"platform"`
Device string `db:"device"`
Guid string `db:"guid"`
OpenId string `db:"openId"`
AccType int `db:"accType"`
}
......@@ -4,7 +4,6 @@ go 1.12
require (
github.com/BurntSushi/toml v0.3.1
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/garyburd/redigo v1.6.0
github.com/go-sql-driver/mysql v1.5.0
github.com/gohouse/gorose/v2 v2.1.10
......@@ -14,8 +13,8 @@ require (
github.com/ichunt2019/logger v1.0.5
github.com/imroc/req v0.3.0
github.com/jmoiron/sqlx v1.2.0
github.com/prometheus/common v0.7.0
github.com/kr/pretty v0.1.0 // indirect
github.com/prometheus/common v0.7.0
github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71
github.com/stretchr/testify v1.4.0 // indirect
github.com/syyongx/php2go v0.9.4
......
......@@ -16,6 +16,7 @@ type Config struct{
Rabbitmq_yaohaoyou *RabbitmqYaoHaoYou
Rabbitmq_bomcreateorder *RabbitmqBomCreateOrder
Crm_domain *SendMail
Cms_user_domain *SendUserLoginMail
Ding_msg *Ding
Api_domain *ApiDomain
Redis_config *RedisConn
......@@ -75,6 +76,10 @@ type SendMail struct{
SendMailUrl string `toml:"send_mail"`
}
type SendUserLoginMail struct{
SendUserLoginMailUrl string `toml:"send_user_login_mail"`
}
type Ding struct {
Webhook string `toml:"webhook"`
JingDiao string `toml:"jingDiao"`
......
package util
import "time"
import (
"github.com/ichunt2019/logger"
"io/ioutil"
"net/http"
"strings"
"time"
)
func ParseTimestrToTimestamp(time_str string, flag int) int64 {
......@@ -25,3 +31,28 @@ func ParseTimestrToTimestamp(time_str string, flag int) int64 {
}
return t
}
// post请求
func HttpPost(url string, data string, header map[string]string) []byte {
client := &http.Client{}
req, _ := http.NewRequest("POST", url, strings.NewReader(string(data)))
if len(header) > 0 {
for k, v := range header {
req.Header.Set(k, v)
}
}
resp, err := client.Do(req)
defer resp.Body.Close()
if err != nil {
logger.Info("请求失败,URL:" + url + ",请求参数:" + data + ",错误信息:" + err.Error())
return nil
}
body, _ := ioutil.ReadAll(resp.Body)
return body
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment