calendar.go 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045
  1. package rs
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "github.com/rdlucklib/rdluck_tools/http"
  7. "hongze/hongze_mobile_admin/models/roadshow"
  8. "hongze/hongze_mobile_admin/models/tables/admin"
  9. "hongze/hongze_mobile_admin/services/alarm_msg"
  10. "hongze/hongze_mobile_admin/utils"
  11. "io/ioutil"
  12. netHttp "net/http"
  13. "net/url"
  14. "strconv"
  15. "strings"
  16. "time"
  17. )
  18. // getAccessToken token内部请求接口
  19. func getAccessToken() (tokenData roadshow.TokenData, err error) {
  20. defer func() {
  21. if err != nil {
  22. //go utils.SendEmail(utils.APPNAME+"更新上海的token失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  23. go alarm_msg.SendAlarmMsg("更新上海的token失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  24. }
  25. }()
  26. getUrl := fmt.Sprintf(utils.CRM_OPEN_API_URL+"/v1/auth/getAccessToken?app_key=%s&app_secret=%s", utils.CRM_OPEN_API_APP_KEY, utils.CRM_OPEN_API_APP_SECRET)
  27. body, err := http.Get(getUrl)
  28. if err != nil {
  29. err = errors.New("NewRequest Err:" + err.Error())
  30. return
  31. }
  32. var tokenResp roadshow.GetTokenResp
  33. err = json.Unmarshal(body, &tokenResp)
  34. if err != nil {
  35. err = errors.New("Unmarshal Err:" + err.Error())
  36. return
  37. }
  38. if tokenResp.Code != 1 {
  39. err = errors.New("getAccessToken err:" + tokenResp.Msg)
  40. return
  41. }
  42. tokenData = tokenResp.TokenData
  43. return
  44. }
  45. // refreshAccessToken 强制刷新获取accessToken
  46. func refreshAccessToken() (token string, err error) {
  47. defer func() {
  48. if err != nil {
  49. //go utils.SendEmail(utils.APPNAME+"获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  50. go alarm_msg.SendAlarmMsg("获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  51. }
  52. }()
  53. tokenInfo, tmpErr := getAccessToken()
  54. if tmpErr != nil {
  55. err = tmpErr
  56. return
  57. }
  58. token = tokenInfo.AccessToken
  59. //token存入redis
  60. err = utils.Rc.Put("SH_ACCESS_TOKEN", token, time.Duration(tokenInfo.ExpireIn-600)*time.Second)
  61. if err != nil {
  62. //go utils.SendEmail(utils.APPNAME+"获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05"), "上海token存入redis失败:", utils.EmailSendToUsers)
  63. go alarm_msg.SendAlarmMsg("获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:上海token存入redis失败", 3)
  64. }
  65. return
  66. }
  67. // getCalendarFrom 获取上海方的路演活动列表
  68. func getCalendarFrom(userPhone, startDate, endDate string) (list []roadshow.UserCalendar, err error) {
  69. exUrl := utils.CRM_OPEN_API_URL + "/v1/calendar/userCalendarList"
  70. form := url.Values{
  71. "user_phone": {userPhone},
  72. "start_time": {startDate},
  73. "end_time": {endDate},
  74. }
  75. body, err := getCurl(exUrl, form, 0)
  76. if err != nil {
  77. err = errors.New("NewRequest Err:" + err.Error())
  78. return
  79. }
  80. var userCalendarList roadshow.UserCalendarList
  81. err = json.Unmarshal(body, &userCalendarList)
  82. if err != nil {
  83. err = errors.New("Unmarshal Err:" + err.Error())
  84. return
  85. }
  86. list = userCalendarList.Data
  87. //fmt.Println(response)
  88. //userCalendarList := response.([]interface{})
  89. //
  90. //for _, userCalendar := range userCalendarList {
  91. // fmt.Println(userCalendar)
  92. // fmt.Printf("type :%T;\n", userCalendar)
  93. // //list = append(list, userCalendar.(roadshow.UserCalendar))
  94. //}
  95. //fmt.Println(userCalendarList)
  96. //list = userCalendarList
  97. return
  98. }
  99. // creatSHCalendar 新增上海日历活动
  100. func creatSHCalendar(userPhone, toUserPhone, content, startTime, endTime string, calendarType int8, selfCalendarId int) (err error, errMsg string) {
  101. logMsg := ``
  102. defer func() {
  103. if err != nil {
  104. if logMsg != `` {
  105. errMsg = logMsg
  106. }
  107. }
  108. }()
  109. finalUrl := utils.CRM_OPEN_API_URL + "/v1/Calendar/create"
  110. form := url.Values{
  111. "user_phone": {userPhone},
  112. "to_user_phone": {toUserPhone},
  113. "content": {content},
  114. "start_time": {startTime},
  115. "end_time": {endTime},
  116. }
  117. //发送创建请求
  118. body, err, logMsg := postCurl(finalUrl, form, 0)
  119. if err != nil {
  120. err = errors.New("NewRequest Err:" + err.Error())
  121. return
  122. }
  123. var creatSHCalendarResp roadshow.CreatSHCalendarResp
  124. err = json.Unmarshal(body, &creatSHCalendarResp)
  125. if err != nil {
  126. err = errors.New("Unmarshal Err:" + err.Error())
  127. return
  128. }
  129. calendar := creatSHCalendarResp.Data
  130. //上海系统id
  131. sThirdId := calendar.CalendarID
  132. thirdId, err := strconv.Atoi(sThirdId)
  133. if err != nil {
  134. err = errors.New("string to int Err:" + err.Error())
  135. return
  136. }
  137. // 添加自系统与上海系统的路演关系
  138. relationItem := roadshow.RsCalendarRelation{
  139. UserPhone: userPhone,
  140. CalendarType: calendarType,
  141. SelfCalendarId: selfCalendarId,
  142. ThirdCalendarId: thirdId,
  143. Title: content,
  144. ResearcherMobile: toUserPhone,
  145. ModifyTime: time.Now(),
  146. CreateTime: time.Now(),
  147. }
  148. _, err = roadshow.AddRsCalendarRelation(&relationItem)
  149. if err != nil {
  150. err = errors.New("AddRsCalendarRelation Err:" + err.Error())
  151. fmt.Println(err)
  152. return
  153. }
  154. return
  155. }
  156. // updateSHCalendar 内部函数,只用于发送修改上海日历的http请求
  157. func updateSHCalendar(thirdCalendarId, researcherMobile, content, startTime, endTime string) (calendarResp roadshow.CreatSHCalendarResp, err error) {
  158. finalUrl := utils.CRM_OPEN_API_URL + "/v1/Calendar/update"
  159. form := url.Values{
  160. "calendar_id": {thirdCalendarId},
  161. "to_user_phone": {researcherMobile},
  162. "content": {content},
  163. "start_time": {startTime},
  164. "end_time": {endTime},
  165. }
  166. //发送创建请求
  167. _, err, _ = postCurl(finalUrl, form, 0)
  168. if err != nil {
  169. err = errors.New("NewRequest Err:" + err.Error())
  170. return
  171. }
  172. return
  173. }
  174. // deleteSHCalendar 删除上海方的路演
  175. func deleteSHCalendar(userPhone string, calendarId int) (err error) {
  176. finalUrl := utils.CRM_OPEN_API_URL + "/v1/Calendar/delete"
  177. form := url.Values{
  178. "user_phone": {userPhone},
  179. "calendar_id": {fmt.Sprintf("%v", calendarId)},
  180. }
  181. //发送创建请求
  182. _, err, _ = postCurl(finalUrl, form, 0)
  183. if err != nil {
  184. err = errors.New("NewRequest Err:" + err.Error())
  185. return
  186. }
  187. return
  188. }
  189. // ShResponse 上海数据返回结构体
  190. type ShResponse struct {
  191. Code int `json:"code" description:"1:正常返回;4001:token失效"`
  192. Msg string `json:"msg" description:"文字描述"`
  193. Time int `json:"time" description:"时间戳"`
  194. Data interface{} `json:"data" description:"业务数据"`
  195. }
  196. // getCurl get请求上海接口
  197. func getCurl(urlStr string, params url.Values, num int) (body []byte, err error) {
  198. defer func() {
  199. if err != nil {
  200. //go utils.SendEmail(utils.APPNAME+"get请求上海接口失败:"+time.Now().Format("2006-01-02 15:04:05"), "get请求上海接口失败:"+err.Error(), utils.EmailSendToUsers)
  201. go alarm_msg.SendAlarmMsg("get请求上海接口失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:get请求上海接口失败", 3)
  202. }
  203. }()
  204. token, err := GetAccessToken(false)
  205. if err != nil {
  206. return
  207. }
  208. params.Add("access_token", token)
  209. getUrl := urlStr + "?" + params.Encode()
  210. body, err = http.Get(getUrl)
  211. if err != nil {
  212. utils.FileLog.Info(fmt.Sprint("get Err:", err.Error(), ";url:", getUrl, ";params:", params.Encode(), ";response:", string(body)))
  213. err = errors.New("NewRequest Err:" + err.Error())
  214. return
  215. }
  216. var response ShResponse
  217. err = json.Unmarshal(body, &response)
  218. if err != nil {
  219. utils.FileLog.Info(fmt.Sprint("get Err:", err.Error(), ";url:", getUrl, ";params:", params.Encode(), ";response:", string(body)))
  220. err = errors.New("Unmarshal Err:" + err.Error())
  221. return
  222. }
  223. //如果是token失效,同时只是第一次请求(没有尝试强制刷新token,那么重新请求)
  224. if response.Code == 4001 && num <= 0 {
  225. utils.FileLog.Info(fmt.Sprint("get data err", ";url:", getUrl, ";params:", params.Encode(), ";response:", string(body)))
  226. //token失效
  227. _, tmpErr := refreshAccessToken()
  228. if tmpErr != nil {
  229. err = tmpErr
  230. }
  231. num++
  232. params.Del("access_token")
  233. return getCurl(urlStr, params, num)
  234. } else if response.Code != 1 {
  235. utils.FileLog.Info(fmt.Sprint("get data err", ";url:", getUrl, ";params:", params.Encode(), ";response:", string(body)))
  236. err = errors.New(response.Msg)
  237. return
  238. }
  239. return
  240. }
  241. // postCurl post请求上海接口
  242. func postCurl(urlStr string, form url.Values, num int) (body []byte, err error, errMsg string) {
  243. logMsg := ``
  244. defer func() {
  245. if err != nil {
  246. if logMsg != `` {
  247. errMsg = logMsg
  248. //go utils.SendEmail(utils.APPNAME+"post请求上海接口失败:"+time.Now().Format("2006-01-02 15:04:05"), "post请求上海接口失败:"+errMsg, utils.EmailSendToUsers)
  249. go alarm_msg.SendAlarmMsg("post请求上海接口失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+errMsg, 3)
  250. }
  251. }
  252. }()
  253. token, err := GetAccessToken(false)
  254. if err != nil {
  255. return
  256. }
  257. finalUrl := urlStr + "?access_token=" + token
  258. //发送创建请求
  259. resp, err := netHttp.PostForm(finalUrl, form)
  260. if err != nil {
  261. err = errors.New("NewRequest Err:" + err.Error())
  262. return
  263. }
  264. defer resp.Body.Close()
  265. //解析resp并且存入关联表
  266. body, err = ioutil.ReadAll(resp.Body)
  267. if err != nil {
  268. logMsg = fmt.Sprint("post err; request:", form.Encode(), "; errMsg:", err.Error())
  269. utils.FileLog.Info(logMsg)
  270. return
  271. }
  272. logMsg = fmt.Sprint("post request:", form.Encode(), "; response:", string(body))
  273. utils.FileLog.Info(logMsg)
  274. var response ShResponse
  275. err = json.Unmarshal(body, &response)
  276. if err != nil {
  277. utils.FileLog.Info("post Err:", err.Error(), ";url:", finalUrl, ";params:", form.Encode(), ";response:", string(body))
  278. err = errors.New("Unmarshal Err:" + err.Error())
  279. return
  280. }
  281. utils.FileLog.Info(fmt.Sprint("post request url:", finalUrl, ";params:", form.Encode(), ";response:", string(body)))
  282. //如果是token失效,同时只是第一次请求(没有尝试强制刷新token,那么重新请求)
  283. if response.Code == 4001 && num <= 0 {
  284. //token失效
  285. _, tmpErr := refreshAccessToken()
  286. if tmpErr != nil {
  287. err = tmpErr
  288. }
  289. num++
  290. return postCurl(urlStr, form, num)
  291. } else if response.Code != 1 {
  292. utils.FileLog.Info(fmt.Sprint("post data err", ";url:", finalUrl, ";params:", form.Encode(), ";response:", string(body)))
  293. err = errors.New(response.Msg)
  294. return
  295. }
  296. return
  297. }
  298. // GetAccessToken 获取accessToken
  299. func GetAccessToken(isRefresh bool) (token string, err error) {
  300. defer func() {
  301. if err != nil {
  302. //go utils.SendEmail(utils.APPNAME+"获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  303. go alarm_msg.SendAlarmMsg("获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  304. }
  305. }()
  306. token, redisErr := utils.Rc.RedisString("SH_ACCESS_TOKEN")
  307. //如果从redis中accessToken 获取失败或者token为空了,再或者需要强制刷新了,那么重新获取accessToken
  308. if redisErr != nil || token == `` || isRefresh {
  309. return refreshAccessToken()
  310. }
  311. return
  312. }
  313. // CalendarToSH 创建活动时同步上海的前置函数
  314. func CalendarToSH(rsCalendar roadshow.RsCalendar, researcher roadshow.RsCalendarResearcher) {
  315. var err error
  316. errMsg := ``
  317. defer func() {
  318. if err != nil {
  319. errMsg = err.Error() + ";" + errMsg
  320. //go utils.SendEmail(utils.APPNAME+"新建上海研究员日历失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  321. go alarm_msg.SendAlarmMsg("新建上海研究员日历失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  322. }
  323. }()
  324. //redis获取创建者及研究员信息
  325. userInfo, err := getAdminInfoById(rsCalendar.SysUserId)
  326. if err != nil {
  327. utils.FileLog.Info("getAdminInfoById err: " + err.Error())
  328. return
  329. }
  330. researcherInfo, err := getAdminInfoById(researcher.ResearcherId)
  331. if err != nil {
  332. utils.FileLog.Info("getAdminInfoById err: " + err.Error())
  333. return
  334. }
  335. sTime, _ := time.ParseInLocation(utils.FormatDateTime, researcher.StartDate+" "+researcher.StartTime, time.Now().Location())
  336. startTime := sTime.Format("2006-01-02 15:04")
  337. eTime, _ := time.ParseInLocation(utils.FormatDateTime, researcher.EndDate+" "+researcher.EndTime, time.Now().Location())
  338. endTime := eTime.Format("2006-01-02 15:04")
  339. // 创建上海路演日程
  340. err, errMsg = creatSHCalendar(userInfo.Mobile, researcherInfo.Mobile, rsCalendar.Title, startTime, endTime, 1, researcher.RsCalendarResearcherId)
  341. if err != nil {
  342. utils.FileLog.Info("CreatSHCalendar err: " + err.Error())
  343. fmt.Println(err)
  344. return
  345. }
  346. // 更新路演与研究员关系表的同步字段
  347. whereParams := make(map[string]interface{})
  348. updateParams := make(map[string]interface{})
  349. whereParams["rs_calendar_researcher_id"] = researcher.RsCalendarResearcherId
  350. updateParams["is_synced"] = 1
  351. updateParams["modify_time"] = time.Now()
  352. err = roadshow.UpdateCalendarResearcher(whereParams, updateParams)
  353. if err != nil {
  354. utils.FileLog.Info("UpdateCalendarResearcher err: " + err.Error())
  355. fmt.Println("UpdateCalendarResearcher err: " + err.Error())
  356. return
  357. }
  358. // 更新路演的同步字段
  359. calWhereParams := make(map[string]interface{})
  360. calWhereParams["rs_calendar_id"] = rsCalendar.RsCalendarId
  361. err = roadshow.UpdateRsCalendar(calWhereParams, updateParams)
  362. if err != nil {
  363. utils.FileLog.Info("UpdateRsCalendar err: " + err.Error())
  364. fmt.Println("UpdateRsCalendar err: " + err.Error())
  365. return
  366. }
  367. }
  368. // MatterToSH 创建事项时同步上海的前置函数
  369. func MatterToSH(matter roadshow.RsMatters) (err error) {
  370. errMsg := ``
  371. defer func() {
  372. if err != nil {
  373. errMsg = err.Error() + ";" + errMsg
  374. //go utils.SendEmail(utils.APPNAME+"新建上海研究员事项失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  375. go alarm_msg.SendAlarmMsg("新建上海研究员事项失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  376. }
  377. }()
  378. //获取研究员信息
  379. researcherInfo, err := getAdminInfoById(matter.SysUserId)
  380. if err != nil {
  381. //utils.FileLog.Info("getAdminInfoById err: " + err.Error())
  382. return
  383. }
  384. sTime, _ := time.ParseInLocation(utils.FormatDateTime, matter.StartDate+" "+matter.StartTime, time.Now().Location())
  385. startTime := sTime.Format("2006-01-02 15:04")
  386. eTime, _ := time.ParseInLocation(utils.FormatDateTime, matter.EndDate+" "+matter.EndTime, time.Now().Location())
  387. endTime := eTime.Format("2006-01-02 15:04")
  388. err, errMsg = creatSHCalendar(researcherInfo.Mobile, researcherInfo.Mobile, matter.MatterContent, startTime, endTime, 2, matter.RsMattersId)
  389. if err != nil {
  390. return
  391. }
  392. // 修改事项的同步字段
  393. updateParams := make(map[string]interface{})
  394. whereParams := make(map[string]interface{})
  395. updateParams["is_synced"] = 1
  396. whereParams["rs_matters_id"] = matter.RsMattersId
  397. err = roadshow.UpdateRsMatters(whereParams, updateParams)
  398. if err != nil {
  399. err = fmt.Errorf("UpdateRsMatters err: " + err.Error())
  400. }
  401. return
  402. }
  403. // UpdateSHCalendar 更新上海日历活动
  404. func UpdateSHCalendar(rsCalendarId, rsCalendarResearcherId int, activityType, roadshowType, activityCategory, roadshowPlatform, province, city string, calendarResearcherList []*roadshow.CalendarResearcher) (err error) {
  405. errMsg := ``
  406. defer func() {
  407. if errMsg != `` {
  408. //go utils.SendEmail(utils.APPNAME+"更新上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05"), errMsg, utils.EmailSendToUsers)
  409. go alarm_msg.SendAlarmMsg("更新上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+errMsg, 3)
  410. }
  411. }()
  412. //查询关联表获取信息
  413. var condition string
  414. var pars []interface{}
  415. condition = ` AND self_calendar_id = ? and calendar_type = 1 `
  416. pars = append(pars, rsCalendarResearcherId)
  417. relationItem, err := roadshow.GetRelationByPars(condition, pars)
  418. if err != nil {
  419. err = errors.New("GetRelationByPars err:" + err.Error())
  420. //go utils.SendEmail(utils.APPNAME+"上海关联表查询失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  421. go alarm_msg.SendAlarmMsg("上海关联表查询失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  422. fmt.Println(err)
  423. return
  424. }
  425. //需要同时修改创建人及研究员的日历(目前听说只有1个,先按一个处理吧)
  426. for _, researcher := range calendarResearcherList {
  427. sTime, _ := time.ParseInLocation(utils.FormatDateTime, researcher.StartDate+" "+researcher.StartTime, time.Now().Location())
  428. startTime := sTime.Format("2006-01-02 15:04")
  429. eTime, _ := time.ParseInLocation(utils.FormatDateTime, researcher.EndDate+" "+researcher.EndTime, time.Now().Location())
  430. endTime := eTime.Format("2006-01-02 15:04")
  431. title := getTitle(activityType, roadshowType, activityCategory, roadshowPlatform, province, city)
  432. //发送更新请求
  433. _, err = updateSHCalendar(fmt.Sprintf("%v", relationItem.ThirdCalendarId), relationItem.ResearcherMobile, title, startTime, endTime)
  434. if err != nil {
  435. errMsg += fmt.Sprint("更新研究员日历信息:", relationItem.ThirdCalendarId, ";err:"+err.Error(), ";")
  436. }
  437. //// 更新路演活动的信息
  438. //calWhereParams := make(map[string]interface{})
  439. //calWhereParams["rs_calendar_id"] = rsCalendarId
  440. //err = roadshow.UpdateRsCalendarRelation(calWhereParams, updateParams)
  441. //if err != nil {
  442. // errMsg += fmt.Sprint("UpdateRsCalendar:", relationItem.ThirdCalendarId, ";err:"+err.Error(), ";")
  443. // return
  444. //}
  445. }
  446. // 更新路演活动中 研究员的信息
  447. whereParams := make(map[string]interface{})
  448. updateParams := make(map[string]interface{})
  449. whereParams["rs_calendar_researcher_id"] = rsCalendarResearcherId
  450. updateParams["is_synced"] = 1
  451. updateParams["modify_time"] = time.Now()
  452. err = roadshow.UpdateCalendarResearcher(whereParams, updateParams)
  453. if err != nil {
  454. errMsg += fmt.Sprint("UpdateCalendarResearcher:", relationItem.ThirdCalendarId, ";err:"+err.Error(), ";")
  455. return
  456. }
  457. // 更新路演活动的信息
  458. calWhereParams := make(map[string]interface{})
  459. calWhereParams["rs_calendar_id"] = rsCalendarId
  460. err = roadshow.UpdateRsCalendar(calWhereParams, updateParams)
  461. if err != nil {
  462. errMsg += fmt.Sprint("UpdateRsCalendar:", relationItem.ThirdCalendarId, ";err:"+err.Error(), ";")
  463. return
  464. }
  465. return
  466. }
  467. // UpdateSHCalendarByMatter 更新上海日历活动
  468. func UpdateSHCalendarByMatter(req roadshow.UpdateMattersReq) (err error) {
  469. defer func() {
  470. if err != nil {
  471. //go utils.SendEmail(utils.APPNAME+"更新上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  472. go alarm_msg.SendAlarmMsg("更新上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  473. }
  474. }()
  475. if err != nil {
  476. return
  477. }
  478. //需要同时修改创建人及研究员的日历
  479. //查询关联表获取信息
  480. var condition string
  481. var pars []interface{}
  482. condition = ` AND self_calendar_id = ? and calendar_type = 2 `
  483. pars = append(pars, req.RsMattersId)
  484. relationItem, err := roadshow.GetRelationByPars(condition, pars)
  485. if err != nil {
  486. err = errors.New("GetRelationByPars err:" + err.Error())
  487. //go utils.SendEmail(utils.APPNAME+"上海关联表查询失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
  488. go alarm_msg.SendAlarmMsg("上海关联表查询失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  489. fmt.Println(err)
  490. return
  491. }
  492. sTime, _ := time.ParseInLocation(utils.FormatDateTime, req.StartDate+" "+req.StartTime, time.Now().Location())
  493. startTime := sTime.Format("2006-01-02 15:04")
  494. eTime, _ := time.ParseInLocation(utils.FormatDateTime, req.EndDate+" "+req.EndTime, time.Now().Location())
  495. endTime := eTime.Format("2006-01-02 15:04")
  496. //发送更新请求
  497. _, err = updateSHCalendar(fmt.Sprintf("%v", relationItem.ThirdCalendarId), relationItem.ResearcherMobile, relationItem.Content, startTime, endTime)
  498. if err == nil {
  499. updateParams := make(map[string]interface{})
  500. whereParams := make(map[string]interface{})
  501. updateParams["is_synced"] = 1
  502. whereParams["rs_matters_id"] = req.RsMattersId
  503. err = roadshow.UpdateRsMatters(whereParams, updateParams)
  504. if err != nil {
  505. utils.FileLog.Info("UpdateRsMatters err: " + err.Error())
  506. fmt.Println("UpdateRsMatters err: " + err.Error())
  507. return
  508. }
  509. }
  510. return
  511. }
  512. // DeleteSHCalendar 删除上海日历活动
  513. func DeleteSHCalendar(rsCalendarResearcherId int) (err error) {
  514. defer func() {
  515. if err != nil {
  516. //go utils.SendEmail(utils.APPNAME+"删除上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05"), fmt.Sprint("关系id:", rsCalendarResearcherId, ";err:", err.Error()), utils.EmailSendToUsers)
  517. go alarm_msg.SendAlarmMsg("删除上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+fmt.Sprint("关系id:", rsCalendarResearcherId, ";err:", err.Error()), 3)
  518. }
  519. }()
  520. var condition string
  521. var pars []interface{}
  522. condition = ` AND self_calendar_id = ? and calendar_type = 1 `
  523. pars = append(pars, rsCalendarResearcherId)
  524. relationItem, err := roadshow.GetRelationByPars(condition, pars)
  525. if err != nil {
  526. logInfo := fmt.Sprint("删除上海日历活动失败;rsCalendarResearcherId:,", rsCalendarResearcherId, " ;GetRelationByPars err"+err.Error())
  527. err = errors.New(logInfo)
  528. utils.FileLog.Info(logInfo)
  529. if err.Error() == utils.ErrNoRow() {
  530. err = nil
  531. return
  532. }
  533. return
  534. }
  535. //删除上海方的路演
  536. err = deleteSHCalendar(relationItem.UserPhone, relationItem.ThirdCalendarId)
  537. if err != nil {
  538. return
  539. }
  540. //删除活动表及事项表
  541. err = roadshow.DeleteRsCalendarRelation(relationItem.RelationId)
  542. if err != nil {
  543. err = errors.New("DeleteRsCalendarRelation err:" + err.Error())
  544. return
  545. }
  546. return
  547. }
  548. // DeleteSHMatter 删除上海日历事项
  549. func DeleteSHMatter(matterId int) (err error) {
  550. defer func() {
  551. if err != nil {
  552. //go utils.SendEmail(utils.APPNAME+"删除上海日历事项失败:", "删除上海研究员日历失败 "+err.Error(), utils.EmailSendToUsers)
  553. go alarm_msg.SendAlarmMsg("删除上海研究员日历失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  554. }
  555. }()
  556. var condition string
  557. var pars []interface{}
  558. condition = ` AND self_calendar_id = ? and calendar_type = 2 `
  559. pars = append(pars, matterId)
  560. relationItem, err := roadshow.GetRelationByPars(condition, pars)
  561. if err != nil {
  562. err = errors.New(fmt.Sprint("删除上海日历事项失败;matterId:,", matterId, " ;GetRelationByPars err"+err.Error()))
  563. utils.FileLog.Info(err.Error())
  564. if err.Error() == utils.ErrNoRow() {
  565. err = nil
  566. return
  567. }
  568. return
  569. }
  570. //删除上海方的路演
  571. err = deleteSHCalendar(relationItem.UserPhone, relationItem.ThirdCalendarId)
  572. //删除活动表及事项表
  573. err = roadshow.DeleteRsCalendarRelation(relationItem.RelationId)
  574. if err != nil {
  575. err = errors.New("DeleteRsCalendarRelation err:" + err.Error())
  576. return
  577. }
  578. return
  579. }
  580. // SyncCalendarFromShanghai 上海路演数据同步到自系统
  581. func SyncCalendarFromShanghai(userPhone, startDate, endDate string) (err error) {
  582. errMsg := ``
  583. defer func() {
  584. if errMsg != `` {
  585. //fmt.Println("err:", errMsg)
  586. //go utils.SendEmail(utils.APPNAME+"上海路演数据同步到自系统失败:"+time.Now().Format("2006-01-02 15:04:05"), errMsg, utils.EmailSendToUsers)
  587. go alarm_msg.SendAlarmMsg("上海路演数据同步到自系统失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+errMsg, 3)
  588. }
  589. }()
  590. //fmt.Println(userPhone, startDate, endDate)
  591. endDateTime, err := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  592. if err != nil {
  593. errMsg = `结束日期转time类型失败,err:` + err.Error()
  594. return
  595. }
  596. //往后延迟一天,避免截止到当天
  597. endDate = endDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
  598. currDay := time.Now().Format(utils.FormatDate)
  599. nowDateTime, _ := time.ParseInLocation(utils.FormatDate, currDay, time.Local)
  600. //如果传入的结束日期早于当前日期,那么就不去查询了
  601. if endDateTime.Before(nowDateTime) {
  602. return
  603. }
  604. //获取当前研究员信息
  605. userPhoneInfo, err := getAdminInfo(userPhone)
  606. if err != nil {
  607. errMsg += fmt.Sprint("获取手机号信息失败:手机号:", userPhone, ";err:"+err.Error(), ";")
  608. return
  609. }
  610. //根据研究员和开始/结束日期获取上海的活动路演
  611. rsCalendarResearcherList, err := roadshow.GetRsCalendarResearcherInfoIByResearcherIdAndDate(userPhoneInfo.AdminId, currDay, endDate)
  612. if err != nil {
  613. errMsg += fmt.Sprint("获取研究员日程信息失败:手机号:", userPhone, ";err:"+err.Error(), ";")
  614. return
  615. }
  616. //待删除的活动路演
  617. deleteRsCalendarResearcherMap := make(map[int][]*roadshow.RsCalendarResearcherRelationInfo)
  618. for _, v := range rsCalendarResearcherList {
  619. tmpList, ok := deleteRsCalendarResearcherMap[v.ThirdCalendarId]
  620. if !ok {
  621. tmpList = make([]*roadshow.RsCalendarResearcherRelationInfo, 0)
  622. }
  623. tmpList = append(tmpList, v)
  624. deleteRsCalendarResearcherMap[v.ThirdCalendarId] = tmpList
  625. }
  626. //以当前日期作为起始日期去同步
  627. list, err := getCalendarFrom(userPhone, currDay, endDate)
  628. if err != nil {
  629. errMsg = fmt.Sprint("获取第三方路演日历数据失败,", "userPhone:", userPhone, ";currDay:", currDay, ";endDate:", endDate, ";err:"+err.Error())
  630. return
  631. }
  632. thirdIdList := make([]int, 0)
  633. if len(list) > 0 {
  634. for _, v := range list {
  635. thirdIdList = append(thirdIdList, v.ID)
  636. //移除还存在的活动,保留不存在的活动
  637. delete(deleteRsCalendarResearcherMap, v.ID)
  638. }
  639. rsCalendarRelationList, tmpErr := roadshow.GetRsCalendarRelationListByThirdIds(thirdIdList)
  640. if tmpErr != nil {
  641. err = tmpErr
  642. errMsg = "获取关联列表失败,err:" + tmpErr.Error()
  643. return
  644. }
  645. rsCalendarRelationMap := make(map[int]*roadshow.RsCalendarRelation)
  646. for _, rsCalendarRelation := range rsCalendarRelationList {
  647. rsCalendarRelationMap[rsCalendarRelation.ThirdCalendarId] = rsCalendarRelation
  648. }
  649. for _, v := range list {
  650. //展示优先级:1、customer_name 2、project_name 3、title 需求池953
  651. if v.CustomerName != "" {
  652. v.Title = v.CustomerName
  653. } else if v.ProjectName != "" {
  654. v.Title = v.ProjectName
  655. }
  656. if rsCalendarRelation, ok := rsCalendarRelationMap[v.ID]; ok {
  657. //存在的话,那么就去查找对应的信息
  658. if rsCalendarRelation.CalendarType == 1 {
  659. //路演
  660. rsCalendarResearcherInfo, tmpErr := roadshow.GetRsCalendarResearcherById(rsCalendarRelation.SelfCalendarId)
  661. if tmpErr != nil {
  662. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取路演研究员信息失败;err:"+tmpErr.Error(), ";")
  663. continue
  664. }
  665. rsCalendarInfo, tmpErr := roadshow.GetRsCalendarById(rsCalendarResearcherInfo.RsCalendarId)
  666. if tmpErr != nil {
  667. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取路演信息失败;err:"+tmpErr.Error(), ";")
  668. continue
  669. }
  670. if rsCalendarInfo.Source == 0 { //自系统创建的路演活动,不需要依靠上海方来修改
  671. continue
  672. }
  673. //是否去同步变更数据库
  674. isUpdateSync := false
  675. //是否变更
  676. isUpdate := false
  677. if v.StartTime != rsCalendarRelation.StartTime {
  678. isUpdate = true
  679. }
  680. if v.EndTime != rsCalendarRelation.EndTime {
  681. isUpdate = true
  682. }
  683. if v.Title != rsCalendarRelation.Title {
  684. isUpdate = true
  685. }
  686. if rsCalendarResearcherInfo.Status == 4 { // 被删除了,现在是需要更新
  687. isUpdate = true
  688. }
  689. researcherList := make([]admin.AdminItem, 0)
  690. researcherMap := make(map[int]admin.AdminItem)
  691. addResearcherList := make([]admin.AdminItem, 0) // 需要新增的研究员
  692. delResearcherIdList := make([]int, 0) //需要删除的路演活动与研究员的关系id
  693. updateResearcherList := make([]*roadshow.RsCalendarResearcher, 0) //待更新的路演活动中研究员信息
  694. if v.ResearcherMobile != rsCalendarRelation.ResearcherMobile {
  695. //研究员变更了,需要去改表
  696. isUpdateSync = true
  697. researcherMobileList := strings.Split(v.ResearcherMobile, ",")
  698. if len(researcherMobileList) > 0 {
  699. for _, mobile := range researcherMobileList {
  700. researcherInfo, tmpErr := getAdminInfo(mobile)
  701. if tmpErr != nil {
  702. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取研究员失败,研究员手机号:", mobile, ";err:"+tmpErr.Error(), ";")
  703. continue
  704. }
  705. if researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_RESEARCHR ||
  706. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RESEARCHR ||
  707. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_RESEARCHR ||
  708. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_DEPARTMENT ||
  709. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_DEPARTMENT ||
  710. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
  711. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
  712. researcherList = append(researcherList, researcherInfo)
  713. researcherMap[researcherInfo.AdminId] = researcherInfo
  714. }
  715. }
  716. }
  717. //没有研究员
  718. if len(researcherList) <= 0 {
  719. errMsg += fmt.Sprint("第三方日历ID:", v.ID, ";对方研究员信息失败;")
  720. continue
  721. }
  722. rsCalendarResearcherList, tmpErr := roadshow.GetRsCalendarResearcherListByRsCalendarId(rsCalendarInfo.RsCalendarId)
  723. if tmpErr != nil {
  724. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取路演活动中的研究员列表失败,路演活动ID:", rsCalendarInfo.RsCalendarId, ";err:"+tmpErr.Error(), ";")
  725. continue
  726. }
  727. //现有活动中的研究员
  728. rsCalendarResearcherMap := make(map[int]*roadshow.RsCalendarResearcher)
  729. for _, rsCalendarResearcher := range rsCalendarResearcherList {
  730. if _, ok := researcherMap[rsCalendarResearcher.ResearcherId]; ok {
  731. if isUpdate {
  732. updateResearcherList = append(updateResearcherList, rsCalendarResearcher)
  733. }
  734. } else {
  735. delResearcherIdList = append(delResearcherIdList, rsCalendarResearcher.RsCalendarResearcherId)
  736. }
  737. rsCalendarResearcherMap[rsCalendarResearcher.ResearcherId] = rsCalendarResearcher
  738. }
  739. //校验是否需要新增研究员
  740. for adminId, researcherInfo := range researcherMap {
  741. //如果
  742. if _, ok := rsCalendarResearcherMap[adminId]; !ok {
  743. addResearcherList = append(addResearcherList, researcherInfo)
  744. }
  745. }
  746. } else if isUpdate { //如果有字段更新,那么需要将所有的研究员信息更新
  747. isUpdateSync = true
  748. rsCalendarResearcherList, tmpErr := roadshow.GetRsCalendarResearcherListByRsCalendarId(rsCalendarInfo.RsCalendarId)
  749. if tmpErr != nil {
  750. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取路演活动中的研究员列表失败,路演活动ID:", rsCalendarInfo.RsCalendarId, ";err:"+tmpErr.Error(), ";")
  751. continue
  752. }
  753. for _, rsCalendarResearcher := range rsCalendarResearcherList {
  754. updateResearcherList = append(updateResearcherList, rsCalendarResearcher)
  755. }
  756. }
  757. if isUpdateSync {
  758. tmpErr = roadshow.UpdateSyncRsCalendarRelation(v, rsCalendarInfo, rsCalendarRelation, updateResearcherList, delResearcherIdList, addResearcherList)
  759. if tmpErr != nil {
  760. err = tmpErr
  761. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "修改关联关系失败;err:"+tmpErr.Error(), ";")
  762. return
  763. }
  764. }
  765. } else {
  766. //事项
  767. //事项都是由自系统创建的,不需要依靠上海方来修改
  768. }
  769. } else {
  770. //数据不存在
  771. createUser, tmpErr := getAdminInfo(v.UserPhone)
  772. if tmpErr != nil {
  773. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取创建人失败,创建人手机号:", v.UserPhone, ";err:"+tmpErr.Error(), ";")
  774. continue
  775. }
  776. //研究员列表
  777. researcherList := make([]admin.AdminItem, 0)
  778. researcherMobileList := strings.Split(v.ResearcherMobile, ",")
  779. if len(researcherMobileList) > 0 {
  780. for _, mobile := range researcherMobileList {
  781. researcherInfo, tmpErr := getAdminInfo(mobile)
  782. if tmpErr != nil {
  783. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "获取研究员失败,研究员手机号:", mobile, ";err:"+tmpErr.Error(), ";")
  784. continue
  785. }
  786. if researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_RESEARCHR ||
  787. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RESEARCHR ||
  788. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_RESEARCHR ||
  789. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_DEPARTMENT ||
  790. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_DEPARTMENT ||
  791. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
  792. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN ||
  793. researcherInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
  794. researcherList = append(researcherList, researcherInfo)
  795. }
  796. }
  797. }
  798. //没有研究员
  799. if len(researcherList) <= 0 {
  800. continue
  801. }
  802. //数据入库
  803. tmpErr = roadshow.SyncRsCalendarRelation(v, createUser, researcherList)
  804. if tmpErr != nil {
  805. err = tmpErr
  806. errMsg += fmt.Sprint("第三方日历ID:", v.ID, "绑定关联关系失败;err:"+tmpErr.Error(), ";")
  807. continue
  808. }
  809. //fmt.Println("createUser:", createUser)
  810. }
  811. }
  812. }
  813. //上海那边已经删除了路演,这边也要同步删除
  814. for _, deleteRsCalendarResearcherList := range deleteRsCalendarResearcherMap {
  815. for _, deleteRsCalendarResearcher := range deleteRsCalendarResearcherList {
  816. // 更新路演与研究员关系表的状态字段
  817. whereParams := make(map[string]interface{})
  818. updateParams := make(map[string]interface{})
  819. whereParams["rs_calendar_researcher_id"] = deleteRsCalendarResearcher.RsCalendarResearcherId
  820. updateParams["status"] = 4
  821. updateParams["modify_time"] = time.Now()
  822. tmpErr := roadshow.UpdateCalendarResearcher(whereParams, updateParams)
  823. if tmpErr != nil {
  824. err = tmpErr
  825. errMsg += fmt.Sprint("第三方日历ID:", deleteRsCalendarResearcher.ThirdCalendarId, "删除关联关系失败;err:"+tmpErr.Error(), ";")
  826. continue
  827. }
  828. // 更新路演的同步字段
  829. //calWhereParams := make(map[string]interface{})
  830. //calUpdateParams := make(map[string]interface{})
  831. //calWhereParams["rs_calendar_id"] = deleteRsCalendarResearcher.RsCalendarId
  832. //updateParams["is_synced"] = 1
  833. //err = roadshow.UpdateRsCalendar(calWhereParams, calUpdateParams)
  834. }
  835. }
  836. return
  837. }
  838. // CreateOaUser 新增系统用户
  839. func CreateOaUser(mobile, username string, groupId int) (err error) {
  840. defer func() {
  841. if err != nil {
  842. errMsg := fmt.Sprint("手机号:", mobile, ";username:", username, ";分组id:", groupId, ";err:", err.Error())
  843. //go utils.SendEmail(utils.APPNAME+"系统用户同步到上海失败:"+time.Now().Format("2006-01-02 15:04:05"), errMsg, utils.EmailSendToUsers)
  844. go alarm_msg.SendAlarmMsg("系统用户同步到上海失败:"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+errMsg, 3)
  845. }
  846. }()
  847. finalUrl := utils.CRM_OPEN_API_URL + "/v1/OaUser/create"
  848. //发送创建请求
  849. form := url.Values{}
  850. form.Add("mobile", mobile)
  851. form.Add("username", username)
  852. form.Add("group_id", fmt.Sprint(groupId))
  853. //发送创建请求
  854. _, err, _ = postCurl(finalUrl, form, 0)
  855. if err != nil {
  856. err = errors.New("NewRequest Err:" + err.Error())
  857. return
  858. }
  859. return
  860. }
  861. // getAdminInfo 通过手机号获取用户信息
  862. func getAdminInfo(mobile string) (adminInfo admin.AdminItem, err error) {
  863. adminMap := make(map[string]admin.AdminItem)
  864. redisAdminData, redisErr := utils.Rc.RedisString(utils.CACHE_KEY_ADMIN)
  865. if redisErr != nil {
  866. list, err := admin.GetSysuserList("", []interface{}{}, 0, 1000)
  867. // GetSysuserList
  868. for _, tmpAdminInfo := range list {
  869. adminMap[tmpAdminInfo.Mobile] = *tmpAdminInfo
  870. }
  871. //入缓存
  872. redisJsonData, err := json.Marshal(adminMap)
  873. if err == nil {
  874. _ = utils.Rc.Put(utils.CACHE_KEY_ADMIN, string(redisJsonData), time.Minute*30)
  875. }
  876. } else {
  877. err := json.Unmarshal([]byte(redisAdminData), &adminMap)
  878. if err != nil {
  879. fmt.Println("用户数据,json转换失败:", err)
  880. }
  881. }
  882. adminInfo, ok := adminMap[mobile]
  883. if !ok {
  884. err = fmt.Errorf("找不到该手机号用户,mobile:" + mobile)
  885. }
  886. return
  887. }
  888. // getAdminInfoById 通过用户id获取用户信息
  889. func getAdminInfoById(sysId int) (adminInfo admin.AdminItem, err error) {
  890. adminMap := make(map[int]admin.AdminItem)
  891. redisAdminData, redisErr := utils.Rc.RedisString(utils.CACHE_KEY_ADMIN_ID)
  892. if redisErr != nil {
  893. list, err := admin.GetSysuserList("", []interface{}{}, 0, 1000)
  894. // GetSysuserList
  895. for _, tmpAdminInfo := range list {
  896. adminMap[tmpAdminInfo.AdminId] = *tmpAdminInfo
  897. }
  898. //入缓存
  899. redisJsonData, err := json.Marshal(adminMap)
  900. if err == nil {
  901. _ = utils.Rc.Put(utils.CACHE_KEY_ADMIN_ID, string(redisJsonData), time.Minute*30)
  902. }
  903. } else {
  904. err := json.Unmarshal([]byte(redisAdminData), &adminMap)
  905. if err != nil {
  906. fmt.Println("用户数据,json转换失败:", err)
  907. }
  908. }
  909. adminInfo, ok := adminMap[sysId]
  910. if !ok {
  911. err = fmt.Errorf("找不到该用户id,sysId:" + fmt.Sprint(sysId))
  912. }
  913. return
  914. }
  915. func getTitle(activityType, roadshowType, activityCategory, roadshowPlatform, province, city string) string {
  916. var title string
  917. switch activityType {
  918. case "内部会议":
  919. title = "内部会议"
  920. case "公开会议", "路演":
  921. if roadshowType == "线上" {
  922. title = roadshowType + activityType + roadshowPlatform
  923. } else {
  924. title = roadshowType + activityType + province + city
  925. }
  926. case "报告电话会":
  927. title = activityCategory + "电话会"
  928. }
  929. return title
  930. }
  931. // GetAllActivityType 获取全部的活动分类
  932. func GetAllActivityType() (list []*roadshow.ActivityTypeList, err error) {
  933. list, err = roadshow.GetActivityTypeListByActivityTypePId(0)
  934. if err != nil {
  935. return
  936. }
  937. for _, v := range list {
  938. tmpList, tmpErr := roadshow.GetActivityTypeListByActivityTypePId(v.ActivityTypeId)
  939. if tmpErr != nil {
  940. err = tmpErr
  941. return
  942. }
  943. v.ChildList = tmpList
  944. }
  945. return
  946. }
  947. // GetCalendarFrom 获取上海方的路演活动列表
  948. func GetCalendarFrom(userPhone, startDate, endDate string) (list []roadshow.UserCalendar, err error) {
  949. list, err = getCalendarFrom(userPhone, startDate, endDate)
  950. return
  951. }