소스 검색

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into debug

xingzai 1 년 전
부모
커밋
d7bc41e320

+ 12 - 11
controllers/cygx/activity_meet.go

@@ -341,17 +341,18 @@ func (this *ActivityMeetCoAntroller) MeetingDo() {
 		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
 		return
 	}
-	//校验活动后台管理员、销售是否有修改权限
-	havePower, popupMsg, err := cygxService.CheckActivityUpdatePower(AdminUser.AdminId, activityInfo)
-	if err != nil {
-		br.Msg = "获取管理员身份信息失败"
-		br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error()
-		return
-	}
-	if !havePower {
-		br.Msg = popupMsg
-		return
-	}
+	//校验活动后台管理员、销售是否有修改权限 校验需求取消 2023-7-10
+	//havePower, popupMsg, err := cygxService.CheckActivityUpdatePower(AdminUser.AdminId, activityInfo)
+	//if err != nil {
+	//	br.Msg = "获取管理员身份信息失败"
+	//	br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//if !havePower {
+	//	br.Msg = popupMsg
+	//	return
+	//}
+
 	noMeetingUids, err := cygx.GetSignupUserIds(activityId, meetingUids) //未到会的用户ID
 	if err != nil {
 		br.Msg = "获取信息失败"

+ 100 - 0
controllers/cygx/activity_special.go

@@ -1184,3 +1184,103 @@ func (this *ActivitySpecialCoAntroller) Offline() {
 	br.Msg = "操作成功"
 	br.IsAddLog = true
 }
+
+// @Title 发送模版消息
+// @Description 发送模版消息接口
+// @Param	request	body cygx.AddOutboundPersonnelItm true "type json string"
+// @Success 200 操作成功
+// @router /special/trip/tempMsg [post]
+func (this *ActivitySpecialTripCoAntroller) TempMsg() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	AdminUser := this.SysUser
+	if AdminUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	var req cygx.ActivitySpecialSignupTempMsgReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	idSlice := strings.Split(req.ActivityIds, ",")
+	for _, sId := range idSlice {
+		id, e := strconv.Atoi(sId)
+		if e != nil {
+			br.Msg = "活动Id参数异常"
+			br.ErrMsg = "参数解析异常, Err:" + e.Error()
+			return
+		}
+		var openIdList []*models.OpenIdList
+		idMap := make(map[string]string, 0)
+		//1已报名
+		if strings.Contains(req.SendGroup, "1") {
+			listSignup, err := cygx.GetCygxActivitySpecialTripListByActivityId(id)
+			if err != nil {
+				br.Msg = "查询报名信息失败失败"
+				br.ErrMsg = "GetCygxActivitySpecialTripListByActivityId,Err:" + err.Error()
+				return
+			}
+			if len(listSignup) == 0 {
+				continue
+			}
+			var mobileArr []string
+			for _, v := range listSignup {
+				if v.Mobile != "" {
+					mobileArr = append(mobileArr, v.Mobile)
+				}
+			}
+			mobileLen := len(mobileArr)
+			var condition string
+			var pars []interface{}
+			if mobileLen > 0 {
+				condition += ` AND u.mobile IN (` + utils.GetOrmInReplace(mobileLen) + `)`
+				pars = append(pars, mobileArr)
+			}
+			list, err := models.GetActivitySpecialOpenIdListMobile(condition, pars)
+			if err != nil {
+				br.Msg = "查询openId失败"
+				br.ErrMsg = "查询openId失败,Err:" + err.Error()
+				return
+			}
+			for _, idList := range list {
+				openIdList = append(openIdList, idList)
+				idMap[idList.OpenId] = idList.OpenId
+			}
+		}
+
+		if len(openIdList) > 0 {
+			openIdArr := make([]string, len(openIdList))
+			for i, v := range openIdList {
+				openIdArr[i] = v.OpenId
+			}
+			sendInfo := new(services.SendWxTemplate)
+			sendInfo.Keyword1 = req.ResearchTheme
+			sendInfo.Keyword2 = req.Content
+			sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
+			sendInfo.RedirectUrl = utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(id)
+			if utils.RunMode == "debug" {
+				sendInfo.RedirectUrl = utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(110) //测试环境调正式的ID
+			}
+			sendInfo.RedirectTarget = 3
+			sendInfo.Resource = strconv.Itoa(id)
+			sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_CUSTOMIZE
+			sendInfo.OpenIdArr = openIdArr
+			e = services.SendTemplateMsg(sendInfo)
+			if e != nil {
+				br.Msg = "推送模板消息失败!"
+				br.ErrMsg = "参数解析失败,Err:" + e.Error()
+				return
+			}
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "发送成功"
+}

+ 103 - 9
controllers/cygx/activity_special_trip.go

@@ -48,6 +48,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 	}
 	var items []*cygx.CygxActivitySpecialTrip
 	var itemsBill []*cygx.CygxActivitySpecialTripBill
+	var itemsMeet []*cygx.CygxActivitySpecialMeetingDetail
 	activityIds := req.ActivityIds
 	uidList := req.List
 	if activityIds == "" {
@@ -119,14 +120,13 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				br.ErrMsg = "获取失败,Err:" + errtotal.Error()
 				return
 			}
+			infoUser, err := cygx.GetUserAndCompanyNameList(uid)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取数据失败,Err:" + err.Error()
+				return
+			}
 			if total == 0 {
-				infoUser, err := cygx.GetUserAndCompanyNameList(uid)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取数据失败,Err:" + err.Error()
-					return
-				}
-
 				//流水记录表
 				itemBill := new(cygx.CygxActivitySpecialTripBill)
 				itemBill.UserId = infoUser.UserId
@@ -176,9 +176,20 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				items = append(items, item)
 				itemsBill = append(itemsBill, itemBill)
 			}
+
+			var itemMeeting = new(cygx.CygxActivitySpecialMeetingDetail)
+			itemMeeting.UserId = v.UserId
+			itemMeeting.ActivityId = activityId
+			itemMeeting.CreateTime = time.Now()
+			itemMeeting.Mobile = infoUser.Mobile
+			itemMeeting.Email = infoUser.Email
+			itemMeeting.CompanyId = infoUser.CompanyId
+			itemMeeting.CompanyName = infoUser.CompanyName
+			itemMeeting.RealName = infoUser.RealName
+			itemsMeet = append(itemsMeet, itemMeeting)
 		}
 	}
-	err = cygx.AddCygxActivitySpecialTrip(items, itemsBill)
+	err = cygx.AddCygxActivitySpecialTrip(items, itemsBill, itemsMeet)
 	if err != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "新增用户失败,Err:" + err.Error()
@@ -607,6 +618,7 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 		return
 	}
 	var userIdArr []int
+	var newMeetingUserid = make(map[int]bool) //新提交的到会的额用户ID
 	meetingUids := req.UserIds
 	if len(meetingUids) == 0 {
 		meetingUids = "0"
@@ -620,6 +632,7 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 				userId, _ := strconv.Atoi(v)
 				if userId > 0 {
 					userIdArr = append(userIdArr, userId)
+					newMeetingUserid[userId] = true
 				}
 			}
 		}
@@ -667,7 +680,66 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+
+	var condition string
+	var pars []interface{}
+	condition += " AND is_meeting = 1  AND  activity_id = ? "
+	pars = append(pars, activityId)
+	listOldMeetingDetail, err := cygx.GetCygxActivitySpecialMeetingDetailList(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "GetCygxActivitySpecialMeetingDetailList,Err:" + err.Error()
+		return
+	}
+	//获取之前已经到会的人
+	//var oldMeetingUserid = make(map[int]bool)
+
+	pars = make([]interface{}, 0)
+	condition = "  AND  activity_id = ? "
+	pars = append(pars, activityId)
+	listTripBill, err := cygx.GetCygxActivitySpecialTripBill(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "GetCygxActivitySpecialTripBill,Err:" + err.Error()
+		return
+	}
+	//获取用户最后一次的扣点状态
+	mapUserLastTripBill := make(map[int]*cygx.CygxActivitySpecialTripBill)
+	for _, v := range listTripBill {
+		mapUserLastTripBill[v.UserId] = v
+	}
+
 	var items []*cygx.CygxActivitySpecialMeetingDetail
+	var itemsBill []*cygx.CygxActivitySpecialTripBill
+	if len(listOldMeetingDetail) > 0 {
+		for _, v := range listOldMeetingDetail {
+			if mapUserLastTripBill[v.UserId] == nil {
+				continue
+			}
+			//如果上一次空降的用户,这一次提交的时候没有带入,而且还被扣点了,那么就进行返点处理
+			if !newMeetingUserid[v.UserId] && v.IsAirborne == 1 && mapUserLastTripBill[v.UserId].BillDetailed < 0 {
+				var itemBill = new(cygx.CygxActivitySpecialTripBill)
+				//流水记录表
+				itemBill.UserId = v.UserId
+				itemBill.ActivityId = activityInfo.ActivityId
+				itemBill.CreateTime = time.Now()
+				itemBill.Mobile = v.Mobile
+				itemBill.Email = v.Email
+				itemBill.CompanyId = v.CompanyId
+				itemBill.CompanyName = v.CompanyName
+				itemBill.RealName = v.RealName
+				itemBill.Source = 2
+				itemBill.DoType = 2
+				itemBill.BillDetailed = 1 // 流水加一
+				itemBill.RegisterPlatform = 1
+				itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+				itemBill.AdminId = AdminUser.AdminId
+				itemBill.Way = 2
+				itemsBill = append(itemsBill, itemBill)
+			}
+		}
+	}
+
 	for _, v := range listUser {
 		var item = new(cygx.CygxActivitySpecialMeetingDetail)
 		item.UserId = v.UserId
@@ -678,13 +750,35 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 		item.CompanyId = v.CompanyId
 		item.CompanyName = v.CompanyName
 		item.IsMeeting = 1
+		item.RealName = v.RealName
 		//添加空降人员字段
 		if _, ok := UserMap[v.UserId]; !ok {
 			item.IsAirborne = 1
 		}
+		var itemBill = new(cygx.CygxActivitySpecialTripBill)
+		//如果是空降客户,(没有扣点记录,或者上一次的流水不为负) 就进行扣点处理
+		if item.IsAirborne == 1 && (mapUserLastTripBill[v.UserId] == nil || mapUserLastTripBill[v.UserId].BillDetailed >= 0) {
+			//流水记录表
+			itemBill.UserId = v.UserId
+			itemBill.ActivityId = activityInfo.ActivityId
+			itemBill.CreateTime = time.Now()
+			itemBill.Mobile = v.Mobile
+			itemBill.Email = v.Email
+			itemBill.CompanyId = v.CompanyId
+			itemBill.CompanyName = v.CompanyName
+			itemBill.RealName = v.RealName
+			itemBill.Source = 2
+			itemBill.DoType = 1
+			itemBill.BillDetailed = -1 // 流水减一
+			itemBill.RegisterPlatform = 1
+			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+			itemBill.AdminId = AdminUser.AdminId
+			itemBill.Way = 2
+			itemsBill = append(itemsBill, itemBill)
+		}
 		items = append(items, item)
 	}
-	err = cygx.MeetingDopecialMeet(meetingUids, noMeetingUids, activityId, items)
+	err = cygx.MeetingDopecialMeet(meetingUids, noMeetingUids, activityId, items, itemsBill)
 	if err != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "操作失败,Err:" + err.Error()

+ 69 - 0
controllers/report.go

@@ -2,8 +2,14 @@ package controllers
 
 import (
 	"encoding/json"
+	"fmt"
+	"github.com/beego/beego/v2/server/web"
 	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/services"
+	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
+	"os"
+	"path"
 	"strings"
 	"time"
 )
@@ -13,6 +19,11 @@ type ReportController struct {
 	BaseAuthController
 }
 
+// 报告上传
+type ReportUploadCommonController struct {
+	web.Controller
+}
+
 // GetDayWeekReportChapterTypeList
 // @Title 获取晨报周报章节类型列表
 // @Description 获取晨报周报章节类型列表
@@ -311,3 +322,61 @@ func (this *ReportController) GetStopDayWeekReportChapterTypeList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 图片上传
+// @Description 图片上传接口
+// @Param   File   query   file  true       "文件"
+// @Success 200 上传成功
+// @router /uploadImg [post]
+func (this *ReportUploadCommonController) UploadImg() {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("文件上传失败:", err.Error())
+			go alarm_msg.SendAlarmMsg("URI:"+this.Ctx.Input.URI()+" 文件上传失败:"+err.Error(), 3)
+			//go utils.SendEmail(utils.APPNAME+"失败提醒", "URI:"+this.Ctx.Input.URI()+" 文件上传失败:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	f, h, err := this.GetFile("file")
+	if err != nil {
+		return
+	}
+	ext := path.Ext(h.Filename)
+	dateDir := time.Now().Format("20060102")
+	uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
+	err = os.MkdirAll(uploadDir, 777)
+	if err != nil {
+		return
+	}
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	fileName := randStr + ext
+	fpath := uploadDir + "/" + fileName
+	defer f.Close() //关闭上传文件
+	err = this.SaveToFile("file", fpath)
+	if err != nil {
+		return
+	}
+	//上传到阿里云
+	resourceUrl, err := services.UploadAliyunV2(fileName, fpath)
+	if err != nil {
+		return
+	}
+
+	defer func() {
+		os.Remove(fpath)
+	}()
+
+	item := new(models.Resource)
+	item.ResourceUrl = resourceUrl
+	item.ResourceType = 1
+	item.CreateTime = time.Now()
+	newId, err := models.AddResource(item)
+	if err != nil {
+		return
+	}
+	resp := new(models.ResourceResp)
+	resp.Id = newId
+	resp.ResourceUrl = resourceUrl
+	this.Data["json"] = map[string]string{"link": resourceUrl}
+	this.ServeJSON()
+}

+ 30 - 4
models/cygx/cygx_activity_special_meeting_detail.go → models/cygx/activity_special_meeting_detail.go

@@ -17,6 +17,7 @@ type CygxActivitySpecialMeetingDetail struct {
 	CompanyName string    `description:"公司名称"`
 	IsMeeting   int       `description:"是否到会  1.是 ,0否"`
 	IsAirborne  int       `description:"是否属于空降  1.是 ,0否"`
+	RealName    string    `description:"真实姓名"`
 }
 
 type CygxActivitySpecialMeetingDetailResp struct {
@@ -42,7 +43,7 @@ type MeetingSpeciaDoRep struct {
 	ActivityId int    `description:"活动ID"`
 }
 
-//列表
+// 列表
 func GetCygxActivitySpecialMeetingDetailListByActivity(activityId int) (items []*CygxActivitySpecialMeetingDetailResp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT s.* , u.real_name
@@ -52,8 +53,8 @@ func GetCygxActivitySpecialMeetingDetailListByActivity(activityId int) (items []
 	return
 }
 
-//到会操作
-func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivitySpecialMeetingDetail) (err error) {
+// 到会操作
+func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivitySpecialMeetingDetail, itemsBill []*CygxActivitySpecialTripBill) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -110,10 +111,19 @@ func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, item
 	if err != nil {
 		return
 	}
+	//添加到会扣点流水记录
+	if len(itemsBill) > 0 {
+		for _, v := range itemsBill {
+			_, err = to.Insert(v)
+			if err != nil {
+				return
+			}
+		}
+	}
 	return
 }
 
-//列表
+// 列表
 func GetCygxActivitySpecialMeetingDetailList(condition string, pars []interface{}) (items []*CygxActivitySpecialMeetingDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT s.* 
@@ -131,3 +141,19 @@ func GetCygxActivitySpecialMeetingDetailListByActivityId(activityId int) (item [
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
 }
+
+// 列表
+func UpdateCygxActivitySpecialMeetingDetailRealName(realName, mobile string) (err error) {
+	o := orm.NewOrm()
+	//添加记录表的到会信息
+	sql := `UPDATE cygx_activity_special_meeting_detail SET real_name = ?  WHERE mobile = ? `
+	_, err = o.Raw(sql, realName, mobile).Exec()
+	return
+}
+
+// 添加
+func AddCygxActivitySpecialMeetingDetail(item *CygxActivitySpecialMeetingDetail) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 51 - 3
models/cygx/activity_special_trip.go

@@ -2,7 +2,7 @@ package cygx
 
 import (
 
-	//"hongze/hz_crm_api/models"
+	//"hongze/hongze_admin/models"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -20,6 +20,7 @@ type CygxActivitySpecialTrip struct {
 	SellerName     string    `description:"所属销售"`
 	AdminId        int       `description:"销售/管理员ID"`
 	Source         int       `description:"来源,1小程序,2后台添加"`
+	IsMeeting      int       `description:"是否到会"`
 	OutboundMobile string    `description:"外呼手机号"`
 	CountryCode    string    `description:"手机国家区号"`
 }
@@ -78,7 +79,7 @@ func GetActivitySpecialTripCount(uid, activityId int) (count int, err error) {
 }
 
 // 新增预约人数
-func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*CygxActivitySpecialTripBill) (err error) {
+func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*CygxActivitySpecialTripBill, itemsMeet []*CygxActivitySpecialMeetingDetail) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -118,6 +119,14 @@ func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*C
 			return
 		}
 	}
+
+	//添加到会信息记录查询表
+	for _, item := range itemsMeet {
+		_, err = to.Insert(item)
+		if err != nil {
+			return
+		}
+	}
 	return
 }
 
@@ -166,9 +175,25 @@ func GetActivitySpecialTripTotal(activityId int, sqlStr string) (count int, err
 
 // ActivitySpecialTripCancel 取消报名
 func ActivitySpecialTripCancel(isValid, activityId, uid int) (err error) {
-	o := orm.NewOrm()
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
 	sql := `UPDATE cygx_activity_special_trip SET   is_valid= ?, is_cancel = 1  WHERE activity_id=? AND user_id = ? `
 	_, err = o.Raw(sql, isValid, activityId, uid).Exec()
+	if err != nil {
+		return
+	}
+	//删除到会记录表信息
+	sql = ` DELETE FROM cygx_activity_special_meeting_detail  WHERE activity_id = ?  AND user_id = ?  `
+	_, err = o.Raw(sql, activityId, uid).Exec()
 	return
 }
 
@@ -232,3 +257,26 @@ func GetCygxActivitySpecialTripAirborneListByComapnyId(companyId int) (item []*C
 	_, err = o.Raw(sql, companyId).QueryRows(&item)
 	return
 }
+
+type ActivitySpecialSignupTempMsgReq struct {
+	ActivityIds   string `description:"活动id,用,隔开"`
+	SendGroup     string `description:"发送对象,1已报名 用,隔开"`
+	ResearchTheme string `description:"调研主题"`
+	Content       string `description:"推送内容"`
+}
+
+// 列表
+func GetCygxActivitySpecialTripListCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialTrip, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_special_trip as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	} else {
+		_, err = o.Raw(sql, pars).QueryRows(&items)
+	}
+	return
+}

+ 1 - 0
models/cygx/activity_special_trip_bill.go

@@ -21,6 +21,7 @@ type CygxActivitySpecialTripBill struct {
 	DoType            int       `description:"操作方式,1报名,2取消报名"`
 	RegisterPlatform  int       `description:"来源 1小程序,2:网页"`
 	ChartPermissionId int       `description:"行业id"`
+	Way               int       `description:"1报名,取消报名。2到会取消到会"`
 }
 
 type CygxActivitySpecialTripBillList struct {

+ 6 - 6
models/cygx/cygx_user.go

@@ -154,7 +154,7 @@ func GetCygxCompanyUserListSplit(userIds string) (items []*CygxCompanyUser, err
 				 AND t.activity_type = 1  AND h.do_fail_type = 0 ) AS on_line_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
 				 AND t.activity_type = 0 AND h.do_fail_type = 0 ) AS office_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_special_trip AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND h.is_cancel = 0   AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_special_meeting_detail AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile   AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
 			( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS roadshow_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h  INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS activity_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h  INNER JOIN cygx_activity_voice as v ON v.activity_voice_id = h.activity_voice_id WHERE  h.mobile = u.mobile  ) AS activity_voice_num,
@@ -508,12 +508,12 @@ func GetCygxActivitySpecialTripCount(condition string, pars []interface{}) (coun
 	sqlCount := `SELECT
 	COUNT( 1 ) 
 FROM
-	cygx_activity_special_trip AS h
+	cygx_activity_special_meeting_detail AS h
 	INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id
 	INNER JOIN wx_user AS u ON h.mobile = u.mobile 
 WHERE
 	1 = 1 
-	AND h.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition
+	AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -530,12 +530,12 @@ func GetCygxActivitySpecialTripByUser(uid, startSize, pageSize int) (items []*Us
 			a.special_type AS activity_type,
 			h.is_meeting 
 		FROM
-			cygx_activity_special_trip AS h
+			cygx_activity_special_meeting_detail AS h
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id
 			INNER JOIN wx_user AS u ON h.mobile = u.mobile 
 		WHERE
 			1 = 1
-			AND h.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW()
+			 AND a.publish_status = 1 AND a.activity_time_end < NOW()
 			AND u.user_id = ?
 			ORDER BY  a.activity_time DESC LIMIT ?,? `
 	_, err = o.Raw(sql, uid, startSize, pageSize).QueryRows(&items)
@@ -851,7 +851,7 @@ func GetUserInteractionTableCount(uid int) (item *GetUserInteractionTableCountRe
 					  AND t.activity_type=1 AND h.do_fail_type = 0   ) AS on_line_num,
 			( SELECT  	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
 				  AND t.activity_type = 0 AND h.do_fail_type = 0  ) AS office_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_special_trip AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND h.is_cancel = 0   AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_special_meeting_detail AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
 			( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS roadshow_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h  INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS activity_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h  INNER JOIN cygx_activity_voice as v ON v.activity_id = h.activity_id WHERE  h.mobile = u.mobile  ) AS activity_voice_num

+ 4 - 4
models/cygx/cygx_user_company.go

@@ -302,11 +302,11 @@ func GetCygxActivitySpecialTripCountByCompany(condition string) (count int, err
 	sqlCount := ` SELECT
 			COUNT( 1 ) 
 		FROM
-			cygx_activity_special_trip AS r
+			cygx_activity_special_meeting_detail AS r
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = r.activity_id
 		WHERE
 			1 = 1 
-			AND r.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW()   ` + condition
+			 AND a.publish_status = 1 AND a.activity_time_end < NOW()   ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
 }
@@ -325,10 +325,10 @@ func CygxActivitySpecialTripByCompany(condition string, startSize, pageSize int)
 			r.real_name,
 			r.is_meeting 
 		FROM
-			cygx_activity_special_trip AS r
+			cygx_activity_special_meeting_detail AS r
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = r.activity_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
-			WHERE 1= 1  	AND r.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition + `
+			WHERE 1= 1   AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition + `
 			ORDER BY  ui.trip_num DESC, r.create_time DESC  LIMIT ?,? `
 	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	return

+ 18 - 0
routers/commentsRouter.go

@@ -1123,6 +1123,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivitySpecialTripCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivitySpecialTripCoAntroller"],
+        beego.ControllerComments{
+            Method: "TempMsg",
+            Router: `/special/trip/tempMsg`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivitySpecialTripCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivitySpecialTripCoAntroller"],
         beego.ControllerComments{
             Method: "TripList",
@@ -9520,6 +9529,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportUploadCommonController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportUploadCommonController"],
+        beego.ControllerComments{
+            Method: "UploadImg",
+            Router: `/uploadImg`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ResearchGroupController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ResearchGroupController"],
         beego.ControllerComments{
             Method: "GetAdminResearchGroup",

+ 1 - 0
routers/router.go

@@ -66,6 +66,7 @@ func init() {
 				&controllers.StatisticReportController{},
 				&controllers.StatisticYbLogController{},
 				&controllers.StatisticReportCommonController{},
+				&controllers.ReportUploadCommonController{},
 			),
 		),
 		web.NSNamespace("/voice",

+ 18 - 21
services/cygx/activity_special.go

@@ -223,8 +223,8 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 	if companyDetail.Status == "永续" {
 		specialSurplus = "不限次数"
 	}
-	chartMap := map[int]string{utils.YI_YAO_ID:utils.YI_YAO_NAME, utils.XIAO_FEI_ID:utils.XIAO_FEI_NAME, utils.KE_JI_ID:utils.KE_JI_NAME, utils.ZHI_ZAO_ID:utils.ZHI_ZAO_NAME}
-	chartNumMap := map[int]int{utils.YI_YAO_ID:0, utils.XIAO_FEI_ID:0, utils.KE_JI_ID:0, utils.ZHI_ZAO_ID:0}
+	chartMap := map[int]string{utils.YI_YAO_ID: utils.YI_YAO_NAME, utils.XIAO_FEI_ID: utils.XIAO_FEI_NAME, utils.KE_JI_ID: utils.KE_JI_NAME, utils.ZHI_ZAO_ID: utils.ZHI_ZAO_NAME}
+	chartNumMap := map[int]int{utils.YI_YAO_ID: 0, utils.XIAO_FEI_ID: 0, utils.KE_JI_ID: 0, utils.ZHI_ZAO_ID: 0}
 	if companyDetail.Status == "正式" {
 		userType, packageType, _, _, _ := GetUserType(companyId)
 		if userType == 2 {
@@ -234,15 +234,12 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 			condition += ` AND company_id = ? `
 			pars = append(pars, companyId)
 
-			airborneList, e := cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-			if e != nil {
-				err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-				return
-			}
-			ariborneMap := make(map[int]int)
-			for _, v := range airborneList {
-				ariborneMap[v.ChartPermissionId] = v.Count
-			}
+			//到会空降的也加入流水记录表,这里不在做单独计算 2023-07-10
+			//airborneTota, e = cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
+			//if e != nil {
+			//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
+			//	return
+			//}
 			//condition += ` AND is_valid = 1 `
 			//查询当年的数据
 			condition += ` AND create_time >= ?  `
@@ -261,14 +258,13 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 			totalTrip := packageTypeMap[packageType]
 
 			for k, _ := range chartNumMap {
-				tripRemaining := totalTrip - ariborneMap[k] + TripBillNumMap[k]
+				tripRemaining := totalTrip + TripBillNumMap[k]
 				if tripRemaining < 0 {
 					tripRemaining = 0
 				}
 				specialSurplus += chartMap[k] + strconv.Itoa(tripRemaining) + "次,"
 			}
 			specialSurplus = strings.TrimRight(specialSurplus, ",")
-
 			//tripRemaining = 12 - tripTota
 		} else {
 			list, e := company.GetCompanyReportPermissionUpgrade(companyId, 2)
@@ -294,14 +290,15 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 			if len(chartList) == 0 {
 				return
 			}
-			airborneList, e := cygx.GetCygxActivitySpecialTripAirborneListByComapnyId(companyId)
-			if e != nil {
-				err = errors.New("获取品种信息失败, Err:" + e.Error())
-				return
-			}
-			for _, v := range airborneList {
-				mapPermissionNameTrip[v.ChartPermissionName] += 1
-			}
+			//到会空降的也加入流水记录表,这里不在做单独计算 2023-07-10
+			//airborneList, e := cygx.GetCygxActivitySpecialTripAirborneListByComapnyId(companyId)
+			//if e != nil {
+			//	err = errors.New("获取品种信息失败, Err:" + e.Error())
+			//	return
+			//}
+			//for _, v := range airborneList {
+			//	mapPermissionNameTrip[v.ChartPermissionName] += 1
+			//}
 
 			var condition string
 			var pars []interface{}

+ 3 - 51
services/cygx/special_wx_msg.go

@@ -231,27 +231,6 @@ func DetermineTripChange(activityId int, changeType, changeMsg string) (err erro
 		fmt.Println(e)
 		return
 	}
-	//var accessToken string
-	//if utils.RunMode == "release" {
-	//	accessToken, e = models.GetWxAccessTokenByXzs()
-	//	if e != nil {
-	//		err = e
-	//		return
-	//	}
-	//	if accessToken == "" {
-	//		return
-	//	}
-	//} else {
-	//	accessToken, e = models.GetWxAccessToken()
-	//	if e != nil {
-	//		return
-	//	}
-	//	if accessToken == "" {
-	//		msg = "accessToken is empty"
-	//		return
-	//	}
-	//}
-	//fmt.Println(listSignup)
 	var mobileArr []string
 	for _, v := range listSignup {
 		if v.Mobile != "" {
@@ -259,6 +238,9 @@ func DetermineTripChange(activityId int, changeType, changeMsg string) (err erro
 		}
 	}
 	mobileLen := len(mobileArr)
+	if mobileLen == 0 {
+		return
+	}
 	var condition string
 	var pars []interface{}
 	if mobileLen > 0 {
@@ -274,36 +256,6 @@ func DetermineTripChange(activityId int, changeType, changeMsg string) (err erro
 	if len(openIdList) == 0 {
 		return
 	}
-	//sendMap := make(map[string]interface{})
-	//sendData := make(map[string]interface{})
-	//var first string
-	//var keyword1 string
-	//var keyword2 string
-	//
-	//if changeType == "City" {
-	//	first = "【" + activityInfo.ResearchTheme + "】专项调研发生了城市变更"
-	//} else if changeType == "dateList" {
-	//	first = "【" + activityInfo.ResearchTheme + "】专项调研发生了时间变更"
-	//} else {
-	//	first = "【" + activityInfo.ResearchTheme + "】专项调研发生了调研形式变更"
-	//}
-	//keyword1 = activityInfo.ResearchTheme
-	//keyword2 = changeMsg
-	//redirectUrl := ""
-	//sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	//sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
-	//sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
-	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	//if utils.RunMode == "release" {
-	//	sendMap["template_id"] = utils.WxMsgTemplateIdActivityChangeApplyXzs
-	//} else {
-	//	sendMap["template_id"] = utils.WxMsgTemplateIdActivityChangeApply
-	//}
-	//sendMap["url"] = redirectUrl
-	//sendMap["data"] = sendData
-	//sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxCygxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
-	//services.PublicsendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_UPDATE)
-
 	openIdArr := make([]string, len(openIdList))
 	for i, v := range openIdList {
 		openIdArr[i] = v.OpenId