package english_report import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "eta/eta_api/controllers" "eta/eta_api/models" "eta/eta_api/models/system" "eta/eta_api/services" "eta/eta_api/utils" "html" "time" ) // EnglishCompanyTodoController 英文客户-TODO任务 type EnglishCompanyTodoController struct { controllers.BaseAuthController } // List // @Title 任务列表 // @Description 任务列表 // @Param CompanyId query int true "客户ID" // @Param SortType query int false "创建时间排序:1-降序; 2-升序" // @Success 200 {object} []models.EnglishCompanyTodoListItem // @router /company_todo/list [get] func (this *EnglishCompanyTodoController) 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 } companyId, _ := this.GetInt("CompanyId") if companyId <= 0 { br.Msg = "请选择客户" return } authList := services.GetEnglishCompanyTodoAuthRole() if !utils.InArrayByStr(authList, sysUser.RoleTypeCode) { br.Msg = "账号角色异常,不允许查看任务" return } var startSize int pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) var order string sortType, _ := this.GetInt("SortType", 0) if sortType == 2 { order = ` ORDER BY a.create_time ASC ` } // 获取任务列表 total, todoList, err := models.GetEnglishCompanyTodoList(companyId, startSize, pageSize, order) if err != nil { br.Msg = "获取任务列表失败" br.ErrMsg = "获取英文客户任务列表失败,err:" + err.Error() return } list := make([]*models.EnglishCompanyTodoResp, 0) for _, v := range todoList { td := &models.EnglishCompanyTodoResp{ Id: v.Id, CompanyId: v.CompanyId, Content: v.Content, SellerId: v.SellerId, SellerName: v.SellerName, CreateUserId: v.CreateUserId, CreateUserName: v.CreateUserName, ApproveUserId: v.ApproveUserId, ApproveUserName: v.ApproveUserName, Status: v.Status, CreateTime: v.CreateTime.Format(utils.FormatDateTime), EndTime: v.EndTime.Format(utils.FormatDateTime), ApproveTime: v.ApproveTime.Format(utils.FormatDateTime), EndTimeStr: v.EndTime.Format(utils.FormatDate), Remark: v.Remark, } if td.EndTimeStr == "0001-01-01" { td.EndTimeStr = "" } if td.ApproveTime == "0001-01-01 00:00:00" { td.ApproveTime = "" } list = append(list, td) } page := paging.GetPaging(currentIndex, pageSize, total) resp := &models.GetEnglishCompanyTodoPageListResp{ Paging: page, List: list, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // Add // @Title 新增任务 // @Description 新增任务接口 // @Param request body models.EnglishCompanyTodoAddReq true "type json string" // @Success 200 操作成功 // @router /company_todo/add [post] func (this *EnglishCompanyTodoController) 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 } var req models.EnglishCompanyTodoAddReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.CompanyId <= 0 { br.Msg = "请选择客户" br.ErrMsg = "客户ID不能为空" return } if req.Description == "" { br.Msg = "任务描述不能为空" return } if req.EndTime == "" { br.Msg = "请选择截止日期" return } endTime, e := time.ParseInLocation(utils.FormatDate, req.EndTime, time.Local) if e != nil { br.Msg = "截止日期格式错误" return } description := utils.TrimStr(req.Description) // 客户、销售信息 companyId := req.CompanyId companyInfo, e := models.GetEnglishCompanyById(companyId) if e != nil { br.Msg = "保存失败" br.ErrMsg = "获取英文客户失败, Err: " + e.Error() return } sellerInfo, e := system.GetSysUserById(companyInfo.SellerId) if e != nil { br.Msg = "保存失败" br.ErrMsg = "获取英文客户销售信息失败, Err: " + e.Error() return } // 校验操作权限 ok, msg, e := services.CheckEnglishCompanyTodoAuth(sysUser, sellerInfo) if e != nil { br.Msg = "保存失败" br.ErrMsg = "校验英文客户TODO操作权限失败, Err: " + e.Error() return } if !ok { br.Msg = msg return } // 获取处理中的任务数 ingCount, e := models.GetCountDoingEnglishCompanyTodo(companyId) if e != nil { br.Msg = "保存失败" br.ErrMsg = "获取处理中的任务数失败, Err: " + e.Error() return } if ingCount > 0 { br.Msg = "当前存在待处理的任务,不允许添加新的任务待办" return } // 新增任务 nowTime := time.Now().Local() newTodo := &models.EnglishCompanyTodo{ CompanyId: companyId, Content: description, SellerId: companyInfo.SellerId, SellerName: companyInfo.SellerName, CreateUserId: sysUser.AdminId, CreateUserName: sysUser.RealName, Status: models.EnglishCompanyTodoStatusDoing, CreateTime: nowTime, ModifyTime: nowTime, EndTime: endTime, } if e = newTodo.Create(); e != nil { br.Msg = "保存失败" br.ErrMsg = "新增英文客户TODO待办失败, Err: " + e.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" } // Edit // @Title 编辑任务 // @Description 编辑任务 // @Param request body models.EnglishCompanyTodoEditReq true "type json string" // @Success 200 操作成功 // @router /company_todo/edit [post] func (this *EnglishCompanyTodoController) Edit() { 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.EnglishCompanyTodoEditReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Id <= 0 { br.Msg = "请选择待办任务" br.ErrMsg = "待办任务ID不能为空" return } if req.Description == "" { br.Msg = "任务描述不能为空" return } if req.EndTime == "" { br.Msg = "请输入截止日期" return } endTime, err := time.ParseInLocation(utils.FormatDate, req.EndTime, time.Local) if err != nil { br.Msg = "截止日期格式错误" return } description := utils.TrimStr(req.Description) // 客户、销售信息 companyId := req.CompanyId companyInfo, e := models.GetEnglishCompanyById(companyId) if e != nil { br.Msg = "保存失败" br.ErrMsg = "获取英文客户失败, Err: " + e.Error() return } sellerInfo, e := system.GetSysUserById(companyInfo.SellerId) if e != nil { br.Msg = "保存失败" br.ErrMsg = "获取英文客户销售信息失败, Err: " + e.Error() return } // 校验操作权限 ok, msg, e := services.CheckEnglishCompanyTodoAuth(sysUser, sellerInfo) if e != nil { br.Msg = "保存失败" br.ErrMsg = "校验英文客户TODO操作权限失败, Err: " + e.Error() return } if !ok { br.Msg = msg return } // 校验任务状态 todoInfo, e := models.GetEnglishCompanyTodoById(req.Id) if e != nil { br.Msg = "保存失败" br.ErrMsg = "获取英文客户TODO信息失败, Err: " + e.Error() return } if todoInfo.Status != models.EnglishCompanyTodoStatusDoing { br.Msg = `任务状态异常: ` + todoInfo.Status + `, 不允许编辑该任务待办` return } // 编辑任务 todoInfo.Content = description todoInfo.SellerId = sellerInfo.AdminId todoInfo.SellerName = sellerInfo.RealName todoInfo.ModifyTime = time.Now() todoInfo.EndTime = endTime updateCols := []string{"Content", "SellerId", "SellerName", "ModifyTime", "EndTime"} if e = todoInfo.Update(updateCols); e != nil { br.Msg = "保存失败" br.ErrMsg = "编辑英文客户TODO待办失败, Err: " + e.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" } // Approve // @Title 审批任务 // @Description 审批任务接口 // @Param request body models.EnglishCompanyTodoApproveReq true "type json string" // @Success 200 操作成功 // @router /company_todo/approve [post] func (this *EnglishCompanyTodoController) Approve() { 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.EnglishCompanyTodoApproveReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.Id <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误,任务编号必传 " return } // 校验任务状态 todoInfo, e := models.GetEnglishCompanyTodoById(req.Id) if e != nil { br.Msg = "审核失败" br.ErrMsg = "获取英文客户TODO信息失败, Err: " + e.Error() return } if todoInfo.Status != models.EnglishCompanyTodoStatusDoing { br.Msg = `任务状态异常: ` + todoInfo.Status + `, 不允许审核该任务待办` return } // 客户、销售信息 companyInfo, e := models.GetEnglishCompanyById(todoInfo.CompanyId) if e != nil { br.Msg = "审核失败" br.ErrMsg = "获取英文客户失败, Err: " + e.Error() return } sellerInfo, e := system.GetSysUserById(companyInfo.SellerId) if e != nil { br.Msg = "审核失败" br.ErrMsg = "获取英文客户销售信息失败, Err: " + e.Error() return } switch sysUser.RoleTypeCode { case utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_FICC_DEPARTMENT, utils.ROLE_TYPE_CODE_FICC_RESEARCHR: break case utils.ROLE_TYPE_CODE_FICC_GROUP: same, e := services.CheckAdminIsSameBigGroup(sysUser, sellerInfo) if e != nil { br.Msg = "审核失败" br.ErrMsg = "判断主管与客户所属销售是否属于同一大组失败, Err: " + e.Error() return } if !same { br.Msg = "该客户销售不是当前账号所属组员,不允许审批任务" return } case utils.ROLE_TYPE_CODE_FICC_TEAM: if sellerInfo.GroupId != sysUser.GroupId { br.Msg = "该客户销售不是当前账号所属组员,不允许审批任务" return } default: br.Msg = `操作人角色异常, 不允许审批任务: ` + sysUser.RoleName return } todoInfo.Status = "已完成" todoInfo.ApproveUserId = sysUser.AdminId todoInfo.ApproveUserName = sysUser.RealName todoInfo.ModifyTime = time.Now() todoInfo.ApproveTime = time.Now() todoInfo.ApprovedSellerId = sellerInfo.AdminId todoInfo.ApprovedSellerName = sellerInfo.RealName todoInfo.Remark = req.Remark updateCols := []string{"Status", "ApproveUserId", "ApproveUserName", "ModifyTime", "ApproveTime", "ApprovedSellerId", "ApprovedSellerName", "Remark"} if e = todoInfo.Update(updateCols); e != nil { br.Msg = "审核失败" br.ErrMsg = "更新英文客户TODO任务审核信息失败, Err: " + e.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" } // EditList // @Title 进行中任务列表 // @Description 进行中任务列表 // @Param CompanyId query int true "客户ID" // @Success 200 {object} []models.EnglishCompanyTodoListItem // @router /company_todo/edit_list [get] func (this *EnglishCompanyTodoController) EditList() { 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 } companyId, _ := this.GetInt("CompanyId") if companyId <= 0 { br.Msg = "请选择客户" return } authList := services.GetEnglishCompanyTodoAuthRole() if !utils.InArrayByStr(authList, sysUser.RoleTypeCode) { br.Msg = "账号角色异常,不允许查看任务" return } // 获取进行中的任务信息 todoList, e := models.GetDoingEnglishCompanyTodoList(companyId) if e != nil { br.Msg = "获取任务信息失败" br.ErrMsg = "获取任务信息失败,err:" + e.Error() return } list := make([]*models.EnglishCompanyTodoResp, 0) for _, v := range todoList { td := &models.EnglishCompanyTodoResp{ Id: v.Id, CompanyId: v.CompanyId, Content: v.Content, SellerId: v.SellerId, SellerName: v.SellerName, CreateUserId: v.CreateUserId, CreateUserName: v.CreateUserName, ApproveUserId: v.ApproveUserId, ApproveUserName: v.ApproveUserName, Status: v.Status, CreateTime: v.CreateTime.Format(utils.FormatDateTime), EndTime: v.EndTime.Format(utils.FormatDateTime), ApproveTime: v.ApproveTime.Format(utils.FormatDateTime), EndTimeStr: v.EndTime.Format(utils.FormatDate), } if td.EndTimeStr == "0001-01-01" { td.EndTimeStr = "" } if td.ApproveTime == "0001-01-01 00:00:00" { td.ApproveTime = "" } list = append(list, td) } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = list } // LastPublicTodo // @Title 获取最新的公共TODO // @Description 获取最新的公共TODO // @Success 200 {object} models.GetEnglishCompanyTodoDoingPageListResp // @router /company_todo/last_public_todo [get] func (this *EnglishCompanyTodoController) LastPublicTodo() { 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 } item, e := models.GetLastEnglishCompanyTodoPublic() if e != nil && e.Error() != utils.ErrNoRow() { br.Msg = "获取失败" br.ErrMsg = "获取最新的公共TODO失败, Err: " + e.Error() return } if item != nil { resp := &models.EnglishCompanyTodoPublicResp{ Content: html.UnescapeString(item.Content), CreateUserId: item.CreateUserId, CreateUserName: item.CreateUserName, ModifyTime: item.ModifyTime.Format(utils.FormatDateTime), CreateTime: item.CreateTime.Format(utils.FormatDateTime), } br.Data = resp } br.Ret = 200 br.Success = true br.Msg = "获取成功" } // AddPublic // @Title 新增公共任务 // @Description 新增公共任务接口 // @Param request body models.EnglishCompanyTodoPublicAddReq true "type json string" // @Success 200 操作成功 // @router /company_todo/add_public [post] func (this *EnglishCompanyTodoController) AddPublic() { 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.EnglishCompanyTodoPublicAddReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } // 新增公共任务 nowTime := time.Now().Local() newTodo := &models.EnglishCompanyTodoPublic{ Content: html.EscapeString(req.Description), CreateUserId: sysUser.AdminId, CreateUserName: sysUser.RealName, CreateTime: nowTime, ModifyTime: nowTime, } if e := newTodo.Create(); e != nil { br.Msg = "保存失败" br.ErrMsg = "新增英文客户公共TODO失败, Err: " + e.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" } // DoingList // @Title 未完成的任务列表 // @Description 未完成的任务列表 // @Param PageSize query int true "每页数据量" // @Param CurrentIndex query int true "当前页码" // @Param SortType query int false "截止日期排序: 0-默认(截止日期正序); 1-正序; 2-倒序" // @Success 200 {object} models.GetEnglishCompanyTodoDoingPageListResp // @router /company_todo/doing_list [get] func (this *EnglishCompanyTodoController) DoingList() { 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 startSize int pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) var order string sortType, _ := this.GetInt("SortType", 0) if sortType == 2 { order = ` ORDER BY a.end_time DESC ` } // 获取任务列表 total, todoList, err := models.GetEnglishCompanyTodoDoingList(startSize, pageSize, order) if err != nil { br.Msg = "获取任务列表失败" br.ErrMsg = "获取英文客户任务列表失败,err:" + err.Error() return } list := make([]*models.EnglishCompanyTodoDoingResp, 0) for _, v := range todoList { td := &models.EnglishCompanyTodoDoingResp{ Id: v.Id, CompanyId: v.CompanyId, CompanyName: v.CompanyName, Content: v.Content, SellerId: v.SellerId, SellerName: v.SellerName, CreateUserId: v.CreateUserId, CreateUserName: v.CreateUserName, ApproveUserId: v.ApproveUserId, ApproveUserName: v.ApproveUserName, Status: v.Status, CreateTime: v.CreateTime.Format(utils.FormatDateTime), EndTime: v.EndTime.Format(utils.FormatDate), ApproveTime: v.ApproveTime.Format(utils.FormatDateTime), Remark: v.Remark, } if td.EndTime == "0001-01-01" { td.EndTime = "" } if td.ApproveTime == "0001-01-01 00:00:00" { td.ApproveTime = "" } list = append(list, td) } page := paging.GetPaging(currentIndex, pageSize, total) resp := &models.GetEnglishCompanyTodoDoingPageListResp{ Paging: page, List: list, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp }