package roadshow import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hz_crm_api/controllers" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/roadshow" "hongze/hz_crm_api/models/system" "hongze/hz_crm_api/services" roadshowService "hongze/hz_crm_api/services/roadshow" "hongze/hz_crm_api/utils" "strconv" "strings" "time" ) // 日历 type ActivityController struct { controllers.BaseAuthController } // @Title 新增路演活动接口 // @Description 新增路演活动接口 // @Param request body roadshow.AddActivityReq true "type json string" // @Success Ret=200 保存成功 // @router /add [post] func (this *ActivityController) Add() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } deleteCache := true cacheKey := "CACHE_RS_ACTIVITY_ADD_SELLER_" + strconv.Itoa(sysUser.AdminId) defer func() { if deleteCache { utils.Rc.Delete(cacheKey) } }() if !utils.Rc.SetNX(cacheKey, 1, 5*time.Second) { deleteCache = false br.Msg = "系统处理中,请稍后重试!" br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody) return } var req roadshow.AddActivitySellerReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if len(req.SellerId) <= 0 { br.Msg = "请选择销售!" return } var checkIsAdd []string if req.SellerName == "" { br.Msg = "请选择销售!" return } if req.StartDate == "" { br.Msg = "请选择开始日期!" return } if req.EndDate == "" { br.Msg = "请选择结束日期!" return } if req.StartTime == "" { br.Msg = "请选择开始时间!" return } if req.EndTime == "" { br.Msg = "请选择结束时间!" return } if req.StartWeek == "" { br.Msg = "请选择周!" return } if req.EndWeek == "" { br.Msg = "请选择周!" return } startDateTime := req.StartDate + " " + req.StartTime endDateTime := req.EndDate + " " + req.EndTime startP, _ := time.ParseInLocation(utils.FormatDateTime, startDateTime, time.Local) endP, _ := time.ParseInLocation(utils.FormatDateTime, endDateTime, time.Local) if endP.Before(startP) { br.Msg = "结束时间不得早于开始时间!" return } sellerList, err := system.GetSysAdminByIds(req.SellerId) if err != nil { br.Msg = "保存失败!" br.ErrMsg = "获取销售信息失败!Err:" + err.Error() return } for _, v := range sellerList { //校验销售活动时间冲突 { activityCount, err := roadshowService.CheckActivity(startDateTime, endDateTime, "1,2", v.AdminId) if err != nil { br.Msg = "时间冲突检测失败!" br.ErrMsg = "时间冲突检测失败-CheckCalendarSellerCount!Err:" + err.Error() return } if activityCount > 0 && !utils.InArrayByStr(checkIsAdd, v.RealName) { checkIsAdd = append(checkIsAdd, v.RealName) } } //校验活动时间冲突 { activityResearcherCount, err := roadshowService.CheckResearcherBySysSserId(startDateTime, endDateTime, "1,2", v.AdminId) if err != nil { br.Msg = "时间冲突检测失败!" br.ErrMsg = "时间冲突检测失败-CheckCalendarSellerCount!Err:" + err.Error() return } if activityResearcherCount > 0 && !utils.InArrayByStr(checkIsAdd, v.RealName) { checkIsAdd = append(checkIsAdd, v.RealName) } } //校验事项时间冲突 { matterCount, err := roadshowService.CheckMatters(startDateTime, endDateTime, v.AdminId, 0) if err != nil { br.Msg = "时间冲突检测失败!" br.ErrMsg = "时间冲突检测失败-CheckCalendarActivitySellerrCount!Err:" + err.Error() return } if matterCount > 0 && !utils.InArrayByStr(checkIsAdd, v.RealName) { checkIsAdd = append(checkIsAdd, v.RealName) } } } if len(checkIsAdd) > 0 { br.Msg = strings.Join(checkIsAdd, ",") + " 时间已被占用!" br.ErrMsg = "时间冲突检测失败-CheckMattersCount!" br.IsSendEmail = false return } rsActivity := new(roadshow.RsActivity) rsActivity.SysUserId = sysUser.AdminId rsActivity.SysUserRealName = sysUser.RealName rsActivity.ActivityType = req.ActivityType rsActivity.CompanyId = req.CompanyId rsActivity.CompanyName = req.CompanyName rsActivity.Theme = req.Theme rsActivity.CreateTime = time.Now() rsActivity.ModifyTime = time.Now() rsActivity.EnglishCompany = req.EnglishCompany rsActivityId, err := roadshow.AddRsActivity(rsActivity) if err != nil { br.Msg = "保存失败!" br.ErrMsg = "保存日历活动信息失败!Err:" + err.Error() return } for _, v := range sellerList { researcher := new(roadshow.RsActivitySeller) researcher.RsActivityId = int(rsActivityId) researcher.SellerId = v.AdminId researcher.SellerName = v.RealName researcher.StartDate = req.StartDate researcher.EndDate = req.EndDate researcher.StartTime = req.StartTime researcher.EndTime = req.EndTime researcher.StartWeek = req.StartWeek researcher.EndWeek = req.EndWeek researcher.CreateTime = time.Now() researcher.ModifyTime = time.Now() researcher.Status = 2 _, err = roadshow.AddRsActivitySeller(researcher) if err != nil { br.Msg = "保存失败!" br.ErrMsg = "保存日历活动-销售路演信息失败!Err:" + err.Error() return } } openIdList := make([]*system.OpenIdList, 0) sysAdmin, _ := system.GetSysAdminById(sysUser.AdminId) if sysAdmin != nil && sysAdmin.OpenId != "" { openIdObj := &system.OpenIdList{ OpenId: sysAdmin.OpenId, AdminId: sysAdmin.AdminId, } openIdList = append(openIdList, openIdObj) } go services.SendWxMsgWithRoadshowSellerActivity(req.CompanyName, rsActivity.ActivityType, "已添加", time.Now().Format(utils.FormatDateTime), openIdList, int(rsActivityId)) br.Ret = 200 br.Success = true br.Msg = "保存成功" br.IsAddLog = true } // 活动列表 // @Title 活动列表 // @Description 活动列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success 200 {object} roadshow.ResearcherGroup // @router /list2 [get] func (this *ActivityController) List() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var total int var startSize int if pageSize <= 0 { pageSize = utils.PageSize10 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) var resp roadshow.RsActivitySellerListResp var condition string var pars []interface{} condition = " AND b.sys_user_id = ? AND a.status = 2 " pars = append(pars, sysUser.AdminId) total, err := roadshow.GetRsActivitySellerListCount(condition, pars) if err != nil { br.Msg = "获取失败!" br.ErrMsg = "获取数量失败!Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) dataList, err := roadshow.GetRsActivitySellerList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,GetRsActivitySellerList,Err:" + err.Error() return } var rsActivityIds []int for _, v := range dataList { rsActivityIds = append(rsActivityIds, v.RsActivityId) } //获取对应的多个销售信息 listSeller, err := roadshow.GetRsActivitySellerListByActivityIds(rsActivityIds) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,GetRsActivitySellerList,Err:" + err.Error() return } mapSeller := make(map[int][]string) for _, v := range listSeller { mapSeller[v.RsActivityId] = append(mapSeller[v.RsActivityId], v.SellerName) } for _, v := range dataList { v.SellerName = strings.Join(mapSeller[v.RsActivityId], ",") } resp.Paging = page resp.List = dataList br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 删除路演活动接口 // @Description 删除路演活动接口 // @Param request body roadshow.AddActivityReq true "type json string" // @Success Ret=200 保存成功 // @router /delete [post] func (this *ActivityController) Delete() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req roadshow.RsActivityIdReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } rsActivityId := req.RsActivityId detail, err := roadshow.GetRsActivityByRsActivityId(rsActivityId) if err != nil { br.Msg = "删除失败" br.ErrMsg = "获取信息失败,GetRsActivityByRsActivityId,Err:" + err.Error() return } if detail.SysUserId != sysUser.AdminId { br.Msg = "删除失败" br.ErrMsg = "删除失败,不是自己创建的活动信息" return } err = roadshow.DeleteRsActivitySeller(rsActivityId) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败,DeleteRsActivitySeller,Err:" + err.Error() return } openIdList := make([]*system.OpenIdList, 0) sysAdmin, _ := system.GetSysAdminById(sysUser.AdminId) if sysAdmin != nil && sysAdmin.OpenId != "" { openIdObj := &system.OpenIdList{ OpenId: sysAdmin.OpenId, AdminId: sysAdmin.AdminId, } openIdList = append(openIdList, openIdObj) } go services.SendWxMsgWithRoadshowSellerActivity(detail.CompanyName, detail.ActivityType, "已删除", time.Now().Format(utils.FormatDateTime), openIdList, rsActivityId) br.Ret = 200 br.Success = true br.Msg = "删除成功" br.IsAddLog = true }