package controllers import ( "encoding/json" "fmt" "github.com/beego/beego/v2/server/web" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/company" "hongze/hz_crm_api/services" "hongze/hz_crm_api/services/alarm_msg" "hongze/hz_crm_api/utils" "os" "path" "strings" "time" ) // ReportController 报告 type ReportController struct { BaseAuthController } // 报告上传 type ReportUploadCommonController struct { web.Controller } // GetDayWeekReportChapterTypeList // @Title 获取晨报周报章节类型列表 // @Description 获取晨报周报章节类型列表 // @Param StopType query string true "停更类型 stop; disable;" // @Success 200 {object} models.ReportListResp // @router /getDayWeekReportChapterTypeList [get] func (this *ReportController) GetDayWeekReportChapterTypeList() { 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 condition string var pars []interface{} // 停更类型 stopType := this.GetString("StopType") switch stopType { case "", "stop": condition += ` AND enabled = ? ` pars = append(pars, 1) case "disable": default: br.Msg = "停更类型异常" br.IsSendEmail = false return } dayClassifyId, err := company.GetReportClassifyIdByConfigKey("report_day_classify_id") if err != nil { br.Msg = "获取晨报ID配置失败" br.ErrMsg = "获取配置失败" br.IsSendEmail = false return } weekClassifyId, err := company.GetReportClassifyIdByConfigKey("report_week_classify_id") if err != nil { br.Msg = "获取周报ID配置失败" br.ErrMsg = "获取配置失败" br.IsSendEmail = false return } dayList := make([]*models.ReportChapterType, 0) weekList := make([]*models.ReportChapterType, 0) // 晨报 { tmpCondition := condition tmpPars := pars // 报告类型 tmpCondition += ` AND report_classify_id = ? ` tmpPars = append(tmpPars, dayClassifyId) list, err := models.GetAllReportChapterTypeList(tmpCondition, tmpPars) if err != nil { br.Msg = "获取报告章节类型列表失败" br.ErrMsg = "获取报告章节类型列表失败, Err: " + err.Error() return } nowTime := time.Now() for _, v := range list { if v.IsSet == 1 { endTime, _ := time.Parse(utils.FormatDate, v.PauseEndTime) if nowTime.After(endTime.AddDate(0, 0, 1)) { //设置过期了已经 v.IsSet = 0 v.PauseStartTime = `` v.PauseEndTime = `` } } if v.PauseStartTime == `0001-01-01` { v.PauseStartTime = `` } if v.PauseEndTime == `0001-01-01` { v.PauseEndTime = `` } dayList = append(dayList, v) } } // 周报 { tmpCondition := condition tmpPars := pars // 报告类型 tmpCondition += ` AND report_classify_id = ? ` tmpPars = append(tmpPars, weekClassifyId) list, err := models.GetAllReportChapterTypeList(tmpCondition, tmpPars) if err != nil { br.Msg = "获取报告章节类型列表失败" br.ErrMsg = "获取报告章节类型列表失败, Err: " + err.Error() return } nowTime := time.Now() for _, v := range list { if v.IsSet == 1 { endTime, _ := time.Parse(utils.FormatDate, v.PauseEndTime) if nowTime.After(endTime.AddDate(0, 0, 1)) { //设置过期了已经 v.IsSet = 0 v.PauseStartTime = `` v.PauseEndTime = `` } } if v.PauseStartTime == `0001-01-01` { v.PauseStartTime = `` } if v.PauseEndTime == `0001-01-01` { v.PauseEndTime = `` } weekList = append(weekList, v) } } resp := models.UpdateReportChapterTypeResp{ Day: dayList, Week: weekList, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 获取晨报周报的更新暂停时间 // @Description 获取晨报周报的更新暂停时间 // @Success 200 {object} models.ReportListResp // @router /getDayWeekReportPauseTime [get] func (this *ReportController) GetDayWeekReportPauseTime() { 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 } list, err := models.GetDayWeekReportPauseTimeList() if err != nil { br.Msg = "获取晨报周报的更新暂停时间失败" br.ErrMsg = "获取晨报周报的更新暂停时间失败, Err: " + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = list } // SetDayWeekReportUpdateRule // @Title 设置晨报周报的更新规则 // @Description 设置晨报周报的更新规则 // @Param request body models.SetDayWeekReportUpdateRuleReq true "type json string" // @Success 200 string "操作成功" // @router /setDayWeekReportUpdateRule [post] func (this *ReportController) SetDayWeekReportUpdateRule() { 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 models.SetDayWeekReportUpdateRuleReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } researchType := req.ResearchType if researchType == "" { br.Msg = "报告类型不能为空" return } classifyIdKey := `` switch researchType { case "day": classifyIdKey = `report_day_classify_id` case "week": classifyIdKey = `report_week_classify_id` default: br.Msg = "报告类型异常" return } reportClassifyId, err := company.GetReportClassifyIdByConfigKey(classifyIdKey) if err != nil { br.Msg = "获取分类ID配置失败" br.ErrMsg = "获取配置失败,key:" + classifyIdKey br.IsSendEmail = false return } // 设置章节类型的暂停时间 if err := models.SetDayWeekReportUpdateRule(reportClassifyId, req.List); err != nil { br.Msg = "设置暂停时间失败" br.ErrMsg = "设置暂停时间失败, Err: " + err.Error() return } // 同步eta系统的章节更新配置 go func() { ruleSyncReq := new(services.EditReportChapterTypeRuleSyncReq) ruleSyncReq.ReportClassifyId = reportClassifyId _, _ = services.EditReportChapterTypeRuleSync(ruleSyncReq) }() br.Ret = 200 br.Success = true br.Msg = "操作成功" } // SetDayWeekReportEnableRule // @Title 设置晨报周报的永久暂停更新规则 // @Description 设置晨报周报的永久暂停更新规则 // @Param request body models.SetDayWeekReportEnableUpdateRuleReq true "type json string" // @Success 200 string "操作成功" // @router /setDayWeekReportEnableUpdateRule [post] func (this *ReportController) SetDayWeekReportEnableRule() { 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 models.SetDayWeekReportEnableUpdateRuleReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } dayReportChapterTypeIdList := strings.Split(req.DayReportChapterTypeId, ",") weekReportChapterTypeIdList := strings.Split(req.WeekReportChapterTypeId, ",") //if len(reportChapterTypeIdList) <= 0 { // br.Msg = "报告类型选择异常" // br.IsSendEmail = false // return //} // 设置章节类型的禁用状态 if err := models.SetDayWeekReportEnableUpdateRule(dayReportChapterTypeIdList, weekReportChapterTypeIdList); err != nil { br.Msg = "设置永久停更失败" br.ErrMsg = "设置永久停更失败, Err: " + err.Error() return } // 同步eta系统的章节更新配置 go func() { ruleSyncReq := new(services.EditReportChapterTypeRuleSyncReq) _, _ = services.EditReportChapterTypeRuleSync(ruleSyncReq) }() br.Ret = 200 br.Success = true br.Msg = "操作成功" } // GetStopDayWeekReportChapterTypeList // @Title 获取暂停更新的晨报周报章节类型列表 // @Description 获取暂停更新的晨报周报章节类型列表 // @Success 200 {object} models.ReportListResp // @router /getStopDayWeekReportChapterTypeList [get] func (this *ReportController) GetStopDayWeekReportChapterTypeList() { 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 } stopDay := make([]*models.ReportChapterType, 0) stopWeek := make([]*models.ReportChapterType, 0) disableDay := make([]*models.ReportChapterType, 0) disableWeek := make([]*models.ReportChapterType, 0) stopList, err := models.GetStopUpdateReportChapterTypeListByResearchType() if err != nil { br.Msg = "获取暂停更新报告章节类型列表失败" br.ErrMsg = "获取暂停更新报告章节类型列表失败, Err: " + err.Error() return } dayClassifyId, err := company.GetReportClassifyIdByConfigKey("report_day_classify_id") if err != nil { br.Msg = "获取晨报ID配置失败" br.ErrMsg = "获取配置失败" br.IsSendEmail = false return } weekClassifyId, err := company.GetReportClassifyIdByConfigKey("report_week_classify_id") if err != nil { br.Msg = "获取周报ID配置失败" br.ErrMsg = "获取配置失败" br.IsSendEmail = false return } for _, v := range stopList { if v.ReportClassifyId == dayClassifyId { stopDay = append(stopDay, v) } else if v.ReportClassifyId == weekClassifyId { stopWeek = append(stopWeek, v) } } disableList, err := models.GetDisableUpdateReportChapterTypeListByResearchTypeByClassifyIdList([]int{dayClassifyId, weekClassifyId}) if err != nil { br.Msg = "获取停止更新报告章节类型列表失败" br.ErrMsg = "获取停止更新报告章节类型列表失败, Err: " + err.Error() return } for _, v := range disableList { if v.ReportClassifyId == dayClassifyId { disableDay = append(disableDay, v) } else if v.ReportClassifyId == weekClassifyId { disableWeek = append(disableWeek, v) } } resp := models.StopUpdateReportChapterTypeResp{ StopDay: stopDay, StopWeek: stopWeek, DisableDay: disableDay, DisableWeek: disableWeek, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 图片上传 // @Description 图片上传接口 // @Param File query file true "文件" // @Success 200 上传成功 // @router /uploadImg [post] func (this *ReportUploadCommonController) UploadImg() { var err error defer func() { if err != nil { fmt.Println("文件上传失败:", err.Error()) go alarm_msg.SendAlarmMsg("URI:"+this.Ctx.Input.URI()+" 文件上传失败:"+err.Error(), 3) //go utils.SendEmail(utils.APPNAME+"失败提醒", "URI:"+this.Ctx.Input.URI()+" 文件上传失败:"+err.Error(), utils.EmailSendToUsers) } }() f, h, err := this.GetFile("file") if err != nil { return } ext := path.Ext(h.Filename) dateDir := time.Now().Format("20060102") uploadDir := utils.STATIC_DIR + "hongze/" + dateDir err = os.MkdirAll(uploadDir, 777) if err != nil { return } randStr := utils.GetRandStringNoSpecialChar(28) fileName := randStr + ext fpath := uploadDir + "/" + fileName defer f.Close() //关闭上传文件 err = this.SaveToFile("file", fpath) if err != nil { return } //上传到阿里云 resourceUrl, err := services.UploadAliyunV2(fileName, fpath) if err != nil { return } defer func() { os.Remove(fpath) }() item := new(models.Resource) item.ResourceUrl = resourceUrl item.ResourceType = 1 item.CreateTime = time.Now() newId, err := models.AddResource(item) if err != nil { return } resp := new(models.ResourceResp) resp.Id = newId resp.ResourceUrl = resourceUrl this.Data["json"] = map[string]string{"link": resourceUrl} this.ServeJSON() }