|
@@ -2,10 +2,12 @@ package services
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"hongze/hongze_cygx/models"
|
|
|
"hongze/hongze_cygx/utils"
|
|
|
"strconv"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -106,3 +108,274 @@ func GetActivityLabelSpecialList(userType, isPower int, chartPermissionIds, scal
|
|
|
item = itemList
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+//HandleActivityLabelSpecialPermission 处理专项产业调研的查询权限sql
|
|
|
+func HandleActivityLabelSpecialPermission(user *models.WxUserItem) (condition string, err error) {
|
|
|
+ userType, permissionStr, err := GetUserType(user.CompanyId)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ slicePer := strings.Split(permissionStr, ",")
|
|
|
+ var permissionSqlStr string
|
|
|
+ for _, v := range slicePer {
|
|
|
+ if userType == 1 {
|
|
|
+ if !strings.Contains(v, "研选") {
|
|
|
+ permissionSqlStr += "'" + v + "',"
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ permissionSqlStr += "'" + v + "',"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
|
|
|
+ permissionSqlStr = strings.Replace(permissionSqlStr, "(主观)", "", -1)
|
|
|
+ permissionSqlStr = strings.Replace(permissionSqlStr, "(客观)", "", -1)
|
|
|
+ condition = ` AND art.publish_status = 1 AND art.label != '' AND art.is_offline = 0 `
|
|
|
+ condition += ` AND art.chart_permission_name IN (` + permissionSqlStr + `) `
|
|
|
+ condition += ` AND art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+//获取预报名列表
|
|
|
+func GetActivitySpecialPrepareList(user *models.WxUserItem, startSize, pageSize int, keywords string) (list []*models.CygxActivitySpecialDetail, totalPrepare int, err error) {
|
|
|
+ condition, e := HandleActivityLabelSpecialPermission(user)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var pars []interface{}
|
|
|
+ condition += ` AND art.days = 0 AND art.publish_status = 1 AND art.is_offline = 0 `
|
|
|
+ if keywords != "" {
|
|
|
+ keywords = "%" + keywords + "%"
|
|
|
+ condition += ` AND art.research_theme LIKE ? `
|
|
|
+ pars = append(pars, keywords)
|
|
|
+ }
|
|
|
+ totalPrepare, e = models.GetActivitySpecialCount(condition, pars)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetActivitySpecialCount, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ condition += ` ORDER BY art.last_updated_time DESC `
|
|
|
+ list, e = models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, startSize, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+确定行程的查询 GetActivityLabelSpecialConfirmList
|
|
|
+state 进行状态 1:未开始,2:进行中,3:已结束 不传默认查询全部items []*CygxActivitySpecialDetail
|
|
|
+*/
|
|
|
+func GetActivityLabelSpecialConfirmList(user *models.WxUserItem, startSize, pageSize, state int, keywords string) (list []*models.CygxActivitySpecialDetail, totalConfirm int, err error) {
|
|
|
+ //var condition string
|
|
|
+ condition, e := HandleActivityLabelSpecialPermission(user)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var pars []interface{}
|
|
|
+ condition += ` AND art.days >0 `
|
|
|
+ if state == 1 {
|
|
|
+ condition += ` AND art.activity_time > ? `
|
|
|
+ pars = append(pars, time.Now())
|
|
|
+ }
|
|
|
+ if state == 2 {
|
|
|
+ condition += ` AND art.activity_time < ? `
|
|
|
+ pars = append(pars, time.Now())
|
|
|
+ condition += ` AND art.activity_time_end > ? `
|
|
|
+ pars = append(pars, time.Now())
|
|
|
+ }
|
|
|
+ if state == 3 {
|
|
|
+ condition += ` AND art.activity_time_end < ? `
|
|
|
+ pars = append(pars, time.Now())
|
|
|
+ }
|
|
|
+
|
|
|
+ if keywords != "" {
|
|
|
+ keywords = "%" + keywords + "%"
|
|
|
+ condition += ` AND art.research_theme LIKE ? `
|
|
|
+ pars = append(pars, keywords)
|
|
|
+ }
|
|
|
+ totalConfirm, e = models.GetActivitySpecialCount(condition, pars)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetActivitySpecialCount, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ condition += ` ORDER BY art.activity_time DESC `
|
|
|
+ list, e = models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, startSize, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var activityIds []int
|
|
|
+ for k, v := range list {
|
|
|
+ resultTimeStart := utils.StrTimeToTime(v.ActivityTime) //时间字符串格式转时间格式
|
|
|
+ resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式
|
|
|
+ if resultTimeStart.After(time.Now()) {
|
|
|
+ list[k].ActiveState = 1
|
|
|
+ } else if time.Now().After(resultTimeEnd) {
|
|
|
+ list[k].ActiveState = 3
|
|
|
+ } else {
|
|
|
+ list[k].ActiveState = 2
|
|
|
+ }
|
|
|
+ if list[k].Days == 0 {
|
|
|
+ list[k].TripStatus = 1
|
|
|
+ } else {
|
|
|
+ list[k].TripStatus = 2
|
|
|
+ }
|
|
|
+ activityIds = append(activityIds, v.ActivityId)
|
|
|
+ }
|
|
|
+
|
|
|
+ //处理用户已经报名了的行程
|
|
|
+ UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for k, v := range list {
|
|
|
+ if _, ok := UserMap[v.ActivityId]; ok {
|
|
|
+ list[k].IsTrip = 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+//获取用户已经报名的活动
|
|
|
+func GetSpecialTripUserMap(activityIds []int, userId int) (mapUserId map[int]int, err error) {
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+ activityIdsLen := len(activityIds)
|
|
|
+ if activityIdsLen > 0 {
|
|
|
+ condition += ` AND activity_id IN (` + utils.GetOrmInReplace(activityIdsLen) + `)`
|
|
|
+ pars = append(pars, activityIds)
|
|
|
+ }
|
|
|
+ condition += ` AND user_id = ? AND is_cancel = 0 `
|
|
|
+ pars = append(pars, userId)
|
|
|
+ list, e := models.GetCygxActivitySpecialTripList(condition, pars)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ mapUid := make(map[int]int)
|
|
|
+ for _, v := range list {
|
|
|
+ mapUid[v.UserId] = v.UserId
|
|
|
+ }
|
|
|
+ mapUserId = mapUid
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+//GetActivitySpecialList 获取专项调研列表
|
|
|
+func GetActivitySpecialList(user *models.WxUserItem, currentIndex, pageSize int, keywords string) (list []*models.CygxActivitySpecialDetail, total int, err error) {
|
|
|
+ listConfirm, totalConfirm, e := GetActivityLabelSpecialConfirmList(user, (currentIndex-1)*pageSize, pageSize, 1, keywords)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetActivityLabelSpecialConfirmList, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if currentIndex == 1 && len(listConfirm) > 0 {
|
|
|
+ listConfirm[0].Explain = "此类调研时间安排已经确定,点击报名后按人次扣除对应机构的服务点数。由于每场活动人数有限,如果不能参加请提前48小时取消,未及时取消导致影响其他客户报名将会维持扣点。"
|
|
|
+ }
|
|
|
+ list = listConfirm
|
|
|
+ total = totalConfirm
|
|
|
+ var startSizePrepare, pageSizePrepare int
|
|
|
+ //全是确定行程的查询数据
|
|
|
+ if totalConfirm >= currentIndex*pageSize {
|
|
|
+ total = totalConfirm
|
|
|
+ startSizePrepare = 0
|
|
|
+ pageSizePrepare = 0
|
|
|
+ return
|
|
|
+ } else if totalConfirm > (currentIndex-1)*pageSize && totalConfirm < currentIndex*pageSize {
|
|
|
+ //一半确认行程一半预报名
|
|
|
+ startSizePrepare = 0
|
|
|
+ pageSizePrepare = pageSize - len(listConfirm)
|
|
|
+ } else {
|
|
|
+ //全是预报名
|
|
|
+ startSizePrepare = (currentIndex-1)*pageSize - totalConfirm
|
|
|
+ pageSizePrepare = pageSize - len(listConfirm)
|
|
|
+ }
|
|
|
+ listPrepare, totalPrepare, e := GetActivitySpecialPrepareList(user, startSizePrepare, pageSizePrepare, keywords)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetActivityLabelSpecialConfirmList, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(listPrepare) > 0 {
|
|
|
+ for _, v := range listPrepare {
|
|
|
+ list = append(list, v)
|
|
|
+ }
|
|
|
+ if startSizePrepare == 0 {
|
|
|
+ listPrepare[0].Explain = "此类调研具体行程尚未确认,待预报名人数满10人后弘则会确定行程并推送给您活动日期,只有在确认行程中再次报名才完成占位。"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ total = totalConfirm + totalPrepare
|
|
|
+
|
|
|
+ //处理封面图片
|
|
|
+ detail, e := models.GetConfigByCode("city_img_url")
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetConfigByCode, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ detailChart, e := models.GetConfigByCode("chart_img_url")
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetConfigByCode, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ addressList := strings.Split(detail.ConfigValue, "{|}")
|
|
|
+ mapAddress := make(map[string]string)
|
|
|
+ chartList := strings.Split(detailChart.ConfigValue, "{|}")
|
|
|
+ mapChart := make(map[string]string)
|
|
|
+ var cityName string
|
|
|
+ var chartName string
|
|
|
+ var imgUrl string
|
|
|
+ var imgUrlChart string
|
|
|
+ for _, v := range addressList {
|
|
|
+ vslice := strings.Split(v, "_")
|
|
|
+ cityName = vslice[0]
|
|
|
+ imgUrl = vslice[len(vslice)-1]
|
|
|
+ mapAddress[cityName] = imgUrl
|
|
|
+ }
|
|
|
+ for _, v := range chartList {
|
|
|
+ vslice := strings.Split(v, "_")
|
|
|
+ chartName = vslice[0]
|
|
|
+ imgUrlChart = vslice[len(vslice)-1]
|
|
|
+ mapChart[chartName] = imgUrlChart
|
|
|
+ }
|
|
|
+ for k, v := range list {
|
|
|
+ list[k].ImgUrlText = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
|
|
|
+ if mapChart[v.ChartPermissionName] != "" {
|
|
|
+ list[k].ImgUrl = mapChart[v.ChartPermissionName]
|
|
|
+ }
|
|
|
+ list[k].ActivityTypeName = "专项调研"
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+//HandleActivitySpecialShow 处理活动的状态
|
|
|
+func HandleActivitySpecialShow(activityDetail *models.CygxActivitySpecialDetail, user *models.WxUserItem) (item *models.CygxActivitySpecialDetail, err error) {
|
|
|
+ var activityIds []int
|
|
|
+ resultTimeStart := utils.StrTimeToTime(activityDetail.ActivityTime) //时间字符串格式转时间格式
|
|
|
+ resultTimeEnd := utils.StrTimeToTime(activityDetail.ActivityTimeEnd) //时间字符串格式转时间格式
|
|
|
+ if resultTimeStart.After(time.Now()) {
|
|
|
+ activityDetail.ActiveState = 1
|
|
|
+ } else if time.Now().After(resultTimeEnd) {
|
|
|
+ activityDetail.ActiveState = 3
|
|
|
+ } else {
|
|
|
+ activityDetail.ActiveState = 2
|
|
|
+ }
|
|
|
+ activityIds = append(activityIds, activityDetail.ActivityId)
|
|
|
+ //处理用户已经报名了的行程
|
|
|
+ UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if activityDetail.Days == 0 {
|
|
|
+ activityDetail.TripStatus = 1
|
|
|
+ } else {
|
|
|
+ activityDetail.TripStatus = 2
|
|
|
+ }
|
|
|
+ if _, ok := UserMap[activityDetail.ActivityId]; ok {
|
|
|
+ activityDetail.IsTrip = 1
|
|
|
+ }
|
|
|
+ item = activityDetail
|
|
|
+ return
|
|
|
+}
|