| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 | package apiimport (	"encoding/json"	"fmt"	"io/ioutil"	"net/http"	"strings"	"time"	"tmr-watch/http/handle/restful"	"tmr-watch/pkg/app"	"tmr-watch/pkg/e"	"tmr-watch/pkg/util"	"tmr-watch/service/user_service"	"github.com/Anderson-Lu/gofasion/gofasion"	"github.com/astaxie/beego/logs"	"github.com/astaxie/beego/validation"	"github.com/gin-gonic/gin")type auth struct {	Id         int    `json:"id"`	Username   string `json:"username"`	Password   string `json:"password"`	CaptchaKey string `json:"CaptchaKey"`	Role       int    `json:"role_id"`	Imei       string `json:"imei"`	PastureId  string `json:"pastureid"`	TypeIn     int    `json:"typein"`}// Auth   获取登录token 信息func Auth(c *gin.Context) {	appG := app.Gin{C: c}	var reqInfo auth	err := c.BindJSON(&reqInfo)	valid := validation.Validation{}	valid.MaxSize(reqInfo.Username, 100, "username").Message("最长为100字符")	valid.MaxSize(reqInfo.Password, 100, "password").Message("最长为100字符")	valid.MinSize(reqInfo.Password, 1, "password").Message("不能为空")	valid.MinSize(reqInfo.Password, 1, "password").Message("不能为空")	if valid.HasErrors() {		app.MarkErrors(valid.Errors)		appG.Response(http.StatusInternalServerError, e.ERROR_ADD_FAIL, valid.Errors)		return	}	authService := user_service.User{Username: reqInfo.Username, Password: reqInfo.Password}	isExist, err := authService.Check()	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_CHECK_TOKEN_FAIL, err)		return	}	if !isExist {		isExist, err = authService.MD5Check()		if !isExist {			status := GetLanguageStatus()			if status == "0" {				appG.Response(http.StatusOK, e.ERROR_AUTH, "密码错误!")			} else {				appG.Response(http.StatusOK, e.ERROR_AUTH, "Password error!")			}			return		}	}	token, err := util.GenerateToken(reqInfo.Username, reqInfo.Password)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	appG.Response(http.StatusOK, e.SUCCESS, map[string]string{		"token": token,	})}// @Summary   获取登录token 信息// @Tags auth// @Accept json// @Produce  json// @Param username formData string true  "admin"// @Param password formData string true  "123456"// @Success 200 {string} json "{ "code": 200e, "data": { "token": "xxx" }, "msg": "ok" }"// @Failure 400 {string} json "{"code":400,  "data":null,"msg":"请求参数错误"}"// @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}"// @Router /auth  [POST]func AuthLogin(c *gin.Context) {	appG := app.Gin{C: c}	var reqInfo auth	err := c.BindJSON(&reqInfo)	fmt.Println("++++++++++++++++", reqInfo)	valid := validation.Validation{}	valid.MaxSize(reqInfo.Username, 100, "username").Message("最长为100字符")	if valid.HasErrors() {		app.MarkErrors(valid.Errors)		appG.Response(http.StatusInternalServerError, e.ERROR_ADD_FAIL, valid.Errors)		return	}	err = restful.CheckUserFace(reqInfo.Username, reqInfo.Imei, reqInfo.TypeIn)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_CHECK_TOKEN_FAIL, err.Error())		return	}	token, err := util.GenerateToken(reqInfo.Username, reqInfo.Password)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err.Error())		return	}	appG.Response(http.StatusOK, e.SUCCESS, map[string]string{		"token": token,	})}// @Summary   获取单个用户信息// @Tags  users// @Accept json// @Produce  json// @Param  id  body  int true "id"// @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }"// @Router /authdata/userinfo  [GET]func UserLogout(c *gin.Context) {	appG := app.Gin{C: c}	data := make(map[string]interface{})	data["name"] = ""	data["avatar"] = ""	data["introduction"] = ""	appG.Response(http.StatusOK, e.SUCCESS, data)}// GetUserinfo   获取单个用户信息// @Tags  users// @Accept json// @Produce  json// @Param  id  path  int true "iddd"// @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }"// @Router /authdata/userinfo  [GET]func GetUserinfo(c *gin.Context) {	appG := app.Gin{C: c}	data := restful.GetUserInfo(appG.Get("jwt_username"))	appG.Response(http.StatusOK, e.SUCCESS, data)}func GetOpenID(c *gin.Context) {	code := c.Param("code")	appG := app.Gin{C: c}	openid, err := util.SendWxAuthAPI(code)	if err != nil {		appG.Response(http.StatusOK, e.SUCCESS, map[string]string{			"err": "openid 获取失败 :" + err.Error(),		})		return	}	appG.Response(http.StatusOK, e.SUCCESS, map[string]string{		"openid": openid,	})}func UserWXOpenIDBinding(c *gin.Context) {	appG := app.Gin{C: c}	dataByte, _ := ioutil.ReadAll(c.Request.Body)	fsion := gofasion.NewFasion(string(dataByte))	openid := fsion.Get("openid").ValueStr()	// pastureid := fsion.Get("pastureid").ValueStr()	userinfo := fsion.Get("userinfo").ValueStr()	tx := restful.Engine.NewSession()	defer tx.Close()	userlist := strings.Split(userinfo, ".")	fmt.Println(len(userlist), userlist)	if len(userlist) < 3 {		logs.Error("UserWXOpenIDBinding-error1:", nil)		appG.Response(http.StatusInternalServerError, e.ERROR, false)		return	}	_, err := tx.SQL(` replace into user_wx(userid,pastureid,openid,name) VALUES (?,?,?,?)`, userlist[2], userlist[1], openid, userlist[3]).Execute()	if err != nil {		logs.Error("UserWXOpenIDBinding-error2:", err)		appG.Response(http.StatusInternalServerError, e.ERROR, false)		return	}	appG.Response(http.StatusOK, e.SUCCESS, true)}func AuthImei(c *gin.Context) {	appG := app.Gin{C: c}	var reqInfo auth	err := c.BindJSON(&reqInfo)	//c.Request.ParseForm()	//reqInfo.Username = c.PostForm("username")	//reqInfo.Password = c.PostForm("pwd")	valid := validation.Validation{}	valid.MaxSize(reqInfo.Username, 100, "username").Message("最长为100字符")	valid.MaxSize(reqInfo.Imei, 100, "imei").Message("最长为100字符")	if valid.HasErrors() {		app.MarkErrors(valid.Errors)		appG.Response(http.StatusInternalServerError, e.ERROR_ADD_FAIL, valid.Errors)		return	}	tx := restful.Engine.NewSession()	defer tx.Close()	isExist, err := tx.SQL(" select id from driver where  drivername = ? ", reqInfo.Imei).Exist()	if err != nil {		logs.Error("AuthImei-error1:", err)		appG.Response(http.StatusInternalServerError, e.ERROR, false)		return	}	isTmrExist, err := tx.SQL(" select id from tmr where  imei = ? ", reqInfo.Imei).Exist()	if err != nil {		logs.Error("AuthImei-error1:", err)		appG.Response(http.StatusInternalServerError, e.ERROR, false)		return	}	if !isExist && !isTmrExist {		//appG.Response(http.StatusUnauthorized, e.ERROR_AUTH, nil)		appG.Response(http.StatusOK, e.ERROR_AUTH, "未注册!!!")		return	}	token, err := util.GenerateToken(reqInfo.Username, reqInfo.Imei)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	appG.Response(http.StatusOK, e.SUCCESS, map[string]string{		"token": token,	})}func GetWxCode(c *gin.Context) {	appG := app.Gin{C: c}	code := c.Query("code")	url := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=%s"	var appid, secret, jsCode, grantType string	jsCode = code	tx := restful.Engine.NewSession()	defer tx.Close()	wxConfigList, err := tx.SQL(" select * from wx_config where system = ? ", "tmrwatch").Query().List()	if err != nil {		logs.Error("GetWxCode-error1:", err)		appG.Response(http.StatusInternalServerError, e.ERROR, false)		return	}	for _, wx := range wxConfigList {		grantType = wx["grantType"].(string)		appid = wx["appid"].(string)		secret = wx["secret"].(string)	}	url = fmt.Sprintf(url, appid, secret, jsCode, grantType)	client := &http.Client{Timeout: 5 * time.Second}	payload := strings.NewReader(``)	req, err := http.NewRequest(http.MethodGet, url, payload)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	res, err := client.Do(req)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	defer res.Body.Close()	body, err := ioutil.ReadAll(res.Body)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	var data interface{}	json.Unmarshal(body, &data)	dataMap := data.(map[string]interface{})	if _, ok := dataMap["code"]; !ok {		dataMap["code"] = ""	}	appG.Response(http.StatusOK, e.SUCCESS, dataMap)}func GetYqWxCode(c *gin.Context) {	appG := app.Gin{C: c}	code := c.Query("code")	url := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=%s"	var appid, secret, jsCode, grantType string	jsCode = code	tx := restful.Engine.NewSession()	defer tx.Close()	wxConfigList, err := tx.SQL(" select * from wx_config where system = ? ", "yq").Query().List()	if err != nil {		logs.Error("GetWxCode-error1:", err)		appG.Response(http.StatusInternalServerError, e.ERROR, false)		return	}	for _, wx := range wxConfigList {		grantType = wx["grantType"].(string)		appid = wx["appid"].(string)		secret = wx["secret"].(string)	}	url = fmt.Sprintf(url, appid, secret, jsCode, grantType)	client := &http.Client{Timeout: 5 * time.Second}	payload := strings.NewReader(``)	req, err := http.NewRequest(http.MethodGet, url, payload)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	res, err := client.Do(req)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	defer res.Body.Close()	body, err := ioutil.ReadAll(res.Body)	if err != nil {		appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, err)		return	}	var data interface{}	json.Unmarshal(body, &data)	dataMap := data.(map[string]interface{})	if _, ok := dataMap["code"]; !ok {		dataMap["code"] = ""	}	appG.Response(http.StatusOK, e.SUCCESS, dataMap)}
 |