123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 |
- package cygx
- import (
- "encoding/json"
- "errors"
- "fmt"
- "hongze/hz_crm_api/models"
- "hongze/hz_crm_api/models/cygx"
- "hongze/hz_crm_api/services"
- "hongze/hz_crm_api/services/alarm_msg"
- "hongze/hz_crm_api/utils"
- "io"
- "io/ioutil"
- "net/http"
- "os"
- "strconv"
- "strings"
- "time"
- )
- // 获取所有关注了该产业大套餐客户的openid
- func GetCygxBigTypeUserIndustryFllowOpneidByActivityIds(activityId int) (items []*cygx.OpenIdList, err error) {
- companyIds, e := cygx.GetCygxIndustryFollowCompanyIdsByActivityId(activityId)
- if e != nil {
- err = e
- return
- }
- permissionList, e := cygx.GetCompanyPermissionByUsersZhengShi(*companyIds)
- if e != nil {
- err = e
- return
- }
- permissionListMap := make(map[int]string, 0)
- for _, item := range permissionList {
- if permission, ok := permissionListMap[item.CompanyId]; !ok {
- permissionListMap[item.CompanyId] = item.Permission
- } else {
- permissionListMap[item.CompanyId] = permission + "," + item.Permission
- }
- }
- var companyIdslice []string
- for k, v := range permissionListMap {
- permissionZhengShiStr := v
- if strings.Count(permissionZhengShiStr, "医药") == 2 && strings.Count(permissionZhengShiStr, "消费") == 2 && strings.Count(permissionZhengShiStr, "科技") == 2 && strings.Count(permissionZhengShiStr, "智造") == 2 {
- companyIdslice = append(companyIdslice, strconv.Itoa(k))
- }
- }
- finalIds := strings.Join(companyIdslice, ",")
- if finalIds != "" {
- var conditionuiUser string
- var parsUser []interface{}
- conditionuiUser = ` AND company_id IN (` + finalIds + `)`
- listUser, e := models.GetWxUserList(conditionuiUser, parsUser)
- if e != nil {
- err = e
- return
- }
- mapMobileUser := make(map[string]string)
- for _, v := range listUser {
- mapMobileUser[v.Mobile] = v.Mobile
- }
- var mobiles []string
- listFllow, e := cygx.GetCygxForeverUserIndustryFllowOpneidByActivityIds(activityId)
- if e != nil {
- err = e
- return
- }
- for _, v := range listFllow {
- if mapMobileUser[v.Mobile] != "" {
- mobiles = append(mobiles, v.Mobile)
- }
- }
- items, e = cygx.GetUserRecordListByMobileArr(mobiles)
- //items, e = models.GetCygxUserIndustryFllowOpneidByActivityIdAndCompanyIds(activityId, finalIds)
- if e != nil {
- err = e
- return
- }
- }
- return
- }
- // 获取所有关注了该产业行业套餐客户的openid
- func GetCygxIndustryPackageUserIndustryFllowOpneidByActivityIds(activityId int) (items []*cygx.OpenIdList, err error) {
- companyIds, e := cygx.GetCygxIndustryFollowCompanyIdsByActivityId(activityId)
- if e != nil {
- err = e
- return
- }
- permissionList, e := cygx.GetCompanyPermissionByUsersZhengShi(*companyIds)
- if e != nil {
- err = e
- return
- }
- activityInfo, errInfo := cygx.GetAddActivityInfoById(activityId)
- if errInfo != nil {
- err = errInfo
- return
- }
- permissionListMap := make(map[int]string, 0)
- for _, item := range permissionList {
- if permission, ok := permissionListMap[item.CompanyId]; !ok {
- permissionListMap[item.CompanyId] = item.Permission
- } else {
- permissionListMap[item.CompanyId] = permission + "," + item.Permission
- }
- }
- var companyIdslice []string
- for k, v := range permissionListMap {
- permissionZhengShiStr := v
- if strings.Count(permissionZhengShiStr, "医药") == 2 && strings.Count(permissionZhengShiStr, "消费") == 2 && strings.Count(permissionZhengShiStr, "科技") == 2 && strings.Count(permissionZhengShiStr, "智造") == 2 {
- continue
- } else if strings.Contains(permissionZhengShiStr, activityInfo.ChartPermissionName) {
- companyIdslice = append(companyIdslice, strconv.Itoa(k))
- }
- }
- finalIds := strings.Join(companyIdslice, ",")
- if finalIds != "" {
- var conditionuiUser string
- var parsUser []interface{}
- conditionuiUser = ` AND company_id IN (` + finalIds + `)`
- listUser, e := models.GetWxUserList(conditionuiUser, parsUser)
- if e != nil {
- err = e
- return
- }
- mapMobileUser := make(map[string]string)
- for _, v := range listUser {
- mapMobileUser[v.Mobile] = v.Mobile
- }
- var mobiles []string
- listFllow, e := cygx.GetCygxForeverUserIndustryFllowOpneidByActivityIds(activityId)
- if e != nil {
- err = e
- return
- }
- for _, v := range listFllow {
- if mapMobileUser[v.Mobile] != "" {
- mobiles = append(mobiles, v.Mobile)
- }
- }
- items, e = cygx.GetUserRecordListByMobileArr(mobiles)
- //items, e = models.GetCygxUserIndustryFllowOpneidByActivityIdAndCompanyIds(activityId, finalIds)
- if e != nil {
- err = e
- return
- }
- }
- return
- }
- // 获取所有关注了该产业其他行业套餐客户的openid
- func GetCygxOtherIndustryPackageUserIndustryFllowOpneidByActivityIds(activityId int) (items []*cygx.OpenIdList, err error) {
- companyIds, e := cygx.GetCygxIndustryFollowCompanyIdsByActivityId(activityId)
- if e != nil {
- err = e
- return
- }
- permissionList, e := cygx.GetCompanyPermissionByUsersZhengShi(*companyIds)
- if e != nil {
- err = e
- return
- }
- activityInfo, errInfo := cygx.GetAddActivityInfoById(activityId)
- if errInfo != nil {
- err = errInfo
- return
- }
- permissionListMap := make(map[int]string, 0)
- for _, item := range permissionList {
- if permission, ok := permissionListMap[item.CompanyId]; !ok {
- permissionListMap[item.CompanyId] = item.Permission
- } else {
- permissionListMap[item.CompanyId] = permission + "," + item.Permission
- }
- }
- var companyIdslice []string
- for k, v := range permissionListMap {
- permissionZhengShiStr := v
- if strings.Count(permissionZhengShiStr, "医药") == 2 && strings.Count(permissionZhengShiStr, "消费") == 2 && strings.Count(permissionZhengShiStr, "科技") == 2 && strings.Count(permissionZhengShiStr, "智造") == 2 {
- continue
- } else if !strings.Contains(permissionZhengShiStr, activityInfo.ChartPermissionName) {
- companyIdslice = append(companyIdslice, strconv.Itoa(k))
- }
- }
- finalIds := strings.Join(companyIdslice, ",")
- if finalIds != "" {
- //items, e = models.GetCygxUserIndustryFllowOpneidByActivityIdAndCompanyIds(activityId, finalIds)
- var conditionuiUser string
- var parsUser []interface{}
- conditionuiUser = ` AND company_id IN (` + finalIds + `)`
- listUser, e := models.GetWxUserList(conditionuiUser, parsUser)
- if e != nil {
- err = e
- return
- }
- mapMobileUser := make(map[string]string)
- for _, v := range listUser {
- mapMobileUser[v.Mobile] = v.Mobile
- }
- var mobiles []string
- listFllow, e := cygx.GetCygxForeverUserIndustryFllowOpneidByActivityIds(activityId)
- if e != nil {
- err = e
- return
- }
- for _, v := range listFllow {
- if mapMobileUser[v.Mobile] != "" {
- mobiles = append(mobiles, v.Mobile)
- }
- }
- items, e = cygx.GetUserRecordListByMobileArr(mobiles)
- if e != nil {
- err = e
- return
- }
- }
- return
- }
- // 获取所有关注了该产业其他行业套餐客户的openid
- func GetCygxInteractiveUserOpneidByActivityIds(activityId int) (items []*cygx.OpenIdList, err error) {
- userIds, e := models.GetCygxInteractiveUserByActivityId(activityId)
- if e != nil {
- err = e
- return
- }
- var idSlice []string
- for _, id := range userIds {
- idSlice = append(idSlice, strconv.Itoa(*id))
- }
- ids := strings.Join(idSlice, ",")
- if ids != "" {
- var conditionuiUser string
- var parsUser []interface{}
- conditionuiUser = ` AND user_id IN (` + ids + `)`
- listUser, e := models.GetWxUserList(conditionuiUser, parsUser)
- if e != nil {
- err = e
- return
- }
- mapMobileUser := make(map[string]string)
- for _, v := range listUser {
- mapMobileUser[v.Mobile] = v.Mobile
- }
- var mobiles []string
- listFllow, e := cygx.GetCygxForeverUserIndustryFllowOpneidByActivityIds(activityId)
- if e != nil {
- err = e
- return
- }
- for _, v := range listFllow {
- if mapMobileUser[v.Mobile] != "" {
- mobiles = append(mobiles, v.Mobile)
- }
- }
- items, e = cygx.GetUserRecordListByMobileArr(mobiles)
- //items, e = models.GetCygxUserOpneidByUserIds(ids)
- if e != nil {
- err = e
- return
- }
- }
- return
- }
- // ReturnBodyRule 微信返回通过结果集
- type ReturnBodyRule struct {
- ErrorCode int `json:"errcode,omitempty"`
- ErrorMessage string `json:"errmsg,omitempty"`
- }
- func init232() {
- MakeActivitySigninImg(2161)
- }
- // MakeActivitySigninImg 生成活动签到图片
- func MakeActivitySigninImg12(activityId int) (err error) {
- var msg string
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg("扫码签到日志记录,失败,活动ID:"+strconv.Itoa(activityId)+err.Error()+";msg:"+msg, 3)
- }
- }()
- itemToken, err := models.GetWxToken(utils.WxCygxAppId, utils.WxCygxAppSecret)
- if err != nil {
- return
- }
- if itemToken.AccessToken == "" {
- msg = "accessToken is empty"
- return
- }
- var envVersion string
- var resourceUrl string
- if utils.RunMode == "release" {
- envVersion = "release"
- } else {
- envVersion = "develop"
- }
- url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + itemToken.AccessToken
- method := "POST"
- payload := strings.NewReader(`{
- "page":"` + utils.WX_MSG_PATH_ACTIVITY_SIGNIN + `",
- "scene":"` + strconv.Itoa(activityId) + `",
- "env_version":"` + envVersion + `",
- "check_path":false,
- "auto_color":true
- }`)
- client := &http.Client{}
- req, err := http.NewRequest(method, url, payload)
- if err != nil {
- msg = "获取微信二维码失败,Err:" + err.Error()
- return
- }
- req.Header.Add("Content-Type", "application/json")
- postBody, err := client.Do(req)
- if err != nil {
- msg = "获取微信二维码失败,Err:" + err.Error()
- return
- }
- defer postBody.Body.Close()
- uploadDir := "static/img/share/"
- uuid := utils.GetRandStringNoSpecialChar(28)
- if !utils.FileIsExist(uploadDir) {
- err = os.MkdirAll(uploadDir, 0755)
- if err != nil {
- msg = "生成文件夹失败,Err:" + err.Error()
- return
- }
- }
- imagePath := uploadDir + uuid + ".jpg"
- switch header := postBody.Header.Get("Content-Type"); {
- case strings.HasPrefix(header, "application/json"):
- tokenResp := ReturnBodyRule{}
- decoder := json.NewDecoder(postBody.Body)
- if decodeErr := decoder.Decode(&tokenResp); decodeErr != nil {
- msg = "获取微信二维码失败,Err:" + decodeErr.Error()
- return
- }
- case strings.HasPrefix(header, "image"):
- reply, e := ioutil.ReadAll(postBody.Body)
- if e != nil {
- err = e
- msg = "获取微信二维码失败,Err:" + err.Error()
- return
- }
- imageContent, e := os.Create(imagePath)
- if e != nil {
- err = e
- msg = "获取微信二维码失败,Err:" + err.Error()
- return
- }
- writeStringRes, e := io.WriteString(imageContent, string(reply))
- if e != nil {
- err = e
- fmt.Println(writeStringRes)
- return
- }
- closeErr := imageContent.Close()
- if closeErr != nil {
- err = closeErr
- return
- }
- randStr := utils.GetRandStringNoSpecialChar(28)
- fileName := randStr + ".jpg"
- savePath := uploadDir + time.Now().Format("200601/20060102/")
- savePath += fileName
- //上传到阿里云
- err = services.UploadFileToAliyun(fileName, imagePath, savePath)
- if err != nil {
- fmt.Println("文件上传失败,Err:" + err.Error())
- return
- }
- fileHost := "https://hzstatic.hzinsights.com/"
- resourceUrl = fileHost + savePath
- defer func() {
- os.Remove(imagePath)
- }()
- default:
- msg = "生成二维码失败"
- return
- }
- fmt.Println(resourceUrl)
- return
- }
- // 校验报名截止时间
- func CheckSiginupDeadline(activityInfo *cygx.ActivityDetail) (checkTime bool, popupMsg string) {
- checkTime = true
- if activityInfo.SiginupDeadline != utils.EmptyDateTimeStr && activityInfo.SiginupDeadline != "" {
- timeResp := utils.StrTimeToTime(activityInfo.SiginupDeadline)
- if timeResp.Before(time.Now()) {
- checkTime = false
- popupMsg = "该活动已截止报名"
- }
- }
- return
- }
- // 校验报名点数
- func CheckActivityPoints(activityInfo *cygx.ActivityDetail, wxUser *models.WxUser) (checkPoints bool, popupMsg, companyPoints, activityPoints string, err error) {
- checkPoints = true
- if activityInfo.IsResearchPoints == 1 {
- //获取活动对用户要扣的点
- userPointsNum, e := cygx.GetCygxActivityPointsSetUserNum(activityInfo.ActivityId)
- if e != nil {
- err = errors.New("GetCygxActivityPointsSetUserNum, Err: " + e.Error())
- return
- }
- // 获取用户所在公司剩余的点
- companyPointsNum, e := cygx.GetCompanyPoints(wxUser.CompanyId)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = errors.New("GetCompanyPoints, Err: " + e.Error())
- return
- }
- if companyPointsNum-userPointsNum < 0 {
- checkPoints = false
- popupMsg = "点数不足"
- }
- companyPoints = fmt.Sprint(companyPointsNum)
- activityPoints = fmt.Sprint(userPointsNum)
- }
- return
- }
- // 校验报名是否需要绑定邮箱
- func CheckActivityUserEmail(activityInfo *cygx.ActivityDetail, wxUser *models.WxUser) (checkEmail bool, popupMsg string) {
- checkEmail = true
- if activityInfo.IsNeedEmail == 1 {
- if wxUser.Email == "" {
- checkEmail = false
- popupMsg = "应上市公司要求,该会议报名需\n提供邮箱,用户邮箱为空"
- }
- }
- return
- }
- // 校验报名顺序 截止时间>点数>邮箱
- func CheckActivityUserAll(activityInfo *cygx.ActivityDetail, wxUser *models.WxUser) (popupMsg string, err error) {
- _, popupMsg = CheckSiginupDeadline(activityInfo)
- if popupMsg != "" {
- return
- }
- _, popupMsg, _, _, err = CheckActivityPoints(activityInfo, wxUser)
- if popupMsg != "" {
- return
- }
- _, popupMsg = CheckActivityUserEmail(activityInfo, wxUser)
- if popupMsg != "" {
- return
- }
- return
- }
|