|
@@ -0,0 +1,230 @@
|
|
|
+package jyutil
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "io/ioutil"
|
|
|
+ "jy/src/jfw/config"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "reflect"
|
|
|
+ "regexp"
|
|
|
+ "sort"
|
|
|
+
|
|
|
+ "app.yhyue.com/moapp/jypkg/public"
|
|
|
+
|
|
|
+ util "app.yhyue.com/moapp/jybase/common"
|
|
|
+ "app.yhyue.com/moapp/jybase/encrypt"
|
|
|
+ . "app.yhyue.com/moapp/jybase/mongodb"
|
|
|
+ "app.yhyue.com/moapp/jybase/redis"
|
|
|
+
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+var mongodb = public.MQFW
|
|
|
+var se = &encrypt.SimpleEncrypt{Key: "topnet2015topnet2015"}
|
|
|
+
|
|
|
+var AC = &encrypt.AES_CBC{
|
|
|
+ Key: "mGlAgnIBB8bx2nch",
|
|
|
+ Iv: "1389461544135476",
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+func FindMyShareId(activecode, openid string) string {
|
|
|
+ defer util.Catch()
|
|
|
+ ret, bres := mongodb.Find("person_share", "{'s_openid':'"+openid+"','s_businesscode':'"+activecode+"'}", `{"l_timestamp":-1}`, nil, true, -1, -1)
|
|
|
+ var shareid string
|
|
|
+ if bres {
|
|
|
+ var shareData = make(map[string]interface{})
|
|
|
+ var str = ""
|
|
|
+ for _, v := range *ret {
|
|
|
+ str = util.ObjToString(v["i_shareid"])
|
|
|
+ }
|
|
|
+ var tt = `^\d+$`
|
|
|
+ a, _ := regexp.Compile(tt)
|
|
|
+ if str == "" || a.MatchString(str) {
|
|
|
+ data := make(map[string]interface{})
|
|
|
+ data["s_openid"] = openid
|
|
|
+ data["s_businesscode"] = activecode
|
|
|
+ data["i_shareid"] = se.EncodeString(openid + "---" + activecode)
|
|
|
+ data["l_timestamp"] = time.Now().Unix()
|
|
|
+ mongodb.Save("person_share", data)
|
|
|
+ shareid = openid + "---" + activecode
|
|
|
+ } else {
|
|
|
+ shareid = se.DecodeString(str)
|
|
|
+ }
|
|
|
+ odata := redis.Get("sso", "p_shareData_"+shareid)
|
|
|
+ if odata == nil {
|
|
|
+ shareData["action"] = "32"
|
|
|
+ redis.Put("sso", "p_shareData_"+shareid, shareData, 24*60*60)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return shareid
|
|
|
+}
|
|
|
+
|
|
|
+//获取用户openid
|
|
|
+func Getopenid(code string) (openid string) {
|
|
|
+ defer util.Catch()
|
|
|
+ recturl := fmt.Sprintf(config.Wxoauthinfo, code)
|
|
|
+ resp, err := http.Get(recturl)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ bs, _ := ioutil.ReadAll(resp.Body)
|
|
|
+ data := map[string]interface{}{}
|
|
|
+ json.Unmarshal(bs, &data)
|
|
|
+ openid, _ = data["openid"].(string)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+func GetSessionVal(q map[string]interface{}) (*map[string]interface{}, map[string]interface{}) {
|
|
|
+ person, ok := public.MQFW.FindOneByField("user", q, `{"_id":1,"i_shareknow":1,"s_m_openid":1,"s_nickname":1,"s_headimage":1,"s_headimageurl":1,"s_phone":1,"s_m_phone":1,"l_registedate":1,"b_merge_remind":1,"i_ispush":1,"i_unlimited":1,"s_jyname":1,"base_user_id":1}`)
|
|
|
+ sessionVal := make(map[string]interface{})
|
|
|
+ if !ok || person == nil || len(*person) == 0 {
|
|
|
+ return nil, sessionVal
|
|
|
+ }
|
|
|
+ sessionVal["user"] = *person
|
|
|
+ if (*person)["i_shareknow"] != nil {
|
|
|
+ sessionVal["shareknow"] = (*person)["i_shareknow"]
|
|
|
+ }
|
|
|
+ sessionVal["userId"] = BsonIdToSId((*person)["_id"])
|
|
|
+ nickName, _ := (*person)["s_nickname"].(string)
|
|
|
+ phone := util.ObjToString((*person)["s_phone"])
|
|
|
+ if nickName == "" {
|
|
|
+ if phone != "" && len(phone) > 3 {
|
|
|
+ nickName = string(phone[0:3]) + "****" + string(phone[len(phone)-4:])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if util.ObjToString((*person)["s_jyname"]) != "" {
|
|
|
+ sessionVal["s_jyname"] = util.ObjToString((*person)["s_jyname"])
|
|
|
+ }
|
|
|
+ sessionVal["s_nickname"] = nickName
|
|
|
+ sessionVal["nickname"] = nickName
|
|
|
+ avatar, _ := (*person)["s_headimageurl"].(string)
|
|
|
+ if avatar == "" {
|
|
|
+ avatar, _ = (*person)["s_headimage"].(string)
|
|
|
+ }
|
|
|
+ sessionVal["s_avatar"] = strings.Replace(avatar, "http://", "https://", 1)
|
|
|
+ sessionVal["s_m_openid"], _ = (*person)["s_m_openid"].(string)
|
|
|
+ sessionVal["openid"] = sessionVal["s_m_openid"]
|
|
|
+ if phone == "" {
|
|
|
+ phone = util.ObjToString((*person)["s_m_phone"])
|
|
|
+ }
|
|
|
+ if phone != "" {
|
|
|
+ //企业信息存session
|
|
|
+ sql := `SELECT a.id,a.name,a.startdate,a.enddate,a.quota,c.id as dept_id,b.id as user_id from entniche_info a
|
|
|
+ INNER JOIN entniche_user b on (b.phone=? and a.id=b.ent_id)
|
|
|
+ INNER JOIN entniche_department c on (c.pid=0 and a.id=c.ent_id)
|
|
|
+ LEFT JOIN entniche_user_role d on (d.role_id=? and b.id=d.user_id)
|
|
|
+ order by a.status DESC,b.power desc,a.auth_status DESC,d.role_id desc,a.createtime desc`
|
|
|
+ list := public.Mysql.SelectBySql(sql, phone, 1)
|
|
|
+ if list != nil {
|
|
|
+ for _, v := range *list {
|
|
|
+ if util.IntAll(v["id"]) == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ sessionVal["entId"] = util.IntAll(v["id"])
|
|
|
+ sessionVal["entName"] = util.ObjToString(v["name"])
|
|
|
+ sessionVal["entUserId"] = util.IntAll(v["user_id"])
|
|
|
+ sessionVal["frameworkEntId"] = util.IntAll(v["id"])
|
|
|
+ sessionVal["frameworkEntName"] = util.ObjToString(v["name"])
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sessionVal["phone"] = phone
|
|
|
+ sessionVal["i_unlimited"] = util.IntAll((*person)["i_unlimited"])
|
|
|
+ base_uid := util.IntAllDef((*person)["base_user_id"], 0)
|
|
|
+ if base_uid != 0 {
|
|
|
+ sessionVal["base_user_id"] = base_uid //用户中台的uid
|
|
|
+ }
|
|
|
+ return person, sessionVal
|
|
|
+}
|
|
|
+
|
|
|
+//value 用户sessionid
|
|
|
+func LoginRedisKey(userid string) string {
|
|
|
+ return fmt.Sprintf("login_%s", userid)
|
|
|
+}
|
|
|
+
|
|
|
+// 排序 排序键必须为数字类型
|
|
|
+type SortBy struct {
|
|
|
+ Data []map[string]interface{}
|
|
|
+ Sortkey string
|
|
|
+}
|
|
|
+
|
|
|
+func (a SortBy) Len() int { return len(a.Data) }
|
|
|
+
|
|
|
+func (a SortBy) Swap(i, j int) {
|
|
|
+ a.Data[i], a.Data[j] = a.Data[j], a.Data[i]
|
|
|
+}
|
|
|
+
|
|
|
+func (a SortBy) Less(i, j int) bool {
|
|
|
+ //return Float64(a.Data[i][a.Sortkey]) < Float64(a.Data[j][a.Sortkey])
|
|
|
+ m := a.Data[i][a.Sortkey]
|
|
|
+ n := a.Data[j][a.Sortkey]
|
|
|
+ w := reflect.ValueOf(m)
|
|
|
+ v := reflect.ValueOf(n)
|
|
|
+ switch v.Kind() {
|
|
|
+ case reflect.String:
|
|
|
+ return w.String() < v.String()
|
|
|
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
|
+ return w.Int() < v.Int()
|
|
|
+ case reflect.Float64, reflect.Float32:
|
|
|
+ return w.Float() < v.Float()
|
|
|
+ default:
|
|
|
+ return fmt.Sprintf("%v", w) < fmt.Sprintf("%v", v)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// ture 倒序3, 2, 1
|
|
|
+//fmt.Println(m)
|
|
|
+func SortData(data interface{}, sortkey string, reverse bool) {
|
|
|
+ //func SortData(data interface{}, sortkey string, reverse bool) {
|
|
|
+ var db []map[string]interface{}
|
|
|
+ err := Bind(data, &db)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ stb := SortBy{db, sortkey}
|
|
|
+ if !reverse {
|
|
|
+ sort.Sort(stb)
|
|
|
+ } else {
|
|
|
+ sort.Sort(sort.Reverse(stb))
|
|
|
+ }
|
|
|
+ err = Bind(stb.Data, data)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+// data 转换成ret
|
|
|
+func Bind(data interface{}, ret interface{}) error {
|
|
|
+ v := reflect.ValueOf(ret)
|
|
|
+ if v.Kind() != reflect.Ptr {
|
|
|
+ return fmt.Errorf("ptr input ret needed as type as input type %s", v.Kind())
|
|
|
+ }
|
|
|
+ havdata := false
|
|
|
+ var bk interface{}
|
|
|
+ if v.Elem().Kind() == reflect.Slice {
|
|
|
+ t := reflect.Zero(reflect.TypeOf(v.Elem().Interface()))
|
|
|
+ bk = v.Elem().Interface()
|
|
|
+ v.Elem().Set(t)
|
|
|
+ havdata = true
|
|
|
+ }
|
|
|
+ _data, _ := json.MarshalIndent(data, "", " ")
|
|
|
+ err := json.Unmarshal(_data, ret)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ if havdata {
|
|
|
+ v.Elem().Set(reflect.ValueOf(bk))
|
|
|
+ }
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|