Răsfoiți Sursa

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_task

hongze 10 luni în urmă
părinte
comite
7850169fd6

+ 45 - 0
models/comein_white_user.go

@@ -0,0 +1,45 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_task/utils"
+)
+
+type ComeinWhiteUser struct {
+	UserId          int `orm:"column(user_id);pk"`
+	Email       string
+	Mobile      string // 手机号码
+	CountryCode string // 区号
+	IsFake      int // 0为真 1为假
+}
+
+// 添加分类
+func AddComeinWhiteUserMulti(items []*ComeinWhiteUser) (err error) {
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(2000, items)
+	return
+}
+
+func GetComeinWhiteUserMulti() (items []*ComeinWhiteUser, err error) {
+	sql:=`SELECT * from comein_white_user `
+	o:=orm.NewOrm()
+	_, err=o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func DelComeinWhiteUserMulti(delIds []int) (err error) {
+	sql:=`DELETE from comein_white_user WHERE user_id IN (` + utils.GetOrmInReplace(len(delIds)) + `) `
+	o:=orm.NewOrm()
+	_, err=o.Raw(sql, delIds).Exec()
+	return
+}
+
+func GetComeinWhiteUser(mobiles,emails string) (items []*ComeinWhiteUser, err error) {
+	sql:=`SELECT * from comein_white_user WHERE 1=1 AND mobile IN (` + mobiles + `)  `
+	if emails != "" {
+		sql+= ` OR email IN (` + emails + `) `
+	}
+		o:=orm.NewOrm()
+	_, err=o.Raw(sql).QueryRows(&items)
+	return
+}

+ 5 - 5
models/company_product.go

@@ -36,9 +36,9 @@ func CompanyFreeze(companyId, productId int) (companyReportPermissionList []*Com
 	freezeStartDate := time.Now().Format(utils.FormatDate)
 	freezeEndDate := time.Now().AddDate(0, 3, 0).Format(utils.FormatDate)
 
-	//FICC客户冻结期由三个月改为两个月
+	//FICC客户冻结期为六个月
 	if productId == 1 {
-		freezeEndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+		freezeEndDate = time.Now().AddDate(0, 6, 0).Format(utils.FormatDate)
 	}
 
 	// 权益客户 冻结期 改为两个月
@@ -250,7 +250,7 @@ func GetRemindCompany(sellerId int, endDate string) (items []*CompanyProduct, er
 	company a
 	INNER JOIN company_product AS b ON a.company_id = b.company_id 
 WHERE
-	(b.seller_id = ? OR a.share_seller_id =?)
+	(b.seller_id = ? OR b.share_seller_id =?)
 	AND (
 		( b.contract_end_date = ? AND b.status = "正式" )  OR (b.end_date = ? AND b.status = "试用")
   ) ORDER BY b.status DESC `
@@ -335,7 +335,7 @@ func GetCompanyProductItemListByCompanyIdList(companyIdList []int, productId int
 		return
 	}
 	o := orm.NewOrm()
-	sql := `SELECT a.*,b.is_share,b.share_seller,b.share_seller_id FROM company_product as a 
+	sql := `SELECT a.* FROM company_product as a 
          JOIN company b on a.company_id=b.company_id
          WHERE a.company_id in (` + utils.GetOrmInReplace(num) + `) AND a.product_id = ? `
 	_, err = o.Raw(sql, companyIdList, productId).QueryRows(&items)
@@ -353,7 +353,7 @@ func GetCompanyProductItemListByCompanyIdList(companyIdList []int, productId int
 // @return err error
 func GetCompanyProductItemByCompanyId(companyId int, productId int) (items *CompanyProductItem, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT a.*,b.is_share,b.share_seller,b.share_seller_id FROM company_product as a 
+	sql := `SELECT a.* FROM company_product as a 
          JOIN company b on a.company_id=b.company_id
          WHERE a.company_id = ? AND a.product_id = ? `
 	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)

+ 1 - 0
models/db.go

@@ -91,6 +91,7 @@ func init() {
 		new(roadshow.RsReportRecord), //路演记录
 		new(CompanyReportRecord),
 		new(ChartPermission), // 权限表
+		new(ComeinWhiteUser), // 进门财经白名单
 	)
 
 	// 注册客户信息 数据表

+ 39 - 0
models/users.go

@@ -112,6 +112,29 @@ func GetUserOpenidListByUserId(userId int) (list []*OpenIdList, err error) {
 	return
 }
 
+type UserMobileList struct {
+	UserId int
+	Mobile string
+	CountryCode string
+	Email string
+}
+
+// GetUserMobileFormal
+func GetUserMobileFormal() (list []*UserMobileList, err error) {
+	sql := `SELECT
+	a.user_id,a.mobile,a.country_code,a.email 
+FROM
+	wx_user AS a
+	INNER JOIN company_product AS p ON a.company_id = p.company_id 
+WHERE
+	p.status IN (
+		'试用',
+	'永续',
+	'正式') AND p.product_id = 1 `
+	_, err = orm.NewOrm().Raw(sql).QueryRows(&list)
+	return
+}
+
 // GetUserOpenidListByUserIds 根据用户id字符串集合来获取他的openid列表集合
 func GetUserOpenidListByUserIds(userIdStr []string) (list []*OpenIdList, err error) {
 	if len(userIdStr) <= 0 {
@@ -121,3 +144,19 @@ func GetUserOpenidListByUserIds(userIdStr []string) (list []*OpenIdList, err err
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&list)
 	return
 }
+
+// GetUserMobileNotFormal
+func GetUserMobileNotFormal() (list []*UserMobileList, err error) {
+	sql := `SELECT
+	a.user_id,a.mobile,a.country_code,a.email 
+FROM
+	wx_user AS a
+	INNER JOIN company_product AS p ON a.company_id = p.company_id 
+WHERE
+	p.status NOT IN (
+		'试用',
+	'永续',
+	'正式') AND p.product_id = 1 `
+	_, err = orm.NewOrm().Raw(sql).QueryRows(&list)
+	return
+}

+ 30 - 0
models/yb/comein_event.go

@@ -100,3 +100,33 @@ func AddComeinEventAndUser(comeinEventInfo *ComeinEvent, userList []*ComeinEvent
 
 	}
 }
+
+type ComeinResponse struct {
+	Code      string `json:"code"`
+	Data      string `json:"data"`
+	ErrorCode string `json:"errorcode"`
+	ErrorDesc string `json:"errordesc"`
+	Msg       string `json:"msg"`
+	TipType   string `json:"tipType"`
+}
+
+type Whitelist struct {
+	Guid     string `json:"guid"`
+	Phone    string `json:"phone"`
+	Email    string `json:"email"`
+	Areacode string `json:"areacode"`
+}
+
+type SyncWhitelist struct {
+	Opt       int         `json:"opt"`
+	Timestamp string      `json:"timestamp"`
+	AppID     string      `json:"appId"`
+	Signature string      `json:"signature"`
+	Whitelist []Whitelist `json:"whitelist"`
+}
+
+type GetWhitelist struct {
+	Ts        string `json:"ts"`
+	AppID     string `json:"appId"`
+	Signature string `json:"signature"`
+}

+ 681 - 0
services/comein/comein.go

@@ -1,9 +1,12 @@
 package comein
 
 import (
+	"context"
 	"encoding/json"
 	"errors"
 	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/models/yb"
 	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/utils"
 	"io/ioutil"
@@ -11,6 +14,7 @@ import (
 	"net/url"
 	"sort"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -265,3 +269,680 @@ func GetSign(params map[string]string) (paramStr string) {
 	params["appId"] = utils.COMEIN_APPID
 	return
 }
+
+// InitAddWhiteList 初始化进门财经白名单
+func InitAddWhiteList() (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
+		}
+	}()
+
+	postUrl := utils.COMEIN_URL
+
+	list, err := models.GetComeinWhiteUserMulti()
+	if err != nil {
+		fmt.Println("GetUserMobileFormal Err:", err.Error())
+		return
+	}
+
+	whiteList := make([]yb.Whitelist, 0)
+	for _, v := range list {
+		whiteUser := yb.Whitelist{}
+		if v.Mobile != "" {
+			whiteUser.Phone = v.Mobile
+			whiteUser.Areacode = v.CountryCode
+			whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
+
+			whiteList = append(whiteList, whiteUser)
+		} else if v.Email != "" {
+			whiteUser.Email = v.Email
+			whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
+
+			whiteList = append(whiteList, whiteUser)
+		}
+	}
+
+	fmt.Println("共" + strconv.Itoa(len(whiteList)) + "条数据")
+	// 分批发送请求
+	var count int
+	request := yb.SyncWhitelist{
+		Opt:   1,
+		AppID: utils.COMEIN_WHITELIST_APPID,
+	}
+	for i, v := range whiteList {
+		//whiteItem := yb.Whitelist{
+		//	Guid:     v.Guid,
+		//	Phone:    v.Phone,
+		//	Email:    v.Email,
+		//	Areacode: v.Areacode,
+		//}
+		request.Whitelist = append(request.Whitelist, v)
+		if count < 10000 && (len(whiteList)-i-1) > 0 {
+			count++
+			continue
+		}
+		count = 0
+
+		timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
+		signature := GetSignature("1", timestamp)
+		request.Signature = signature
+		request.Timestamp = timestamp
+
+		jsonData, e := json.Marshal(request)
+		if e != nil {
+			err = e
+			return
+		}
+
+		headers := map[string]string{
+			"app": "json",
+			"mod": "channelopen",
+			"act": "whitelist",
+		}
+
+		// 发起POST请求
+		resp, e := utils.MakePostRequest(postUrl, jsonData, headers)
+		if e != nil {
+			err = e
+			utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
+			return
+		}
+		defer resp.Body.Close()
+
+		body, e := ioutil.ReadAll(resp.Body)
+		if e != nil {
+			err = e
+			fmt.Println("reponse error", err)
+			return
+		}
+
+		result := new(yb.ComeinResponse)
+		err = json.Unmarshal(body, &result)
+		if err != nil {
+			fmt.Println("json.Unmarshal Err:" + err.Error())
+			return
+		}
+
+		utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nrequest:", jsonData, ";\nresponse:", string(body)))
+		err = json.Unmarshal(body, &result)
+		if err != nil {
+			utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nrequest:", jsonData, ";\nresponse:", string(body)))
+			err = errors.New("Unmarshal Err:" + err.Error())
+			return
+		}
+		if result.ErrorCode != "0" {
+			utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nrequest:", request, ";\nresponse:", string(body)))
+			err = errors.New(result.ErrorDesc)
+			return
+		}
+		request.Whitelist = nil
+		time.Sleep(110 * time.Second)
+		fmt.Println("同步成功:" + strconv.Itoa(i+1) + "条数据")
+	}
+	return
+}
+
+func GetSignature(opt, timestamp string) (signature string) {
+	//获取map的下标切片,然后对下标进行排序
+	keySlice := make([]string, 0)
+
+	//基础参数
+	params := make(map[string]string, 0)
+	params["appid"] = utils.COMEIN_WHITELIST_APPID //签名用的是appid,实际请求用的appId
+	if opt != "" {
+		params["opt"] = opt
+	}
+	params["timestamp"] = timestamp
+
+	for index := range params {
+		keySlice = append(keySlice, index)
+	}
+	sort.Strings(keySlice)
+
+	var paramStr string
+	// 待签名字符串
+	for _, index := range keySlice {
+		paramStr += index + `=` + params[index] + `&`
+	}
+
+	paramStr = paramStr[:len(paramStr)-1]
+
+	// 获取签名
+	signStr := utils.HmacMd5(utils.COMEIN_WHITELIST_SECREKEY, paramStr)
+	signature = url.QueryEscape(signStr)
+
+	return
+}
+
+func InitComeinWhiteList() (err error) {
+	list := make([]*models.ComeinWhiteUser, 0)
+
+	realList, err := models.GetUserMobileFormal()
+	if err != nil {
+		fmt.Println("GetUserMobileFormal Err:", err.Error())
+		return
+	}
+	for _, v := range realList {
+		user := models.ComeinWhiteUser{
+			Email:       v.Email,
+			Mobile:      v.Mobile,
+			CountryCode: "+86",
+			IsFake:      0,
+		}
+		list = append(list, &user)
+	}
+
+	for i := 0; i < 100000-len(realList); i++ {
+		phone := utils.RandomPhone()
+		user := models.ComeinWhiteUser{
+			Mobile:      phone,
+			CountryCode: "+86",
+			IsFake:      1,
+		}
+		list = append(list, &user)
+	}
+
+	err = models.AddComeinWhiteUserMulti(list)
+	if err != nil {
+		fmt.Println("添加随机手机号失败", err.Error())
+		return
+	}
+	fmt.Println("添加随机手机号成功")
+	return
+}
+
+// SyncWhiteList 同步进门财经白名单定时任务
+func SyncWhiteList(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("SyncWhiteList;ERR:"+err.Error(), 3)
+		}
+	}()
+
+	// 拿白名单表
+	list, err := models.GetComeinWhiteUserMulti()
+	if err != nil {
+		fmt.Println("GetUserMobileFormal Err:", err.Error())
+		return
+	}
+
+	syncedMap := make(map[string]bool, 0)
+	for _, v := range list {
+		syncedMap[v.Mobile+v.Email] = true
+	}
+
+	//拿联系人表,需要进白名单的
+	needAddList, err := models.GetUserMobileFormal()
+	if err != nil {
+		fmt.Println("GetUserMobileFormal Err:", err.Error())
+		return
+	}
+	addMobiles := ""
+	addemails := ""
+	addList := make([]*models.ComeinWhiteUser, 0)
+	for _, v := range needAddList {
+		if _, ok := syncedMap[v.Mobile+v.Email]; !ok {
+			user := models.ComeinWhiteUser{
+				Mobile:      v.Mobile,
+				CountryCode: "+"+v.CountryCode,
+				Email:       v.Email,
+				IsFake:      0,
+			}
+			addList = append(addList, &user)
+
+
+			if v.Mobile != "" {
+				//addMobiles = append(addMobiles,"'"+ v.Mobile+"'")
+				addMobiles += "'"+ v.Mobile+"'"+","
+			} else if v.Email != "" {
+				//addemails = append(addemails,"'"+ v.Email+"'")
+				addemails += "'"+ v.Email+"'"+","
+			}
+		}
+	}
+	addMobiles = strings.TrimSuffix(addMobiles, ",")
+	addemails = strings.TrimSuffix(addemails, ",")
+	if len(addList) > 0 {
+		err = models.AddComeinWhiteUserMulti(addList)
+		if err != nil {
+			fmt.Println("新增白名单失败,AddComeinWhiteUserMulti", err.Error())
+			return
+		}
+		err = syncWhiteList(addMobiles,addemails, 1)
+		if err != nil {
+			fmt.Println("新增白名单失败", err.Error())
+			return
+		}
+	}
+
+
+	//拿联系人表,需要删除的
+	needDelList, err := models.GetUserMobileNotFormal()
+	if err != nil {
+		fmt.Println("GetUserMobileFormal Err:", err.Error())
+		return
+	}
+	delMobiles := ""
+	delEmials := ""
+	delList := make([]*models.ComeinWhiteUser, 0)
+	for _, v := range needDelList {
+		if _, ok := syncedMap[v.Mobile+v.Email]; ok {
+			user := models.ComeinWhiteUser{
+				UserId: v.UserId,
+				Mobile:      v.Mobile,
+				CountryCode: "+"+v.CountryCode,
+				Email:       v.Email,
+				IsFake:      0,
+			}
+			delList = append(delList, &user)
+
+			if v.Mobile != "" {
+				//delMobiles = append(delMobiles, "'"+v.Mobile+"'")
+				delMobiles += "'"+v.Mobile+"'"+","
+			} else if v.Email != "" {
+				//delEmials = append(delEmials, "'"+v.Email+"'")
+				delEmials += "'"+v.Email+"'"+","
+			}
+		}
+	}
+	if len(delList) > 0 {
+		err = syncWhiteList(delMobiles, delEmials, 2)
+		if err != nil {
+			fmt.Println("删除白名单失败", err.Error())
+			return
+		}
+		delIds := make([]int, 0)
+		for _, v := range delList {
+			delIds = append(delIds, v.UserId)
+		}
+		err = models.DelComeinWhiteUserMulti(delIds)
+		if err != nil {
+			fmt.Println("删除白名单失败,DelComeinWhiteUserMulti", err.Error())
+			return
+		}
+	}
+
+	return
+}
+
+func syncWhiteList(mobiles, emails string, opt int) (err error) {
+	postUrl := utils.COMEIN_URL
+
+	timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
+
+	signature := GetSignature(strconv.Itoa(opt), timestamp)
+
+	request := yb.SyncWhitelist{
+		Opt:       opt,
+		Timestamp: timestamp,
+		AppID:     utils.COMEIN_WHITELIST_APPID,
+		Signature: signature,
+	}
+
+	whiteList := make([]yb.Whitelist, 0)
+	list, err := models.GetComeinWhiteUser(mobiles, emails)
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		whiteUser := yb.Whitelist{}
+		if v.Mobile != "" {
+			whiteUser.Phone = v.Mobile
+			whiteUser.Areacode = v.CountryCode
+			whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
+
+			whiteList = append(whiteList, whiteUser)
+		} else if v.Email != "" {
+			whiteUser.Email = v.Email
+			whiteUser.Guid = utils.MD5(strconv.Itoa(v.UserId))
+
+			whiteList = append(whiteList, whiteUser)
+		}
+	}
+
+	request.Whitelist = whiteList
+
+	jsonData, err := json.Marshal(request)
+	if err != nil {
+		return
+	}
+
+	headers := map[string]string{
+		"app": "json",
+		"mod": "channelopen",
+		"act": "whitelist",
+	}
+	// 发起POST请求
+	resp, err := utils.MakePostRequest(postUrl, jsonData, headers)
+	if err != nil {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
+		return
+	}
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println("reponse error", err)
+		return
+	}
+	utils.FileLog.Info(fmt.Sprint("comein syncWhiteList Result", ";url:", postUrl, ";\nrequest:", request, ";\nresponse:", string(body)))
+
+	result := new(yb.ComeinResponse)
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		utils.FileLog.Info("comein syncWhiteList Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if result.ErrorCode != "0" {
+		utils.FileLog.Info("comein syncWhiteList Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
+		err = errors.New(result.ErrorDesc)
+		return
+	}
+	return
+}
+
+// CheckWhiteList
+func CheckComeinWhiteList() (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
+		}
+	}()
+
+	logMsg := ``
+	timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
+	signature := GetSignature("", timestamp)
+
+	headers := map[string]string{
+		"app": "json",        //模块名
+		"mod": "channelopen", //模块名
+		"act": "list-detail", //处理方法名
+	}
+
+	paramsMap := map[string]string{
+		"appId":     utils.COMEIN_WHITELIST_APPID,
+		"signature": signature,
+		"timestamp": timestamp,
+		"phone":     "138108810525",
+	}
+
+	paramStr := ``
+	for index, val := range paramsMap {
+		paramStr += index + `=` + val + `&`
+	}
+	paramStr = paramStr[:len(paramStr)-1]
+
+	getUrl := utils.COMEIN_URL + "?" + paramStr
+
+	// 创建一个新的请求
+	req, err := http.NewRequest("GET", getUrl, nil)
+	if err != nil {
+		fmt.Println("Error creating request:", err)
+		return
+	}
+	// 添加自定义的头部信息
+	for k, v := range headers {
+		req.Header.Add(k, v)
+	}
+
+	// 发送请求并获取响应
+	client := http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println("Error sending request:", err)
+		return
+	}
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
+		utils.FileLog.Info(logMsg)
+		return
+	}
+
+	result := new(yb.ComeinResponse)
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		fmt.Println("json.Unmarshal Err:" + err.Error())
+		return
+	}
+
+	utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";\nresponse:", string(body)))
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if result.ErrorCode != "0" {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
+		err = errors.New(result.ErrorDesc)
+		return
+	}
+
+	return
+}
+
+func AddWhiteList() (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
+		}
+	}()
+
+	postUrl := utils.COMEIN_URL
+
+	whiteUser := yb.Whitelist{}
+	whiteUser.Phone = "188286375317"
+	whiteUser.Areacode = "+86"
+	whiteUser.Guid = "26968fa5f8753ffdbaaab97fbe092f4f"
+
+	request := yb.SyncWhitelist{
+		Opt:   1,
+		AppID: utils.COMEIN_WHITELIST_APPID,
+	}
+	request.Whitelist = append(request.Whitelist, whiteUser)
+
+	timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
+	signature := GetSignature("1", timestamp)
+	request.Signature = signature
+	request.Timestamp = timestamp
+
+	jsonData, e := json.Marshal(request)
+	if e != nil {
+		err = e
+		return
+	}
+
+	headers := map[string]string{
+		"app": "json",
+		"mod": "channelopen",
+		"act": "whitelist",
+	}
+
+	// 发起POST请求
+	resp, e := utils.MakePostRequest(postUrl, jsonData, headers)
+	if e != nil {
+		err = e
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
+		return
+	}
+	defer resp.Body.Close()
+
+	body, e := ioutil.ReadAll(resp.Body)
+	if e != nil {
+		err = e
+		fmt.Println("reponse error", err)
+		return
+	}
+
+	result := new(yb.ComeinResponse)
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		fmt.Println("json.Unmarshal Err:" + err.Error())
+		return
+	}
+
+	utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nresponse:", string(body)))
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if result.ErrorCode != "0" {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
+		err = errors.New(result.ErrorDesc)
+		return
+	}
+	request.Whitelist = nil
+	return
+}
+
+// CheckWhiteList
+func CheckComeinWhiteListByJobId() (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
+		}
+	}()
+
+	logMsg := ``
+
+	headers := map[string]string{
+		"app": "json",        //模块名
+		"mod": "channelopen", //模块名
+		"act": "get-result",  //处理方法名
+	}
+
+	paramsMap := map[string]string{
+		"jobId": "a180a8a4-a674-48ce-aa96-5a373c7dcc9c",
+	}
+
+	paramStr := ``
+	for index, val := range paramsMap {
+		paramStr += index + `=` + val + `&`
+	}
+	paramStr = paramStr[:len(paramStr)-1]
+
+	getUrl := utils.COMEIN_URL + "?" + paramStr
+
+	// 创建一个新的请求
+	req, err := http.NewRequest("GET", getUrl, nil)
+	if err != nil {
+		fmt.Println("Error creating request:", err)
+		return
+	}
+	// 添加自定义的头部信息
+	for k, v := range headers {
+		req.Header.Add(k, v)
+	}
+
+	// 发送请求并获取响应
+	client := http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println("Error sending request:", err)
+		return
+	}
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
+		utils.FileLog.Info(logMsg)
+		return
+	}
+
+	result := new(yb.ComeinResponse)
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		fmt.Println("json.Unmarshal Err:" + err.Error())
+		return
+	}
+
+	utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";\nresponse:", string(body)))
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if result.ErrorCode != "0" {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";response:", string(body))
+		err = errors.New(result.ErrorDesc)
+		return
+	}
+
+	return
+}
+
+func GetWhiteList() (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("InitAddWhiteList;ERR:"+err.Error(), 3)
+		}
+	}()
+
+	postUrl := utils.COMEIN_URL
+	timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
+	signature := GetSignature("", timestamp)
+
+	request := yb.GetWhitelist{
+		Ts:        timestamp,
+		AppID:     utils.COMEIN_WHITELIST_APPID,
+		Signature: signature,
+	}
+
+	jsonData, e := json.Marshal(request)
+	if e != nil {
+		err = e
+		return
+	}
+
+	headers := map[string]string{
+		"app": "json",
+		"mod": "channelopen",
+		"act": "get-whitelist-v1",
+	}
+
+	// 发起POST请求
+	resp, e := utils.MakePostRequest(postUrl, jsonData, headers)
+	if e != nil {
+		err = e
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl)
+		return
+	}
+	defer resp.Body.Close()
+
+	body, e := ioutil.ReadAll(resp.Body)
+	if e != nil {
+		err = e
+		fmt.Println("reponse error", err)
+		return
+	}
+
+	result := new(yb.ComeinResponse)
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		fmt.Println("json.Unmarshal Err:" + err.Error())
+		return
+	}
+
+	utils.FileLog.Info(fmt.Sprint("comein addWhitelist Result", ";url:", postUrl, ";\nresponse:", string(body)))
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if result.ErrorCode != "0" {
+		utils.FileLog.Info("comein addWhitelist Err:", err.Error(), ";url:", postUrl, ";response:", string(body))
+		err = errors.New(result.ErrorDesc)
+		return
+	}
+	return
+}

+ 6 - 1
services/task.go

@@ -7,6 +7,7 @@ import (
 	"github.com/beego/beego/v2/task"
 	"hongze/hongze_task/models"
 	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/services/comein"
 	"hongze/hongze_task/services/company"
 	"hongze/hongze_task/services/company_contract"
 	"hongze/hongze_task/services/data"
@@ -38,7 +39,7 @@ func InitTask() {
 			go alarm_msg.SendAlarmMsg(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05")+"\n"+stack, 3)
 		}
 	}()
-
+	comein.SyncWhiteList(nil)
 	// 实际开始定时任务
 	Task()
 }
@@ -274,6 +275,10 @@ func releaseTask() {
 	// ETA商家到期提醒
 	etaBusinessRemind := task.NewTask("etaBusinessRemind", "0 20 8 * * *", EtaBusinessExpiredRemind)
 	task.AddTask("etaBusinessRemind", etaBusinessRemind)
+
+	// 同步进门财经白名单定时任务
+	syncWhiteList := task.NewTask("syncWhiteList", "0 */10 * * * *", comein.SyncWhiteList)
+	task.AddTask("syncWhiteList", syncWhiteList)
 }
 
 //func TaskTest() {

+ 70 - 0
utils/common.go

@@ -1,6 +1,7 @@
 package utils
 
 import (
+	"bytes"
 	"crypto/hmac"
 	"crypto/md5"
 	"crypto/sha1"
@@ -13,6 +14,7 @@ import (
 	"math"
 	"math/rand"
 	"net"
+	"net/http"
 	"os"
 	"os/exec"
 	"regexp"
@@ -844,3 +846,71 @@ func GetVideoPlaySeconds(videoPath string) (playSeconds float64, err error) {
 	}
 	return
 }
+
+// 随机手机号
+const letterBytes = "0123456789"
+const (
+	letterIdxBits = 4
+	letterIdxMask = 1<<letterIdxBits - 1
+)
+var src = rand.NewSource(time.Now().UnixNano())
+
+var headerNums = [...]string{"139", "138", "137", "136", "135", "134", "159", "158", "157", "150", "151", "152", "188", "187", "182", "183", "184", "178", "130", "131", "132", "156", "155", "186", "185", "176", "133", "153", "189", "180", "181", "177"}
+var headerNumsLen = len(headerNums)
+const (
+	headerIdxBits = 6
+	headerIdxMask = 1<<headerIdxBits - 1
+)
+
+func getHeaderIdx(cache int64) int {
+	for cache > 0{
+		idx := int(cache & headerIdxMask)
+		if idx < headerNumsLen{
+			return idx
+		}
+		cache >>= headerIdxBits
+	}
+	return rand.Intn(headerNumsLen)
+}
+
+func RandomPhone() string {
+	b := make([]byte, 12)
+	cache := src.Int63()
+	headerIdx := getHeaderIdx(cache)
+	for i := 0; i < 3; i++{
+		b[i] = headerNums[headerIdx][i]
+	}
+	for i := 3; i < 12 ; {
+		if cache == 0{
+			cache = src.Int63()
+		}
+		if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
+			b[i] = letterBytes[idx]
+			i++
+		}
+		cache >>= letterIdxBits
+	}
+	return string(b)
+}
+
+// makePostRequest 发起POST请求并返回响应
+func MakePostRequest(url string, body []byte, headers map[string]string) (*http.Response, error) {
+	req, err := http.NewRequest("POST", url, bytes.NewBuffer(body))
+	if err != nil {
+		return nil, err
+	}
+
+	// 设置自定义头部
+	for key, value := range headers {
+		req.Header.Set(key, value)
+	}
+
+	// 发起请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+
+	return resp, nil
+}

+ 6 - 0
utils/config.go

@@ -98,6 +98,8 @@ var (
 	COMEIN_URL      string
 	COMEIN_APPID    string
 	COMEIN_SECREKEY string
+	COMEIN_WHITELIST_APPID string
+	COMEIN_WHITELIST_SECREKEY string
 )
 
 // 模板消息推送
@@ -264,10 +266,14 @@ func ComeinOpenApiConfig() {
 		COMEIN_URL = "https://server.comein.cn/comein/index.php"
 		COMEIN_APPID = "39b48779-debd-446a-a303-900322d8e356"
 		COMEIN_SECREKEY = "9102a767f20f11ecb5d6b8599f142ed4"
+		COMEIN_WHITELIST_APPID = "39b48779-debd-446a-a303-900322d8e356"
+		COMEIN_WHITELIST_SECREKEY = "9102a767f20f11ecb5d6b8599f142ed4"
 	} else {
 		COMEIN_URL = "https://testserver.comein.cn/comein/index.php"
 		COMEIN_APPID = "7b966708-4a8b-4d24-9066-fe29920e7eee"
 		COMEIN_SECREKEY = "76e004876fae4b3c8721a3f4c2d115da"
+		COMEIN_WHITELIST_APPID = "997fc880-766c-4f5a-8cd6-28aa08cd15ff"
+		COMEIN_WHITELIST_SECREKEY = "ba361e9b1bd04d018a5bca2241e9f1fa"
 	}
 }