Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into cygx/cygx_11.3

xingzai 1 year ago
parent
commit
f47bc7b6e5

+ 5 - 3
controllers/company.go

@@ -136,7 +136,7 @@ func (this *CompanyController) SearchList() {
 		item := list[i]
 		itemStatus := item.Status
 		//白嫖客户标记
-		if _, ok := scroungeMap[item.CompanyId]; ok{
+		if _, ok := scroungeMap[item.CompanyId]; ok {
 			item.IsScrounge = 1
 		}
 		if !strings.Contains(item.Status, "/") {
@@ -969,6 +969,8 @@ func (this *CompanyController) List() {
 				} else {
 					sortStr = " ORDER BY b.try_out_day_total "
 				}
+			} else if sortParam == "closeTime" {
+				sortStr = " ORDER BY b.close_time "
 			} else {
 				br.Msg = "获取失败"
 				br.ErrMsg = "排序字段传入数据异常:" + sortParam
@@ -1739,7 +1741,7 @@ func (this *CompanyController) List() {
 		scroungeMap[v.CompanyId] = 1
 	}
 	for i, v := range companyLists {
-		if _, ok := scroungeMap[v.CompanyId]; ok{
+		if _, ok := scroungeMap[v.CompanyId]; ok {
 			companyLists[i].IsScrounge = 1
 		}
 	}
@@ -3393,7 +3395,7 @@ func (this *CompanyController) Detail() {
 	for _, v := range scroungeList {
 		scroungeMap[v.CompanyId] = 1
 	}
-	if _, ok := scroungeMap[item.CompanyId]; ok{
+	if _, ok := scroungeMap[item.CompanyId]; ok {
 		item.IsScrounge = 1
 	}
 

+ 158 - 30
controllers/cygx/activity.go

@@ -85,10 +85,30 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+
+	//处理识图建会的会议信息列表 因为活动发布处理的业务逻辑过多,方便后期统一维护这里 根据 list 数据类型自己拼接 活动的 body  查研观向 11.12
+	listImgToText := req.ListImgToText
+
+	if len(listImgToText) > 0 {
+		var errmsg string
+		req, err, errmsg = cygxService.MakeActivityReqText(listImgToText)
+		if err != nil {
+			br.Msg = "识图建会失败!"
+			br.ErrMsg = "参数解析失败,Err:" + err.Error()
+			return
+		}
+		if errmsg != "" {
+			br.Msg = "识图建会失败," + errmsg
+			br.ErrMsg = "识图建会失败," + errmsg
+			return
+		}
+	}
 	if req.Body == "" {
 		br.Msg = "内容不可为空"
 		return
 	}
+
+	//return
 	//不限制人数的,强制改为全部客户可见
 	if req.LimitPeopleNum == 0 {
 		req.VisibleRange = 2
@@ -364,7 +384,6 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 		}
 		itemPointsSet = itemResp
 	}
-
 	for k, v := range slice {
 		//如果内容不存在 时间:字段则不予处理
 		if strings.Contains(v, "时间:") || strings.Contains(v, "时间:") {
@@ -423,7 +442,14 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 			item.IsYidongConduct = req.IsYidongConduct
 			item.IsCanOutboundCall = req.IsCanOutboundCall
 			item.IsNeedEmail = isNeedEmail
-			item.SiginupDeadline = siginupDeadline
+
+			if len(listImgToText) > 0 {
+				resultTime := utils.StrTimeToTime(item.ActivityTime)                                       //时间字符串格式转时间格式
+				item.SiginupDeadline = resultTime.AddDate(0, 0, -1).Format(utils.FormatDate) + " 15:30:00" //批量建会报名截止之前默认:活动前一天15:30:00
+			} else {
+				item.SiginupDeadline = siginupDeadline
+			}
+
 			if isResearchPoints == 1 {
 				item.IsResearchPoints = 1
 			}
@@ -624,7 +650,7 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 					item.AdminName = activityInfo.AdminName
 					item.PublishDate = utils.StrTimeToTime(activityInfo.PublishDate)
 				}
-				//音频
+				//音频 目前只有一个
 				itemVoice := new(cygx.CygxActivityVoice)
 				//var itemVoiceList []*cygx.CygxActivityVoice
 				if len(voiceList) > 0 {
@@ -652,45 +678,51 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 				}
 				//删除原有的视频数据
 				//if itemVideo.VideoUrl != "" {
-				videoDetail, err := cygx.GetCygxActivityVideoReqDetail(activityId)
-				if err != nil && err.Error() != utils.ErrNoRow() {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "GetCygxActivityVideoReqDetail,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
-					return
-				}
-				if videoDetail != nil {
-					go cygxService.UpdateResourceData(videoDetail.VideoId, "activityvideo", "delete", time.Now().Format(utils.FormatDateTime))
-				}
+				//videoDetail, err := cygx.GetCygxActivityVideoReqDetail(activityId)
+				//if err != nil && err.Error() != utils.ErrNoRow() {
+				//	br.Msg = "获取信息失败"
+				//	br.ErrMsg = "GetCygxActivityVideoReqDetail,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				//	return
 				//}
-
-				//if itemVoice.VoiceUrl != "" {
-				voiceReqList, err := cygx.GetCygxActivityVoiceReqList(activityId)
+				//if videoDetail != nil {
+				//	go cygxService.UpdateResourceData(videoDetail.VideoId, "activityvideo", "delete", time.Now().Format(utils.FormatDateTime))
+				//}
+				//}
+				//处理音视频上传
+				err := cygxService.UpdateActivityVideoAndVoice(activityInfo, itemVoice, itemVideo)
 				if err != nil && err.Error() != utils.ErrNoRow() {
 					br.Msg = "获取信息失败"
-					br.ErrMsg = "GetCygxActivityVoiceReqList,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+					br.ErrMsg = "UpdateActivityVideoAndVoice,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
 					return
 				}
-				if len(voiceReqList) > 0 {
-					for _, voice := range voiceReqList {
-						go cygxService.UpdateResourceData(voice.ActivityVoiceId, "activityvoice", "delete", time.Now().Format(utils.FormatDateTime))
-					}
-				}
+				//if itemVoice.VoiceUrl != "" {
+				//voiceReqList, err := cygx.GetCygxActivityVoiceReqList(activityId)
+				//if err != nil && err.Error() != utils.ErrNoRow() {
+				//	br.Msg = "获取信息失败"
+				//	br.ErrMsg = "GetCygxActivityVoiceReqList,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				//	return
+				//}
+				//if len(voiceReqList) > 0 {
+				//	for _, voice := range voiceReqList {
+				//		go cygxService.UpdateResourceData(voice.ActivityVoiceId, "activityvoice", "delete", time.Now().Format(utils.FormatDateTime))
+				//	}
+				//}
 				//}
 				//如果活动信息有如下变更则做消息推送
-				voiceIdNew, videoIdNew, err := cygx.EditActivity(item, activityInfo.PublishStatus, industrialActivityItemsList, subjectActivityItemsList, itemVoice, itemVideo, itemPointsSet)
+				err = cygx.EditActivity(item, activityInfo.PublishStatus, industrialActivityItemsList, subjectActivityItemsList, itemPointsSet)
 				if err != nil {
 					br.Msg = "操作失败"
 					br.ErrMsg = "操作失败,Err:" + err.Error()
 					return
 				}
-				//更新活动音频
-				if int(voiceIdNew) > 0 {
-					go cygxService.UpdateResourceData(int(voiceIdNew), "activityvoice", "add", activityInfo.ActivityTime)
-				}
-				//更新活动视频
-				if int(videoIdNew) > 0 {
-					go cygxService.UpdateResourceData(int(videoIdNew), "activityvideo", "add", activityInfo.ActivityTime)
-				}
+				////更新活动音频
+				//if int(voiceIdNew) > 0 {
+				//	go cygxService.UpdateResourceData(int(voiceIdNew), "activityvoice", "add", activityInfo.ActivityTime)
+				//}
+				////更新活动视频
+				//if int(videoIdNew) > 0 {
+				//	go cygxService.UpdateResourceData(int(videoIdNew), "activityvideo", "add", activityInfo.ActivityTime)
+				//}
 
 				errAct = err
 				if activityInfo.PublishStatus == 1 && activityInfo.ActivityTimeText != item.ActivityTimeText {
@@ -1501,3 +1533,99 @@ func (this *ActivityCoAntroller) DeadlineSet() {
 	br.Success = true
 	br.Data = list
 }
+
+// @Title 根据图片获取建会信息接口
+// @Description 根据图片获取建会信息接口
+// @Param   request	body cygx.ActivityIdRep true "type json string"
+// @Success Ret=200
+// @router /activity/imgToText [post]
+func (this *ActivityCoAntroller) ImgToText() {
+	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"
+		br.Ret = 408
+		return
+	}
+	var req cygx.AliyunOcrImgUrlReq
+	resp := new(cygx.AliyunOcrTextActivityListResp)
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	imgUrl := req.ImgUrl
+	if imgUrl == "" {
+		br.Msg = "请上传图片"
+		return
+	}
+
+	ocrResp, err := services.AliOcrByImageToText(imgUrl)
+	if err != nil {
+		br.Msg = "图片解析失败!"
+		br.ErrMsg = "图片解析失败,Err:" + err.Error()
+		return
+	}
+	if len(ocrResp.Ret) == 0 {
+		br.Msg = "图片解析失败!"
+		return
+	}
+
+	var titmeYMD string
+	var titmeHM string
+	var company string
+	var list []*cygx.AliyunOcrTextActivityResp
+	var mapTitmeYMD = make(map[int]string)
+	var mapTitmeHM = make(map[int]string)
+	var mapCompany = make(map[int]string)
+	var lineNum int
+	for k, v := range ocrResp.Ret {
+		if k == 0 && !strings.Contains(v.Word, "/") {
+			continue
+		}
+		if strings.Contains(v.Word, "/") {
+			mapTitmeYMD[lineNum] = v.Word
+			titmeYMD = v.Word
+		}
+		if strings.Contains(v.Word, "AM") || strings.Contains(v.Word, "PM") {
+			mapTitmeHM[lineNum] = v.Word
+			titmeHM = v.Word
+		}
+		if strings.Contains(v.Word, "(") && strings.Contains(v.Word, ")") {
+			if mapTitmeYMD[lineNum] == "" {
+				mapTitmeYMD[lineNum] = mapTitmeYMD[lineNum-1]
+			}
+			titmeYMD = mapTitmeYMD[lineNum]
+			mapCompany[lineNum] = v.Word
+			company = v.Word
+			lineNum++
+
+		}
+		if titmeYMD != "" && titmeHM != "" && company != "" {
+			item := new(cygx.AliyunOcrTextActivityResp)
+			item.TitmeYMD = titmeYMD
+			item.TitmeHM = titmeHM
+			item.Company = company
+			list = append(list, item)
+			titmeYMD = ""
+			titmeHM = ""
+			company = ""
+		}
+	}
+
+	for _, v := range list {
+		v.TitmeYMD = cygxService.ConvertActivityTitmeYMD(v.TitmeYMD)
+		v.TitmeHM = cygxService.ConvertActivityTitmeHM(v.TitmeHM)
+	}
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Data = resp
+	br.IsAddLog = true
+}

+ 64 - 0
controllers/cygx/apply_record.go

@@ -6,7 +6,9 @@ import (
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/cygx"
+	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/utils"
+	"strconv"
 )
 
 // 权益小程序
@@ -65,6 +67,19 @@ func (this *ApplyRecordController) ListSysRole() {
 		}
 	}
 
+	//权益申请销售只能看到自己名下的客户的申请 查研观向11.1
+	companyIds, err := cygxService.GetAdminLookUserCompanyIds(sysUser)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetAdminLookUserCompanyIds Err:" + err.Error()
+		return
+	}
+	lencompanyIds := len(companyIds)
+	if lencompanyIds > 0 {
+		condition = ` AND a.company_id_pay  IN (` + utils.GetOrmInReplace(lencompanyIds) + `)`
+		pars = append(pars, companyIds)
+	}
+
 	total, err := cygx.GetCygxApplyRecordCount(condition, pars)
 	if err != nil {
 		br.Msg = "获取失败"
@@ -78,6 +93,33 @@ func (this *ApplyRecordController) ListSysRole() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+
+	var microvideoIds []int
+	for _, v := range list {
+		if v.Source == "roadshow" {
+			microvideoIds = append(microvideoIds, v.SourceId)
+		}
+	}
+	lenmicrovideoIds := len(microvideoIds)
+	mapmicrovideoChartPermissionId := make(map[int]int) //产业视频ID所对应的行业ID
+	mapmicrovideoIndustryId := make(map[int]int)        //产业视频ID所对应的行业ID
+	if lenmicrovideoIds > 0 {
+		var conditionmicrovideo string
+		var parsmicrovideo []interface{}
+		conditionmicrovideo = ` AND video_id IN (` + utils.GetOrmInReplace(lenmicrovideoIds) + `)`
+		parsmicrovideo = append(parsmicrovideo, microvideoIds)
+		listmicrovideo, err := cygx.GetMicroRoadshowVideoList(conditionmicrovideo, "", parsmicrovideo, 0, lenmicrovideoIds)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range listmicrovideo {
+			mapmicrovideoChartPermissionId[v.VideoId] = v.ChartPermissionId
+			mapmicrovideoIndustryId[v.VideoId] = v.IndustryId
+		}
+	}
+
 	for i, v := range list {
 		if list[i].SellerName == "/" {
 			list[i].SellerName = ""
@@ -122,7 +164,29 @@ func (this *ApplyRecordController) ListSysRole() {
 		case 2:
 			list[i].ApplicationSource += "(络町)"
 		}
+
+		switch v.Source {
+		case "article": //文章详情
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.SourceId)
+		case "activity": //活动详情
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
+		case "activityvoice": //活动音频详情
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
+		case "activityvideo": //活动视频详情
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
+		case "productinterior": //产品内测
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/internal/article/" + strconv.Itoa(v.SourceId)
+		case "roadshow": //产业视频
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/indepth/info/" + strconv.Itoa(mapmicrovideoChartPermissionId[v.SourceId]) + "/" + strconv.Itoa(mapmicrovideoIndustryId[v.SourceId])
+		case "researchsummary": //本周研究汇总
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/summary/2/" + strconv.Itoa(v.SourceId)
+		case "minutessummary": //上周纪要汇总
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/summary/1/" + strconv.Itoa(v.SourceId)
+		case "reportselection": //报告精选(重点公司)
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/recent/" + strconv.Itoa(v.SourceId)
+		}
 	}
+
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(cygx.CygxApplyRecordListResp)
 	resp.List = list

+ 7 - 5
go.mod

@@ -51,8 +51,9 @@ require (
 	github.com/alibabacloud-go/tea-utils v1.3.6 // indirect
 	github.com/alibabacloud-go/tea-xml v1.1.2 // indirect
 	github.com/aliyun/credentials-go v1.1.2 // indirect
-	github.com/andybalholm/cascadia v1.3.1 // indirect
+	github.com/andybalholm/cascadia v1.3.2 // indirect
 	github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02 // indirect
+	github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect
 	github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d // indirect
@@ -92,6 +93,7 @@ require (
 	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
 	github.com/sirupsen/logrus v1.9.0 // indirect
 	github.com/spf13/cast v1.5.0 // indirect
+	github.com/stevenyao/go-opencc v0.0.0-20161014062826-cc376a51b65e // indirect
 	github.com/stretchr/testify v1.8.1 // indirect
 	github.com/tidwall/gjson v1.14.1 // indirect
 	github.com/tidwall/match v1.1.1 // indirect
@@ -100,9 +102,9 @@ require (
 	github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect
 	github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
 	golang.org/x/crypto v0.5.0 // indirect
-	golang.org/x/net v0.5.0 // indirect
-	golang.org/x/sys v0.4.0 // indirect
-	golang.org/x/text v0.6.0 // indirect
+	golang.org/x/net v0.9.0 // indirect
+	golang.org/x/sys v0.7.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect
 	google.golang.org/protobuf v1.28.1 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
@@ -111,4 +113,4 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	xorm.io/builder v0.3.6 // indirect
 	xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb // indirect
-)
+)

+ 33 - 0
go.sum

@@ -84,6 +84,8 @@ github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0
 github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
 github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
+github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
+github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02 h1:o2oaBQGTzO+xNh12e7xWkphNe7H2DTiWv1ml9a2P9PQ=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs=
@@ -92,6 +94,8 @@ github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
 github.com/aws/aws-sdk-go v1.42.23 h1:V0V5hqMEyVelgpu1e4gMPVCJ+KhmscdNxP/NWP1iCOA=
 github.com/aws/aws-sdk-go v1.42.23/go.mod h1:gyRszuZ/icHmHAVE4gc/r+cfCmhA1AD+vqfWbgI+eHs=
+github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
+github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
 github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
 github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
 github.com/beego/bee/v2 v2.0.4 h1:nEjPwxJ8D+cr54eWChJGoGRH7bJ7OQwbhx8rU0OQf7E=
@@ -494,6 +498,8 @@ github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
 github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec h1:q6XVwXmKvCRHRqesF3cSv6lNqqHi0QWOvgDlSohg8UA=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
+github.com/stevenyao/go-opencc v0.0.0-20161014062826-cc376a51b65e h1:EScGwVsN5G1/xRUdOKtUGugKseKjvHrvA71486Q39zg=
+github.com/stevenyao/go-opencc v0.0.0-20161014062826-cc376a51b65e/go.mod h1:lHc78mZexRHu9CQrKCEO0CLFl7GN0Xpj3PH3jBJ5EpY=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
@@ -548,6 +554,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
 github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973 h1:iCnkJ/qjKZGdZnlcj1N55AxPDan814kpc3s1cDpQKd8=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
 github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
@@ -574,6 +582,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
@@ -590,6 +599,9 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -606,14 +618,19 @@ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/
 golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
 golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
 golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
+golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8=
@@ -625,7 +642,9 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -649,14 +668,22 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
 golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
+golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@@ -665,6 +692,9 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
 golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U=
@@ -681,6 +711,9 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

+ 52 - 40
models/cygx/activity.go

@@ -84,8 +84,9 @@ type ActivityRep struct {
 	List                    []*ActivityGroupIndustrialRep
 	VoiceList               []*CygxActivityVoiceReq
 	VideoDetail             *CygxActivityVideoReq
-	BackgroundImg           string `description:"封面图片"`
-	ShareImg                string `description:"分享图片"`
+	ListImgToText           []*AliyunOcrTextActivityResp `description:"识图建会的会议信息列表"`
+	BackgroundImg           string                       `description:"封面图片"`
+	ShareImg                string                       `description:"分享图片"`
 }
 
 // 活动添加、修改入参
@@ -301,15 +302,16 @@ func AddActivity(items []*CygxActivity, industrialActivityItems [][]*CygxIndustr
 				}
 			}
 		}
-	}
 
-	{
-		//添加研选扣点内容
-		if itemPointsSet.PointsObject != "" {
-			itemPointsSet.ActivityId = int(newId)
-			_, err = to.Insert(itemPointsSet)
-			if err != nil {
-				return
+		{
+			//添加研选扣点内容
+			if itemPointsSet.PointsObject != "" {
+				itemPointsSet.ActivityId = int(newId)
+				itemPointsSet.Id = 0 // 二次插入的时候主键被赋值了
+				_, err = to.Insert(itemPointsSet)
+				if err != nil {
+					return
+				}
 			}
 		}
 	}
@@ -333,7 +335,7 @@ func GetAddActivityInfoById(ActivityId int) (item *ActivityDetail, err error) {
 }
 
 // 修改
-func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityItems [][]*CygxIndustrialActivityGroupManagement, subjectActivityItems [][]*CygxIndustrialActivityGroupSubject, itemVoice *CygxActivityVoice, itemVideo *CygxActivityVideo, itemPointsSet *CygxActivityPointsSet) (voiceId, videoId int64, err error) {
+func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityItems [][]*CygxIndustrialActivityGroupManagement, subjectActivityItems [][]*CygxIndustrialActivityGroupSubject, itemPointsSet *CygxActivityPointsSet) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -462,37 +464,37 @@ func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityIt
 
 	//音频处理
 	//删除旧的音频
-	sql = "DELETE FROM cygx_activity_voice WHERE activity_id=?"
-	_, err = to.Raw(sql, activityId).Exec()
-	//插入新的音频
-	//if len(itemVoiceList) > 0 {
-	//	voiceId, err := to.InsertMulti(len(itemVoiceList), itemVoiceList)
-	//	if err != nil {
-	//		return
+	//sql = "DELETE FROM cygx_activity_voice WHERE activity_id=?"
+	//_, err = to.Raw(sql, activityId).Exec()
+	////插入新的音频
+	////if len(itemVoiceList) > 0 {
+	////	voiceId, err := to.InsertMulti(len(itemVoiceList), itemVoiceList)
+	////	if err != nil {
+	////		return
+	////	}
+	////}
+	//if itemVoice != nil {
+	//	if itemVoice.VoiceUrl != "" {
+	//		voiceId, err = to.Insert(itemVoice)
+	//		if err != nil {
+	//			return
+	//		}
+	//	}
+	//}
+	//
+	////视频处理
+	////删除旧的视频
+	//sql = "DELETE FROM cygx_activity_video WHERE activity_id=?"
+	//_, err = to.Raw(sql, activityId).Exec()
+	////插入新的音频
+	//if itemVideo != nil {
+	//	if itemVideo.VideoUrl != "" {
+	//		videoId, err = to.Insert(itemVideo)
+	//		if err != nil {
+	//			return
+	//		}
 	//	}
 	//}
-	if itemVoice != nil {
-		if itemVoice.VoiceUrl != "" {
-			voiceId, err = to.Insert(itemVoice)
-			if err != nil {
-				return
-			}
-		}
-	}
-
-	//视频处理
-	//删除旧的视频
-	sql = "DELETE FROM cygx_activity_video WHERE activity_id=?"
-	_, err = to.Raw(sql, activityId).Exec()
-	//插入新的音频
-	if itemVideo != nil {
-		if itemVideo.VideoUrl != "" {
-			videoId, err = to.Insert(itemVideo)
-			if err != nil {
-				return
-			}
-		}
-	}
 
 	{
 		//处理研选扣点子表
@@ -746,3 +748,13 @@ func UpdateCygxActivitySigninImg(signinImg string, activityId int) (err error) {
 	_, err = o.Raw(sql, signinImg, activityId).Exec()
 	return
 }
+
+type AliyunOcrTextActivityResp struct {
+	TitmeYMD string `description:"时间年月日"`
+	TitmeHM  string `description:"时间时分"`
+	Company  string `description:"公司名称"`
+}
+
+type AliyunOcrTextActivityListResp struct {
+	List []*AliyunOcrTextActivityResp
+}

+ 34 - 0
models/cygx/activity_video.go

@@ -3,6 +3,7 @@ package cygx
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
 )
 
 type CygxActivityVideo struct {
@@ -50,6 +51,31 @@ type CygxActivityVideoListRep struct {
 	List   []*CygxActivityVideoListResp
 }
 
+// 添加
+func AddCygxActivityVideo(item *CygxActivityVideo) (newId int64, err error) {
+	o := orm.NewOrm()
+	newId, err = o.Insert(item)
+	return
+}
+
+// 修改
+func UpdateCygxActivityVideo(item *CygxActivityVideo) (err error) {
+	to := orm.NewOrm()
+	updateParams := make(map[string]interface{})
+	updateParams["VideoName"] = item.VideoName
+	updateParams["VideoDuration"] = item.VideoDuration
+	updateParams["VideoUrl"] = item.VideoUrl
+	updateParams["ModifyDate"] = time.Now()
+	ptrStructOrTableName := "cygx_activity_video"
+	whereParam := map[string]interface{}{"activity_id": item.ActivityId}
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	return
+}
+
 // 获取数量
 func GetActivityVideoCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT
@@ -160,3 +186,11 @@ type ActivityVideoDefaultImgResp struct {
 	BackgroundImg string `description:"封面图片"`
 	ShareImg      string `description:"分享图"`
 }
+
+// 删除数据
+func DeleteCygxActivityVideo(activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_video WHERE  activity_id= ? `
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 43 - 0
models/cygx/activity_voice.go

@@ -27,6 +27,41 @@ type CygxActivityVoiceReq struct {
 	ShareImg        string `description:"分享图片"`
 }
 
+// 添加
+func AddCygxActivityVoice(item *CygxActivityVoice) (newId int64, err error) {
+	o := orm.NewOrm()
+	newId, err = o.Insert(item)
+	return
+}
+
+// 修改
+func UpdateCygxActivityVoice(item *CygxActivityVoice) (err error) {
+	to := orm.NewOrm()
+	updateParams := make(map[string]interface{})
+	updateParams["VoiceName"] = item.VoiceName
+	updateParams["VoicePlaySeconds"] = item.VoicePlaySeconds
+	updateParams["VoiceUrl"] = item.VoiceUrl
+	ptrStructOrTableName := "cygx_activity_voice"
+	whereParam := map[string]interface{}{"activity_id": item.ActivityId}
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	return
+}
+
+// 获取数量
+func GetCygxActivityVoiceCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_voice  WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
 // 列表
 func GetCygxActivityVoiceReqList(activityId int) (items []*CygxActivityVoiceReq, err error) {
 	o := orm.NewOrm()
@@ -56,3 +91,11 @@ func GetCygxActivityVoiceReqDetail(activityId int) (item *CygxActivityVoice, err
 	err = o.Raw(sql, activityId).QueryRow(&item)
 	return
 }
+
+// 删除数据
+func DeleteCygxActivityVoice(activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_voice WHERE  activity_id= ? `
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 23 - 0
models/cygx/aliyun_ocr_log.go

@@ -0,0 +1,23 @@
+package cygx
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type AliyunOcrImgUrlReq struct {
+	ImgUrl string `description:"图片地址"`
+}
+
+type AliyunOcrLog struct {
+	Id         int       `orm:"column(id);pk"`
+	ImgUrl     string    `description:"图片地址"`
+	Result     string    `description:"手机号"`
+	CreateTime time.Time `description:"创建时间"`
+}
+
+func AddAliyunOcrLog(item *AliyunOcrLog) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	_, err = o.Insert(item)
+	return
+}

+ 36 - 2
models/cygx/apply_record.go

@@ -30,9 +30,43 @@ type CygxApplyRecord struct {
 	RegisterPlatform         int    `description:"来源 1小程序,2:网页"`
 	InviteCompanySource      int    `description:"三方来源 ,1:弘则本身,2:络町"`
 	ApplicationSource        string `description:"申请来源"`
+	SourceId                 int    `description:"资源ID"`
+	Source                   string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+	Title                    string `description:"标题"`
 }
 
-func GetCygxApplyRecord(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxApplyRecord, err error) {
+type CygxApplyRecordResp struct {
+	ApplyRecordId            int    `orm:"column(apply_record_id);pk" description:"申请试用id"`
+	BusinessCardUrl          string `description:"名片地址"`
+	RealName                 string `description:"姓名"`
+	CompanyName              string `description:"公司名称"`
+	Mobile                   string `description:"手机号"`
+	CreateTime               string `description:"创建时间"`
+	ApplyMethod              int    `description:"1:已付费客户申请试用,2:非客户申请试用"`
+	Status                   int    `description:"0:未处理,1:已处理"`
+	DealTime                 string `description:"处理时间"`
+	Email                    string `description:"邮箱"`
+	SellerName               string `description:"销售"`
+	CompanyIdPay             int    `description:"1:为潜在客户,大于1现有客户"`
+	InviteeMobile            string `description:"邀请人手机号"`
+	InviteeCompany           string `description:"邀请人公司名称"`
+	InviteeCompanyId         string `description:"邀请人公司ID"`
+	ApplySource              string `description:"申请来源"`
+	InviteeEmail             string `description:"邀请人邮箱"`
+	IsInviteeComanyExistence bool   `description:"邀请公司是否还存在"`
+	InviteeCompanyNum        int    `description:"邀请公司是否还存在(辅助字段)"`
+	CompanyIdType            int    `description:"用户状态,1:潜在客户 、2:现有客户 、3:FICC客户 、4:现有客户(正式,无对应权限) 、5:现有客户(试用,无对应权限)  、6:现有客户(试用暂停) 、7:现有客户(冻结) 、8:现有客户(流失) "`
+	CompanyIdTypeName        string `description:"用户状态,1:潜在客户 、2:现有客户 、3:FICC客户 、4:现有客户(正式,无对应权限) 、5:现有客户(试用,无对应权限)  、6:现有客户(试用暂停) 、7:现有客户(冻结) 、8:现有客户(流失) "`
+	RegisterPlatform         int    `description:"来源 1小程序,2:网页"`
+	InviteCompanySource      int    `description:"三方来源 ,1:弘则本身,2:络町"`
+	ApplicationSource        string `description:"申请来源"`
+	SourceId                 int    `description:"资源ID"`
+	Source                   string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+	Title                    string `description:"标题"`
+	HttpUrl                  string `description:"跳转地址"`
+}
+
+func GetCygxApplyRecord(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxApplyRecordResp, err error) {
 	o := orm.NewOrm()
 
 	sql := ` SELECT DISTINCT a.*,i.invitee_mobile,i.invitee_company,i.invitee_email,invitee_company_id, GROUP_CONCAT(b.seller_name ORDER BY b.product_id ASC SEPARATOR '/') AS seller_name,c.email,(SELECT COUNT(1) FROM company WHERE company_id =invitee_company_id ) as invitee_company_num
@@ -71,7 +105,7 @@ GROUP_CONCAT(b.seller_name ORDER BY b.product_id ASC SEPARATOR '/') AS seller_na
 }
 
 type CygxApplyRecordListResp struct {
-	List   []*CygxApplyRecord
+	List   []*CygxApplyRecordResp
 	Paging *paging.PagingItem `description:"分页数据"`
 }
 

+ 1 - 1
models/cygx/report_article.go

@@ -1272,7 +1272,7 @@ type CygxCelueArticleHistoryRecord struct {
 
 func GetCygxCelueArticleHistoryRecordPvAll(articleIds string) (item []*ArticleHistoryRep, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_article_history_record_all as  h WHERE article_id IN ( ` + articleIds + ` )  AND   h.is_del = 0   AND h.platfor = 2 `
+	sql := `SELECT * FROM cygx_article_history_record_all as  h WHERE article_id IN ( ` + articleIds + ` )  AND   h.is_del = 0  AND h.company_id != 16   AND h.platfor = 2  `
 	sql += ` ORDER BY create_time DESC  `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return

+ 8 - 0
models/db.go

@@ -87,6 +87,13 @@ func init() {
 	fms_datadb, _ := orm.GetDB("fms")
 	fms_datadb.SetConnMaxLifetime(10 * time.Minute)
 
+	_ = orm.RegisterDataBase("hz_cygx", "mysql", utils.MYSQL_URL_CYGX)
+	orm.SetMaxIdleConns("hz_cygx", 50)
+	orm.SetMaxOpenConns("hz_cygx", 100)
+
+	cygx_db, _ := orm.GetDB("hz_cygx")
+	cygx_db.SetConnMaxLifetime(10 * time.Minute)
+
 	orm.Debug = true
 	orm.DebugLog = orm.NewLog(utils.Binlog)
 
@@ -430,6 +437,7 @@ func initCygx() {
 		new(cygx.CygxActivityPointsBill),
 		new(cygx.CygxActivityPointsCompany),
 		new(cygx.CygxTag),
+		new(cygx.AliyunOcrLog),
 	)
 }
 

+ 9 - 0
routers/commentsRouter.go

@@ -538,6 +538,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivityCoAntroller"],
+        beego.ControllerComments{
+            Method: "ImgToText",
+            Router: `/activity/imgToText`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:ActivityCoAntroller"],
         beego.ControllerComments{
             Method: "ActivityList",

+ 80 - 0
services/aliyun_ocr.go

@@ -0,0 +1,80 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hz_crm_api/models/cygx"
+	"io/ioutil"
+	"net/http"
+	"strings"
+	"time"
+)
+
+var (
+	AliyunAppCode = "22553c4ba74545568aba70ac6cfd441d" // AppCode
+)
+
+type AliOcrByImageToTextResp struct {
+	RequestID string `json:"request_id"`
+	Ret       []struct {
+		Rect struct {
+			Angle  int64 `json:"angle"`
+			Height int64 `json:"height"`
+			Left   int64 `json:"left"`
+			Top    int64 `json:"top"`
+			Width  int64 `json:"width"`
+		} `json:"rect"`
+		Word string `json:"word"`
+	} `json:"ret"`
+	Success bool `json:"success"`
+}
+
+//func init() {
+//	AliOcrByImageToText("https://hzstatic.hzinsights.com/cygx/config/a2.jpg")
+//}
+
+// 阿里云OCR将图片转文字
+func AliOcrByImageToText(imageurl string) (item *AliOcrByImageToTextResp, err error) {
+	url := "https://tysbgpu.market.alicloudapi.com/api/predict/ocr_general"
+	method := "POST"
+
+	payload := strings.NewReader(`{
+    "image":"` + imageurl + `"
+}`)
+
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	req.Header.Add("Authorization", "APPCODE "+AliyunAppCode)
+	req.Header.Add("Content-Type", "application/json")
+
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	defer res.Body.Close()
+
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	err = json.Unmarshal(body, &item)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	logItem := new(cygx.AliyunOcrLog)
+	logItem.ImgUrl = imageurl
+	logItem.Result = string(body)
+	logItem.CreateTime = time.Now()
+	err = cygx.AddAliyunOcrLog(logItem)
+	return
+}

+ 251 - 0
services/cygx/activity_ocr.go

@@ -0,0 +1,251 @@
+package cygx
+
+import (
+	"errors"
+	"hongze/hz_crm_api/models/cygx"
+	"hongze/hz_crm_api/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+//处理OCR识别图片建会的逻辑
+
+//星期日 Sunday=Sun. 读音:英[ˈsʌndeɪ]美[ˈsʌnˌdeɪ]
+//
+//星期一 Monday=Mon. 读音:英[ˈmʌndeɪ]美[ˈmʌndeɪ]
+//
+//星期二 Tuesday=Tues. 读音:英[ˈtju:zdeɪ]美[ˈtu:zdeɪ]
+//
+//星期三 Wednesday=Wed. 读音:英[ˈwenzdeɪ]美[ˈwɛnzdi, -ˌde]
+//
+//星期四 Thursday=Thur./Thurs. 读音:英[ˈθɜ:zdeɪ]美[ˈθɜ:rzdeɪ]
+//
+//星期五 Friday=Fri. 读音:英[ˈfraɪdeɪ]美[ˈfraɪˌdeɪ]
+//
+//星期六 Saturday=Sat. 读音: 英[ˈsætədeɪ]美[ˈsætərdeɪ]
+
+// 处理年月日格式
+func ConvertActivityTitmeYMD(TitmeYMD string) (titmeYMDNew string) {
+	titmeYMDNew = TitmeYMD
+	titmeYMDNew = strings.Replace(titmeYMDNew, "/", "月", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "SUN", "日(周日)", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "MON", "日(周一)", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "TUE", "日(周二)", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "WED", "日(周三)", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "THU", "日(周四)", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "FRI", "日(周五)", -1)
+	//titmeYMDNew = strings.Replace(titmeYMDNew, "SAT", "日(周六)", -1)
+
+	titmeYMDNew = strings.Replace(titmeYMDNew, "SUN", "日", -1)
+	titmeYMDNew = strings.Replace(titmeYMDNew, "MON", "日", -1)
+	titmeYMDNew = strings.Replace(titmeYMDNew, "TUE", "日", -1)
+	titmeYMDNew = strings.Replace(titmeYMDNew, "WED", "日", -1)
+	titmeYMDNew = strings.Replace(titmeYMDNew, "THU", "日", -1)
+	titmeYMDNew = strings.Replace(titmeYMDNew, "FRI", "日", -1)
+	titmeYMDNew = strings.Replace(titmeYMDNew, "SAT", "日", -1)
+	titmeYMDNew = strconv.Itoa(time.Now().Year()) + "年" + titmeYMDNew
+	return
+}
+
+// 处理时分PM格式
+func ConvertActivityTitmeHM(titmeHM string) (titmeHMNew string) {
+	titmeHMNew = titmeHM
+	//var hNum int
+	var amOrPm string
+	if strings.Contains(titmeHM, "PM") {
+		//hNum = 12
+		amOrPm = "PM"
+	} else {
+		amOrPm = "AM"
+	}
+	titmeHM = strings.Replace(titmeHM, "AM", "", -1)
+	titmeHM = strings.Replace(titmeHM, "PM", "", -1)
+	sliceHm := strings.Split(titmeHM, ":")
+	if len(sliceHm) != 2 {
+		return
+	}
+	hourNum, _ := strconv.Atoi(sliceHm[0])
+	minute := sliceHm[1]
+	titmeHMNew = strconv.Itoa(hourNum) + ":" + minute + " " + amOrPm
+	return
+}
+
+// 活动内容模版
+var ActivityOcrTemplate = "<p>【买方研选-小范围公司线上交流】{{COMPANY}}</p><p>时间:{{TIME}}</p><p>嘉宾:IR</p><p>主持人:IR</p><p>链接参会:(会前一天下午更新)</p><p>备注:</p><p>1、请先报名,我们将于会议前一天提供【Webex】入会链接(可电话拨入or网络端参会);</p><p>2、会议语言:{{LANGUAGE}};</p><p>3、本场会议报名截止时间为会议开始前一天下午3点半;</p><p>4、本次会议扣0.5次研选服务点。</p>"
+
+func MakeActivityReqText(list []*cygx.AliyunOcrTextActivityResp) (req cygx.ActivityRep, err error, errMsg string) {
+	for _, v := range list {
+		ActivityOcrTmp := ActivityOcrTemplate
+		sliceCompany := strings.Split(v.Company, "(")
+		company := sliceCompany[0]
+		ActivityOcrTmp = strings.Replace(ActivityOcrTmp, "{{COMPANY}}", company, -1)
+		v.TitmeYMD = strings.Replace(v.TitmeYMD, "年", "-", -1)
+		v.TitmeYMD = strings.Replace(v.TitmeYMD, "月", "-", -1)
+		v.TitmeYMD = strings.Replace(v.TitmeYMD, "日", "", -1)
+		weeknum := utils.StrDateTimeToWeek(v.TitmeYMD + " 00:00:00")
+
+		havePm := strings.Contains(v.TitmeHM, "PM")
+		var activityTime string
+		activityTime = strings.Replace(v.TitmeHM, " ", "", -1)
+		activityTime = strings.Replace(activityTime, "AM", "", -1)
+		activityTime = strings.Replace(activityTime, "PM", "", -1)
+
+		activityTime = v.TitmeYMD + " " + activityTime + ":00"
+		resultTime := utils.StrTimeToTime(activityTime)
+		var amOrPm string
+		if havePm {
+			//前端传过来的是 2:00PM 这里转成 14:00 PM
+			slicePm := strings.Split(v.TitmeHM, ":")
+			for sk, sv := range slicePm {
+				// 如果是中午 12:30 PM 就不做任何处理
+				if sk == 0 && sv != "12" {
+					resultTime = resultTime.Add(12 * time.Hour)
+					activityTime = resultTime.Format(utils.FormatDateTime)
+				}
+			}
+			amOrPm = "PM"
+		} else {
+			amOrPm = "AM"
+		}
+		var condition string
+		var pars []interface{}
+		condition = " AND activity_type_id = 3 AND  activity_time = ? AND temporary_label = ? "
+		pars = append(pars, activityTime, company)
+		total, e := cygx.GetActivityCount(condition, pars)
+		if e != nil {
+			err = errors.New("GetActivityCount,Err" + e.Error())
+			return
+		}
+
+		if total > 0 {
+			errMsg = "相同时段已存在对应活动"
+			return
+		}
+		ActivityOcrTmp = strings.Replace(ActivityOcrTmp, "{{TIME}}", v.TitmeYMD+"("+weeknum+")"+resultTime.Format(utils.FormatTimeHm)+amOrPm, -1)
+		if !utils.CheckStrHaveLetter(company) {
+			ActivityOcrTmp = strings.Replace(ActivityOcrTmp, "{{LANGUAGE}}", "中文", -1)
+		} else {
+			ActivityOcrTmp = strings.Replace(ActivityOcrTmp, "{{LANGUAGE}}", "英文", -1)
+		}
+		req.Body += ActivityOcrTmp + "<hr>" //分隔符标签
+		label := new(cygx.ActivityGroupIndustrialRep)
+		label.TemporaryLabel = company
+		req.List = append(req.List, label)
+	}
+	//初始化相关活动参数信息
+	req.Body = strings.TrimRight(req.Body, "<hr>")
+	req.DoType = 1
+	req.ActivityTypeId = 3
+	req.PermissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN
+	req.CustomerTypeIds = "1,2,8,10,3,9,5,6,7"
+	req.IsAllCustomerType = 1
+	req.LimitPeopleNum = 10
+	req.LabelType = 1
+	req.VisibleRange = 2
+	req.IsResearchPoints = 1
+	req.IsNeedEmail = 1
+	// 研选点数
+	pointsSet := new(cygx.CygxActivityPointsSetRsq)
+	pointsSet.PointsObject = "1"
+	pointsSet.UserPointsNum = "0.5"
+	pointsSet.PointsType = "1"
+	pointsSet.CompanyPointsNum = "0"
+	pointsSet.CancelDeadlineType = "1"
+	req.PointsSet = pointsSet
+	return
+}
+
+// 代码冲突了先放这里
+func UpdateActivityVideoAndVoice(activityInfo *cygx.ActivityDetail, itemVoice *cygx.CygxActivityVoice, itemVideo *cygx.CygxActivityVideo) (err error) {
+	if activityInfo.ActiveState != 3 {
+		return // 没有结束的活动不会上传音视频
+	}
+	activityId := activityInfo.ActivityId
+	var condition string
+	var pars []interface{}
+	//处理音频
+	if itemVoice.ActivityId > 0 {
+		condition = " AND activity_id = ? "
+		pars = append(pars, activityId)
+		total, e := cygx.GetCygxActivityVoiceCount(condition, pars)
+		if e != nil {
+			err = errors.New("GetCygxActivityVoiceCount" + e.Error())
+			return
+		}
+		//如果等于0就新增,反之就修改
+		if total == 0 {
+			newId, e := cygx.AddCygxActivityVoice(itemVoice)
+			if e != nil {
+				err = errors.New("GetCygxActivityVoiceCount" + e.Error())
+				return
+			}
+			go UpdateResourceData(int(newId), utils.CYGX_OBJ_ACTIVITYVOICE, "add", activityInfo.ActivityTime) // 把活动音频的数据添加到 cygx_resource_data 表
+		} else {
+			e = cygx.UpdateCygxActivityVoice(itemVoice)
+			if e != nil {
+				err = errors.New("UpdateCygxActivityVoice" + e.Error())
+				return
+			}
+		}
+	}
+
+	//处理视频
+	if itemVideo.ActivityId > 0 {
+		condition = " AND art.activity_id = ? "
+		pars = append(pars, activityId)
+		total, e := cygx.GetActivityVideoCount(condition, pars)
+		if e != nil {
+			err = errors.New("GetActivityVideoCount" + e.Error())
+			return
+		}
+		//如果等于0就新增,反之就修改
+		if total == 0 {
+			newId, e := cygx.AddCygxActivityVideo(itemVideo)
+			if e != nil {
+				err = errors.New("AddCygxActivityVideo" + e.Error())
+				return
+			}
+			go UpdateResourceData(int(newId), utils.CYGX_OBJ_ACTIVITYVIDEO, "add", activityInfo.ActivityTime) // 把活动视频的数据添加到 cygx_resource_data 表
+		} else {
+			e = cygx.UpdateCygxActivityVideo(itemVideo)
+			if e != nil {
+				err = errors.New("UpdateCygxActivityVideo" + e.Error())
+				return
+			}
+		}
+	}
+
+	//如果两个都为空,就判断之前是否上传过
+	if itemVoice.ActivityId == 0 && itemVideo.ActivityId == 0 {
+		voiceDetail, e := cygx.GetCygxActivityVoiceReqDetail(activityId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxActivityVoiceReqDetail" + e.Error())
+			return
+		}
+		if voiceDetail != nil {
+			e = cygx.DeleteCygxActivityVoice(activityId)
+			if e != nil {
+				err = errors.New("DeleteCygxActivityVoice" + e.Error())
+				return
+			}
+			go UpdateResourceData(voiceDetail.ActivityVoiceId, utils.CYGX_OBJ_ACTIVITYVOICE, "delete", time.Now().Format(utils.FormatDateTime)) // 把活动音频在 cygx_resource_data 表中删除
+		}
+
+		//删除原有的视频数据
+		videoDetail, e := cygx.GetCygxActivityVideoReqDetail(activityId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxActivityVideoReqDetail" + e.Error())
+			return
+		}
+		if videoDetail != nil {
+			e = cygx.DeleteCygxActivityVideo(activityId)
+			if e != nil {
+				err = errors.New("DeleteCygxActivityVideo" + e.Error())
+				return
+			}
+			go UpdateResourceData(videoDetail.VideoId, utils.CYGX_OBJ_ACTIVITYVIDEO, "delete", time.Now().Format(utils.FormatDateTime)) // 把活动视频在 cygx_resource_data 表中删除
+		}
+	}
+	return
+}

+ 41 - 0
services/cygx/admin_power.go

@@ -2,9 +2,12 @@ package cygx
 
 import (
 	"errors"
+	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/models/system"
+	"hongze/hz_crm_api/utils"
 	"strconv"
+	"strings"
 )
 
 // 获取这个销售所能查看的手机号权限
@@ -29,3 +32,41 @@ func GetAdminLookUserMobile(adminInfo *system.Admin) (mapMobile map[string]strin
 	mapMobile = mapUserMobile
 	return
 }
+
+// 获取这个销售所能查看的手机号权限
+func GetAdminLookUserCompanyIds(sysUser *system.Admin) (companyIds []int, err error) {
+	//如果不是管理员,权益管理员那么就对可见权限范围做处理
+	adminIds := make([]int, 0)
+	if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
+		if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+			//如果是权益的组长就获取下面的组员
+			adminList, e := system.GetAdminListByGroupId(sysUser.GroupId)
+			if e != nil {
+				err = errors.New("GetAdminListByGroupId , Err: " + e.Error())
+				return
+			}
+			for _, v := range adminList {
+				adminIds = append(adminIds, v.AdminId)
+			}
+		} else {
+			adminIds = append(adminIds, sysUser.AdminId)
+		}
+		var adminIdGroup string
+		for _, v := range adminIds {
+			adminIdGroup += strconv.Itoa(v) + ","
+		}
+		adminIdGroup = strings.TrimRight(adminIdGroup, ",")
+		companyProductList, e := company.GetCompanyProductsBySellerId(adminIdGroup)
+		if e != nil {
+			err = errors.New("GetCompanyProductsBySellerId , Err: " + e.Error())
+			return
+		}
+
+		for _, v := range companyProductList {
+			companyIds = append(companyIds, v.CompanyId)
+		}
+		companyIds = append(companyIds, 1) //添加潜在客户
+	}
+
+	return
+}

+ 12 - 0
utils/common.go

@@ -2087,3 +2087,15 @@ func FormatTableDataShowValue(x float64) (res string) {
 	}
 	return
 }
+
+// 校验字符是否包含字母
+func CheckStrHaveLetter(checkString string) (checked bool) {
+	allLetterDigit := []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
+	for _, v := range allLetterDigit {
+		if strings.Contains(checkString, v) {
+			checked = true
+			return true
+		}
+	}
+	return
+}

+ 5 - 0
utils/config.go

@@ -18,6 +18,7 @@ var (
 	MYSQL_URL_COMEIN_DATA  string // 路演记录数据库
 	MYSQL_URL_WEEKLY_TRIAL string // ETA试用
 	MYSQL_URL_FMS          string // 财务系统
+	MYSQL_URL_CYGX         string // 查研观向
 
 	REDIS_CACHE string       //缓存地址
 	Rc          *cache.Cache //redis缓存
@@ -60,6 +61,7 @@ var (
 	WxMsgTemplateIdWithRoadshowPending       string //路演->研究员收到待处理的申请
 	WxMsgTemplateIdWithRoadshowDetailResult  string //路演->销售收到处理结果
 	WxMsgTemplateIdWithRoadshowDeleteNotice  string //路演->研究员收到活动删除通知
+	CYGX_WEB_URL                             string //查研观向web端网址
 
 	WxMsgTemplateIdWithYbCommunityQuestion string // 研报小程序->问答社区回复通知
 	WxMsgTemplateIdWithSealApplyFinished   string // 用印申请-已签回通知
@@ -194,6 +196,7 @@ func init() {
 	MYSQL_URL_COMEIN_DATA = config["mysql_url_comein_data"]
 	MYSQL_URL_WEEKLY_TRIAL = config["mysql_url_weekly_trial"]
 	MYSQL_URL_FMS = config["mysql_url_fms"]
+	MYSQL_URL_CYGX = config["mysql_url_cygx"]
 
 	REDIS_CACHE = config["beego_cache"]
 	if len(REDIS_CACHE) <= 0 {
@@ -242,6 +245,7 @@ ZwIDAQAB
 		IndexName = "cygx_article_v03_23"
 		IndexNameArticleHistory = "cygx_article_history_v07_08"
 		IndexNameComprehensive = "cygx_comprehensive"
+		CYGX_WEB_URL = "https://web.hzinsights.com"
 		TemplateCompanyApplyRedirectUrl = "https://ficc.hzinsights.com/approval/approval/list"
 
 		//同花顺正式地址
@@ -281,6 +285,7 @@ ZwIDAQAB
 		IndexName = "cygx_article_v1"
 		IndexNameArticleHistory = "cygx_article_history_v1"
 		IndexNameComprehensive = "cygx_comprehensive_test"
+		CYGX_WEB_URL = "https://clpttest.hzinsights.com"
 
 		//同花顺测试地址
 		THS_SendUrl = `https://mtest.10jqka.com.cn/gateway/ps/syncNews`