|
@@ -15,6 +15,7 @@ import (
|
|
|
"io/ioutil"
|
|
|
netHttp "net/http"
|
|
|
"net/url"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
"time"
|
|
@@ -262,11 +263,11 @@ func getCalendarFrom(userPhone, startDate, endDate string) (list []roadshow.User
|
|
|
}
|
|
|
|
|
|
//func init() {
|
|
|
-// SyncCalendarFromShanghai77()
|
|
|
+// SyncCalendarFromShanghai()
|
|
|
//}
|
|
|
|
|
|
// SyncCalendarFromShanghai 上海路演数据同步到自系统
|
|
|
-func SyncCalendarFromShanghai77() (err error) {
|
|
|
+func SyncCalendarFromShanghai() (err error) {
|
|
|
errMsgList := make([]string, 0)
|
|
|
defer func() {
|
|
|
if len(errMsgList) > 0 {
|
|
@@ -317,8 +318,13 @@ func SyncCalendarFromShanghai77() (err error) {
|
|
|
return
|
|
|
}
|
|
|
mapUserInfo := make(map[string]*system.AdminItem)
|
|
|
+ mapAdminIdMobil := make(map[int]string) // 研究员ID与手机号的关系
|
|
|
for _, v := range adminList {
|
|
|
+ if v.Mobile == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
mapUserInfo[v.Mobile] = v
|
|
|
+ mapAdminIdMobil[v.AdminId] = v.Mobile
|
|
|
}
|
|
|
//获取前后三十天的信息
|
|
|
startDate := time.Now().AddDate(0, 0, -30).Format(utils.FormatDate)
|
|
@@ -349,6 +355,7 @@ func SyncCalendarFromShanghai77() (err error) {
|
|
|
errMsgList = append(errMsgList, fmt.Sprint("获取研究员日程信息失败:手机号:", userPhone, ";err:"+tmpErr.Error(), ";"))
|
|
|
return
|
|
|
}
|
|
|
+ //return
|
|
|
//待删除的活动路演
|
|
|
deleteRsCalendarResearcherMap := make(map[int][]*roadshow.RsCalendarResearcherRelationInfo)
|
|
|
for _, v := range rsCalendarResearcherList {
|
|
@@ -362,6 +369,8 @@ func SyncCalendarFromShanghai77() (err error) {
|
|
|
}
|
|
|
|
|
|
thirdIdList := make([]int, 0)
|
|
|
+ mapRsCalendar := make(map[int]*roadshow.RsCalendar)
|
|
|
+
|
|
|
if len(list) > 0 {
|
|
|
for _, v := range list {
|
|
|
thirdIdList = append(thirdIdList, v.ID)
|
|
@@ -411,7 +420,7 @@ func SyncCalendarFromShanghai77() (err error) {
|
|
|
errMsgList = append(errMsgList, fmt.Sprint("日历ID:", rsCalendarIds, "获取路演信息失败;err:"+tmpErr.Error(), ";"))
|
|
|
return
|
|
|
}
|
|
|
- mapRsCalendar := make(map[int]*roadshow.RsCalendar)
|
|
|
+
|
|
|
for _, v := range rsCalendarInfoList {
|
|
|
mapRsCalendar[v.RsCalendarId] = v
|
|
|
}
|
|
@@ -493,11 +502,11 @@ func SyncCalendarFromShanghai77() (err error) {
|
|
|
if len(maprsCalendarResearcherList[rsCalendarInfo.RsCalendarId]) == 0 {
|
|
|
continue
|
|
|
}
|
|
|
- rsCalendarResearcherListAdd := maprsCalendarResearcherList[rsCalendarInfo.RsCalendarId]
|
|
|
+ rsCalendarResearcherListUpdate := maprsCalendarResearcherList[rsCalendarInfo.RsCalendarId] // 活动中包含的多个研究员
|
|
|
|
|
|
//现有活动中的研究员
|
|
|
rsCalendarResearcherMap := make(map[int]*roadshow.RsCalendarResearcher)
|
|
|
- for _, rsCalendarResearcher := range rsCalendarResearcherListAdd {
|
|
|
+ for _, rsCalendarResearcher := range rsCalendarResearcherListUpdate {
|
|
|
if _, ok := researcherMap[rsCalendarResearcher.ResearcherId]; ok {
|
|
|
if isUpdate {
|
|
|
updateResearcherList = append(updateResearcherList, rsCalendarResearcher)
|
|
@@ -601,5 +610,170 @@ func SyncCalendarFromShanghai77() (err error) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ mapShangHaiResearcher := make(map[string][]string)
|
|
|
+ for _, v := range list {
|
|
|
+ researcherMobileList := strings.Split(v.ResearcherMobile, ",")
|
|
|
+ for _, vm := range researcherMobileList {
|
|
|
+ mapShangHaiResearcher[vm] = append(mapShangHaiResearcher[vm], time.Unix(int64(v.StartTime), 0).Format(utils.FormatDateTime))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range rsCalendarResearcherList {
|
|
|
+ mobileResearcher := mapAdminIdMobil[v.ResearcherId] //研究员手机号
|
|
|
+ if mobileResearcher == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ //如果手机号对应的开始时间不存在,就把这场活动同步到上海那边
|
|
|
+ if !utils.InArrayByStr(mapShangHaiResearcher[mobileResearcher], fmt.Sprint(v.StartDate, " ", v.StartTime)) {
|
|
|
+ if mapRsCalendar[v.RsCalendarId] == nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ CalendarToSH(mapRsCalendar[v.RsCalendarId], v.ResearcherId)
|
|
|
+ time.Sleep(3000 * time.Millisecond) // 延迟3秒
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// CalendarToSH 创建活动时同步上海的前置函数
|
|
|
+func CalendarToSH(rsCalendar *roadshow.RsCalendar, researcherId int) {
|
|
|
+ var err error
|
|
|
+ errMsg := ``
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ errMsg = err.Error() + ";" + errMsg
|
|
|
+ fmt.Println(errMsg)
|
|
|
+ go alarm_msg.SendAlarmMsg("新建上海研究员日历失败,ERR:"+err.Error()+";errMsg:"+errMsg, 3)
|
|
|
+ //go utils.SendEmail(utils.APPNAME+"新建上海研究员日历失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ //redis获取创建者及研究员信息
|
|
|
+ userInfo, err := getAdminInfoById(rsCalendar.SysUserId)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("getAdminInfoById err: " + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ researcher, err := roadshow.GetRsCalendarResearcherByRsCalendarIdAndResearcherId(rsCalendar.RsCalendarId, researcherId)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("getAdminInfoById err: " + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ researcherInfo, err := getAdminInfoById(researcher.ResearcherId)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("getAdminInfoById err: " + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ sTime, _ := time.ParseInLocation(utils.FormatDateTime, researcher.StartDate+" "+researcher.StartTime, time.Now().Location())
|
|
|
+ startTime := sTime.Format("2006-01-02 15:04")
|
|
|
+ eTime, _ := time.ParseInLocation(utils.FormatDateTime, researcher.EndDate+" "+researcher.EndTime, time.Now().Location())
|
|
|
+ endTime := eTime.Format("2006-01-02 15:04")
|
|
|
+
|
|
|
+ // 创建上海路演日程
|
|
|
+ err, errMsg = creatSHCalendar(userInfo.Mobile, researcherInfo.Mobile, rsCalendar.Title, startTime, endTime, 1, researcher.RsCalendarResearcherId)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("CreatSHCalendar err: " + err.Error())
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新路演与研究员关系表的同步字段
|
|
|
+ whereParams := make(map[string]interface{})
|
|
|
+ updateParams := make(map[string]interface{})
|
|
|
+ whereParams["rs_calendar_researcher_id"] = researcher.RsCalendarResearcherId
|
|
|
+ updateParams["is_synced"] = 1
|
|
|
+ updateParams["modify_time"] = time.Now()
|
|
|
+ err = roadshow.UpdateCalendarResearcher(whereParams, updateParams)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("UpdateCalendarResearcher err: " + err.Error())
|
|
|
+ fmt.Println("UpdateCalendarResearcher err: " + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新路演的同步字段
|
|
|
+ calWhereParams := make(map[string]interface{})
|
|
|
+ calWhereParams["rs_calendar_id"] = rsCalendar.RsCalendarId
|
|
|
+ err = roadshow.UpdateRsCalendar(calWhereParams, updateParams)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("UpdateRsCalendar err: " + err.Error())
|
|
|
+ fmt.Println("UpdateRsCalendar err: " + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// creatSHCalendar 新增上海日历活动
|
|
|
+func creatSHCalendar(userPhone, toUserPhone, content, startTime, endTime string, calendarType int8, selfCalendarId int) (err error, errMsg string) {
|
|
|
+ logMsg := ``
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ if logMsg != `` {
|
|
|
+ errMsg = logMsg
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ finalUrl := utils.CRM_OPEN_API_URL + "/v1/Calendar/create"
|
|
|
+
|
|
|
+ form := url.Values{
|
|
|
+ "user_phone": {userPhone},
|
|
|
+ "to_user_phone": {toUserPhone},
|
|
|
+ "content": {content},
|
|
|
+ "start_time": {startTime},
|
|
|
+ "end_time": {endTime},
|
|
|
+ }
|
|
|
+ //发送创建请求
|
|
|
+ body, err, logMsg := postCurl(finalUrl, form, 0)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("NewRequest Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var creatSHCalendarResp roadshow.CreatSHCalendarResp
|
|
|
+ err = json.Unmarshal(body, &creatSHCalendarResp)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("Unmarshal Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ calendar := creatSHCalendarResp.Data
|
|
|
+
|
|
|
+ //上海系统id
|
|
|
+ sThirdId := calendar.CalendarID
|
|
|
+ thirdId, err := strconv.Atoi(sThirdId)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("string to int Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 添加自系统与上海系统的路演关系
|
|
|
+ relationItem := roadshow.RsCalendarRelation{
|
|
|
+ UserPhone: userPhone,
|
|
|
+ CalendarType: calendarType,
|
|
|
+ SelfCalendarId: selfCalendarId,
|
|
|
+ ThirdCalendarId: thirdId,
|
|
|
+ Title: content,
|
|
|
+ ResearcherMobile: toUserPhone,
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ }
|
|
|
+ _, err = roadshow.AddRsCalendarRelation(&relationItem)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("AddRsCalendarRelation Err:" + err.Error())
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func getAdminInfoById(sysId int) (adminInfo system.AdminItem, err error) {
|
|
|
+ adminMap := make(map[int]system.AdminItem)
|
|
|
+ list, err := system.GetSysuserList("", []interface{}{}, 0, 1000)
|
|
|
+ // GetSysuserList
|
|
|
+ for _, tmpAdminInfo := range list {
|
|
|
+ adminMap[tmpAdminInfo.AdminId] = *tmpAdminInfo
|
|
|
+ }
|
|
|
+
|
|
|
+ adminInfo, ok := adminMap[sysId]
|
|
|
+ if !ok {
|
|
|
+ err = fmt.Errorf("找不到该用户id,sysId:" + fmt.Sprint(sysId))
|
|
|
+ }
|
|
|
+
|
|
|
return
|
|
|
}
|