|
@@ -0,0 +1,539 @@
|
|
|
+package help_doc
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "hongze/hz_crm_api/controllers"
|
|
|
+ "hongze/hz_crm_api/models"
|
|
|
+ "hongze/hz_crm_api/models/help_doc"
|
|
|
+ "hongze/hz_crm_api/services/data"
|
|
|
+ "hongze/hz_crm_api/utils"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+type HelpDocClassifyController struct {
|
|
|
+ controllers.BaseAuthController
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *HelpDocClassifyController) ListClassify() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ keyWord := this.GetString("KeyWord")
|
|
|
+
|
|
|
+ resp := new(help_doc.HelpDocClassifyListResp)
|
|
|
+
|
|
|
+ rootList, err := help_doc.GetHelpDocClassifyByParentId(0, "")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ docAll, err := help_doc.GetAllHelpDoc()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyMap := make(map[int]int,0)
|
|
|
+ for _, v := range docAll {
|
|
|
+ classifyMap[v.ClassifyId] = 1
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyAll := make([]*help_doc.HelpDocClassifyItems, 0)
|
|
|
+ newClassifyAll := make([]*help_doc.HelpDocClassifyItems, 0)
|
|
|
+ newRootList := make([]help_doc.HelpDocClassifyItems, 0)
|
|
|
+
|
|
|
+ classifyAllMap := make(map[int]*help_doc.HelpDocClassifyItems, 0)
|
|
|
+ classifyKeyMap := make(map[int]*help_doc.HelpDocClassifyItems, 0)
|
|
|
+ rootMap := make(map[*help_doc.HelpDocClassifyItems]int, 0)
|
|
|
+ if keyWord != "" {
|
|
|
+ classifyAll, err = help_doc.GetAllHelpDocClassifyByKeyword("")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range classifyAll {
|
|
|
+ classifyAllMap[v.ClassifyId] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ keywordClassify, err := help_doc.GetAllHelpDocClassifyByKeyword(keyWord)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range keywordClassify {
|
|
|
+ if v.Level == 3 {
|
|
|
+ ppid := classifyAllMap[v.ParentId].ParentId
|
|
|
+
|
|
|
+ rootMap[classifyAllMap[ppid]] = 1
|
|
|
+ classifyKeyMap[v.ClassifyId] = v
|
|
|
+ classifyKeyMap[v.ParentId] = classifyAllMap[v.ParentId]
|
|
|
+ } else if v.Level == 2{
|
|
|
+ pid := classifyAllMap[v.ParentId].ClassifyId
|
|
|
+
|
|
|
+ rootMap[classifyAllMap[pid]] = 1
|
|
|
+ classifyKeyMap[v.ClassifyId] = v
|
|
|
+ } else if v.Level == 1 {
|
|
|
+
|
|
|
+ rootMap[v] = 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for v, _ := range rootMap {
|
|
|
+ newRootList = append(newRootList, *v)
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range classifyKeyMap {
|
|
|
+ if v.Level != 1 {
|
|
|
+ newClassifyAll = append(newClassifyAll, v)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ classifyAll, err = help_doc.GetHelpDocClassifyAll("")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ newRootList = rootList
|
|
|
+ newClassifyAll = classifyAll
|
|
|
+ }
|
|
|
+
|
|
|
+ for k := range newClassifyAll {
|
|
|
+ _,ok := classifyMap[newClassifyAll[k].ClassifyId]
|
|
|
+ newClassifyAll[k].Disabled = ok
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ nodeAll := make([]*help_doc.HelpDocClassifyItems, 0)
|
|
|
+ for k := range newRootList {
|
|
|
+ rootNode := newRootList[k]
|
|
|
+ data.HelpDocClassifyItemsMakeTree(newClassifyAll, &rootNode)
|
|
|
+ nodeAll = append(nodeAll, &rootNode)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ classifyLevel, err := help_doc.GetHelpDocClassifyLevel()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for k := range classifyLevel {
|
|
|
+ _,ok := classifyMap[classifyLevel[k].ClassifyId]
|
|
|
+ classifyLevel[k].Disabled = ok
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ nodeAllTwoLevel := make([]*help_doc.HelpDocClassifyItems, 0)
|
|
|
+ for k := range rootList {
|
|
|
+ rootNode := rootList[k]
|
|
|
+ data.HelpDocClassifyItemsMakeTree(classifyLevel, &rootNode)
|
|
|
+ nodeAllTwoLevel = append(nodeAllTwoLevel, &rootNode)
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.AllNodes = nodeAll
|
|
|
+ resp.TwoLevelNodes = nodeAllTwoLevel
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *HelpDocClassifyController) AddClassify() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req help_doc.AddHelpDocClassifyReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.HelpDocClassifyName == "" {
|
|
|
+ br.Msg = "请输入分类名称"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.ParentId < 0 {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ count, err := help_doc.GetHelpDocClassifyCount(req.HelpDocClassifyName, req.ParentId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "判断名称是否已存在失败"
|
|
|
+ br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 0 {
|
|
|
+ br.Msg = "分类名称已存在,请重新输入"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ maxSort, err := help_doc.GetHelpDocClassifyMaxSort(req.ParentId)
|
|
|
+
|
|
|
+ classify := new(help_doc.HelpDocClassify)
|
|
|
+ classify.ParentId = req.ParentId
|
|
|
+ classify.ClassifyName = req.HelpDocClassifyName
|
|
|
+ classify.CreateTime = time.Now()
|
|
|
+ classify.ModifyTime = time.Now()
|
|
|
+ classify.SysUserId = this.SysUser.AdminId
|
|
|
+ classify.SysUserRealName = this.SysUser.RealName
|
|
|
+ classify.Level = req.Level + 1
|
|
|
+ classify.Sort = maxSort + 1
|
|
|
+
|
|
|
+ _, err = help_doc.AddHelpDocClassify(classify)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存分类失败"
|
|
|
+ br.ErrMsg = "保存分类失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Msg = "保存成功"
|
|
|
+ br.Success = true
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *HelpDocClassifyController) EditClassify() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req help_doc.EditHelpDocClassifyReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.HelpDocClassifyName == "" {
|
|
|
+ br.Msg = "请输入分类名称"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.HelpDocClassifyId <= 0 {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ item, err := help_doc.GetHelpDocClassifyById(req.HelpDocClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.Msg = "获取分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if item.ClassifyName != req.HelpDocClassifyName {
|
|
|
+ count, err := help_doc.GetHelpDocClassifyCount(req.HelpDocClassifyName, item.ParentId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "判断名称是否已存在失败"
|
|
|
+ br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 0 {
|
|
|
+ br.Msg = "分类名称已存在,请重新输入"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ err = help_doc.EditHelpDocClassify(req.HelpDocClassifyId, req.HelpDocClassifyName)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.ErrMsg = "保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Msg = "保存成功"
|
|
|
+ br.Success = true
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *HelpDocClassifyController) DelClassify() {
|
|
|
+ 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
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyId, _ := this.GetInt("ClassifyId")
|
|
|
+
|
|
|
+ _, err := help_doc.GetHelpDocClassifyById(classifyId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ br.Msg = "当前分类不存在"
|
|
|
+ br.ErrMsg = "当前分类不存在"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Msg = "获取分类信息失败"
|
|
|
+ br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ count, err := help_doc.GetHelpDocClassifyChildCounts(classifyId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取信息失败"
|
|
|
+ br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if count > 0 {
|
|
|
+ br.Msg = "请先删除该分类下关联分类"
|
|
|
+ br.Ret = 403
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ reportCount, e := help_doc.GetHelpDocCounts(classifyId)
|
|
|
+ if e != nil && e.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取信息失败"
|
|
|
+ br.ErrMsg = "获取失败,Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if reportCount > 0 {
|
|
|
+ br.Msg = "该分类已关联文章,不允许删除!"
|
|
|
+ br.Ret = 403
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if err = help_doc.DeleteHelpDocClassify(classifyId); err != nil {
|
|
|
+ br.Msg = "删除失败"
|
|
|
+ br.ErrMsg = "删除分类失败, Err: " + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "删除成功"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *HelpDocClassifyController) ClassifyMove() {
|
|
|
+ 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 help_doc.MoveClassifyReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.ClassifyId <= 0 {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ br.ErrMsg = "分类id小于等于0"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyInfo, err := help_doc.GetHelpDocClassifyById(req.ClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "移动失败"
|
|
|
+ br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ updateCol := make([]string, 0)
|
|
|
+
|
|
|
+
|
|
|
+ if classifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
|
|
|
+ parentClassifyInfo, err := help_doc.GetHelpDocClassifyById(req.ParentClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "移动失败"
|
|
|
+ br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ classifyInfo.ParentId = parentClassifyInfo.ClassifyId
|
|
|
+ classifyInfo.Level = parentClassifyInfo.Level + 1
|
|
|
+ classifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if req.PrevClassifyId > 0 {
|
|
|
+
|
|
|
+ prevClassify, err := help_doc.GetHelpDocClassifyById(req.PrevClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "移动失败"
|
|
|
+ br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if req.NextClassifyId > 0 {
|
|
|
+
|
|
|
+ nextClassify, err := help_doc.GetHelpDocClassifyById(req.NextClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "移动失败"
|
|
|
+ br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == classifyInfo.Sort {
|
|
|
+
|
|
|
+ updateSortStr := `sort + 2`
|
|
|
+ _ = help_doc.UpdateHelpDocClassifySortByParentId(prevClassify.ParentId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr)
|
|
|
+ } else {
|
|
|
+
|
|
|
+ if nextClassify.Sort-prevClassify.Sort == 1 {
|
|
|
+
|
|
|
+ updateSortStr := `sort + 1`
|
|
|
+ _ = help_doc.UpdateHelpDocClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyInfo.Sort = prevClassify.Sort + 1
|
|
|
+ classifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+
|
|
|
+ } else {
|
|
|
+ firstClassify, err := help_doc.GetFirstHelpDocClassifyByParentId(classifyInfo.ParentId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "移动失败"
|
|
|
+ br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if firstClassify != nil && firstClassify.Sort == 0 {
|
|
|
+ updateSortStr := ` sort + 1 `
|
|
|
+ _ = help_doc.UpdateHelpDocClassifySortByParentId(firstClassify.ParentId, firstClassify.ClassifyId-1, 0, updateSortStr)
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyInfo.Sort = 0
|
|
|
+ classifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if len(updateCol) > 0 {
|
|
|
+ err = classifyInfo.Update(updateCol)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "移动失败"
|
|
|
+ br.ErrMsg = "修改失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "移动成功"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *HelpDocClassifyController) EditClassifyVisible() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req help_doc.EditHelpDocClassifyVisibleReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.HelpDocClassifyId <= 0 {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ err = help_doc.EditHelpDocClassifyVisible(req.HelpDocClassifyId, req.VisibleBusinessIds)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.ErrMsg = "保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Msg = "保存成功"
|
|
|
+ br.Success = true
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|