Browse Source

Merge branch 'master' into CRM_14.7.2

# Conflicts:
#	services/company.go
zwxi 11 tháng trước cách đây
mục cha
commit
badde0215a
54 tập tin đã thay đổi với 1989 bổ sung680 xóa
  1. 58 110
      controllers/classify.go
  2. 127 93
      controllers/company.go
  3. 94 54
      controllers/company_apply.go
  4. 29 21
      controllers/company_approval.go
  5. 128 92
      controllers/company_permission.go
  6. 24 12
      controllers/company_user.go
  7. 58 13
      controllers/contract/contract.go
  8. 34 4
      controllers/contract/contract_approval.go
  9. 9 10
      controllers/cygx/activity.go
  10. 47 2
      controllers/cygx/activity_signup.go
  11. 4 4
      controllers/cygx/activity_special_trip.go
  12. 3 1
      controllers/cygx/apply_record.go
  13. 2 1
      controllers/cygx/contract_allocation.go
  14. 10 9
      controllers/cygx/industrial_management.go
  15. 23 0
      controllers/cygx/summary_manage.go
  16. 88 1
      controllers/cygx/yanxuan_special.go
  17. 2 2
      controllers/english_report/en_permission.go
  18. 7 0
      controllers/english_report/english_company.go
  19. 69 48
      controllers/full_company.go
  20. 11 4
      controllers/help_doc/doc.go
  21. 12 0
      controllers/report.go
  22. 150 0
      controllers/report_chapter_type.go
  23. 128 0
      controllers/roadshow/report.go
  24. 8 33
      models/advisory/chart_permission.go
  25. 33 15
      models/chart_permission.go
  26. 3 3
      models/classify.go
  27. 2 2
      models/company/company.go
  28. 60 15
      models/company/company_permission.go
  29. 12 0
      models/company/company_product.go
  30. 11 2
      models/contract/contract_service_detail.go
  31. 1 0
      models/cygx/article_department.go
  32. 10 10
      models/cygx/chart_permission.go
  33. 12 0
      models/cygx/cygx_yanxuan_special_user.go
  34. 2 2
      models/eta_trial/eta_trial.go
  35. 7 1
      models/help_doc/help_doc.go
  36. 11 16
      models/report_chapter_type.go
  37. 178 0
      models/roadshow/calendar.go
  38. 2 1
      models/system/sys_admin.go
  39. 27 1
      models/wx_user.go
  40. 45 0
      routers/commentsRouter.go
  41. 1 0
      routers/router.go
  42. 184 0
      services/classify.go
  43. 11 8
      services/company.go
  44. 53 2
      services/company_permission.go
  45. 51 51
      services/contract/contract.go
  46. 1 0
      services/cygx/acitvity.go
  47. 0 1
      services/cygx/activity_points_set.go
  48. 5 6
      services/cygx/activity_power_check.go
  49. 4 4
      services/cygx/activity_special.go
  50. 2 2
      services/cygx/mail.go
  51. 81 0
      services/report_chapter_type_sync.go
  52. 23 13
      services/yb/road_video.go
  53. 20 0
      utils/common.go
  54. 12 11
      utils/constants.go

+ 58 - 110
controllers/classify.go

@@ -1,8 +1,9 @@
 package controllers
 package controllers
 
 
 import (
 import (
-	"github.com/rdlucklib/rdluck_tools/paging"
+	"encoding/json"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/services"
 	"hongze/hz_crm_api/utils"
 	"hongze/hz_crm_api/utils"
 )
 )
 
 
@@ -11,10 +12,9 @@ type ClassifyController struct {
 	BaseAuthController
 	BaseAuthController
 }
 }
 
 
+// ListClassify
 // @Title 获取分类列表
 // @Title 获取分类列表
 // @Description 获取分类列表
 // @Description 获取分类列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Param   KeyWord   query   string  true       "检索关键词"
 // @Param   KeyWord   query   string  true       "检索关键词"
 // @Param   CompanyType   query   string  false       "产品类型,枚举值:'ficc','权益';不传默认返回全部"
 // @Param   CompanyType   query   string  false       "产品类型,枚举值:'ficc','权益';不传默认返回全部"
 // @Param   HideDayWeek   query   int  false       "是否隐藏晨周报"
 // @Param   HideDayWeek   query   int  false       "是否隐藏晨周报"
@@ -26,123 +26,21 @@ func (this *ClassifyController) ListClassify() {
 		this.Data["json"] = br
 		this.Data["json"] = br
 		this.ServeJSON()
 		this.ServeJSON()
 	}()
 	}()
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
 	keyWord := this.GetString("KeyWord")
 	keyWord := this.GetString("KeyWord")
 	companyType := this.GetString("CompanyType")
 	companyType := this.GetString("CompanyType")
 	hideDayWeek, _ := this.GetInt("HideDayWeek")
 	hideDayWeek, _ := this.GetInt("HideDayWeek")
 
 
-	var startSize int
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-
-	startSize = utils.StartIndex(currentIndex, pageSize)
-	list, err := models.GetClassifyList(startSize, pageSize, keyWord, companyType, hideDayWeek)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	total, err := models.GetClassifyListCount(keyWord, companyType, hideDayWeek)
+	req := new(services.GetClassifyListReq)
+	req.Keyword = keyWord
+	req.CompanyType = companyType
+	req.HideDayWeek = hideDayWeek
+	resp, err := services.GetClassifyList(req)
 	if err != nil {
 	if err != nil {
 		br.Msg = "获取失败"
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 		return
 	}
 	}
 
 
-	parentIds := make([]int, 0)
-	for i := range list {
-		parentIds = append(parentIds, list[i].Id)
-	}
-	parentIdLen := len(parentIds)
-	if parentIdLen == 0 {
-		resp := &models.ClassifyListResp{
-			List:   list,
-			Paging: paging.GetPaging(currentIndex, pageSize, 0),
-		}
-		br.Data = resp
-		br.Ret = 200
-		br.Success = true
-		br.Msg = "获取成功"
-		return
-	}
-
-	// 获取一级分类-子目录列表
-	menuListMap := make(map[int][]*models.ClassifyMenu, 0)
-	var menuCond string
-	var menuPars []interface{}
-	menuCond += ` AND classify_id IN (` + utils.GetOrmInReplace(parentIdLen) + `)`
-	menuPars = append(menuPars, parentIds)
-	parentMenus, e := models.GetClassifyMenuList(menuCond, menuPars)
-	if e != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取一级分类子目录列表失败"
-		return
-	}
-	for i := range parentMenus {
-		if menuListMap[parentMenus[i].ClassifyId] == nil {
-			menuListMap[parentMenus[i].ClassifyId] = make([]*models.ClassifyMenu, 0)
-		}
-		menuListMap[parentMenus[i].ClassifyId] = append(menuListMap[parentMenus[i].ClassifyId], parentMenus[i])
-	}
-
-	// 获取子分类
-	children, e := models.GetClassifyChildByParentIds(parentIds, keyWord)
-	if e != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取子分类失败"
-		return
-	}
-	childrenIds := make([]int, 0)
-	for i := range children {
-		childrenIds = append(childrenIds, children[i].Id)
-	}
-	childrenIdsLen := len(childrenIds)
-
-	// 获取二级分类-子目录关联
-	relateMap := make(map[int]int, 0)
-	if childrenIdsLen > 0 {
-		var relateCond string
-		var relatePars []interface{}
-		relateCond += ` AND classify_id IN (` + utils.GetOrmInReplace(childrenIdsLen) + `)`
-		relatePars = append(relatePars, childrenIds)
-		relates, e := models.GetClassifyMenuRelationList(relateCond, relatePars)
-		if e != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取二级分类子目录关联失败, Err: " + e.Error()
-			return
-		}
-		for i := range relates {
-			relateMap[relates[i].ClassifyId] = relates[i].MenuId
-		}
-	}
-
-	// 二级分类
-	childrenMap := make(map[int][]*models.ClassifyItem, 0)
-	for i := range children {
-		if childrenMap[children[i].ParentId] == nil {
-			childrenMap[children[i].ParentId] = make([]*models.ClassifyItem, 0)
-		}
-		childrenMap[children[i].ParentId] = append(childrenMap[children[i].ParentId], &models.ClassifyItem{
-			Classify:       *children[i],
-			ClassifyMenuId: relateMap[children[i].Id],
-		})
-	}
-
-	// 一级分类
-	for i := range list {
-		list[i].ClassifyMenuList = menuListMap[list[i].Id]
-		list[i].Child = childrenMap[list[i].Id]
-	}
-
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(models.ClassifyListResp)
-	resp.List = list
-	resp.Paging = page
 	br.Data = resp
 	br.Data = resp
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true
@@ -154,6 +52,7 @@ func (this *ClassifyController) ListClassify() {
 // @Success 200 {object} models.Classify
 // @Success 200 {object} models.Classify
 // @router /tel_list [get]
 // @router /tel_list [get]
 func (this *ClassifyController) TelListClassify() {
 func (this *ClassifyController) TelListClassify() {
+	// todo 获取电话会 是否需要改成从中间服务项目中获取
 	br := new(models.BaseResponse).Init()
 	br := new(models.BaseResponse).Init()
 	defer func() {
 	defer func() {
 		this.Data["json"] = br
 		this.Data["json"] = br
@@ -189,3 +88,52 @@ func (this *ClassifyController) TelListClassify() {
 	br.Success = true
 	br.Success = true
 	br.Msg = "获取成功"
 	br.Msg = "获取成功"
 }
 }
+
+// Edit
+// @Title 编辑报告分类
+// @Description 编辑报告分类
+// @Param	request  body  services.EditClassifyReq  true  "type json string"
+// @Success 200 string "操作成功"
+// @router /edit [post]
+func (this *ClassifyController) Edit() {
+	br := new(models.BaseResponse).Init()
+	br.IsSendEmail = false
+	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 services.EditClassifyReq
+	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "分类ID有误"
+		return
+	}
+
+	err, errMsg := services.EditReportClassify(&req)
+	if err != nil {
+		br.Msg = errMsg
+		br.ErrMsg = "编辑报告分类失败, Err:" + err.Error()
+		return
+	}
+
+	// 清除小程序端的章节缓存
+	{
+		key := "hongze_yb:report_chapter_type:GetEffectTypeID"
+		_ = utils.Rc.Delete(key)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 127 - 93
controllers/company.go

@@ -462,6 +462,7 @@ func (this *CompanyController) List() {
 	address := this.GetString("Address")
 	address := this.GetString("Address")
 	province := this.GetString("Province")
 	province := this.GetString("Province")
 	city := this.GetString("City")
 	city := this.GetString("City")
+	regionType := this.GetString("RegionType")
 	keyWord = strings.Trim(keyWord, " ")
 	keyWord = strings.Trim(keyWord, " ")
 	keyWord = strings.Replace(keyWord, "'", "", -1)
 	keyWord = strings.Replace(keyWord, "'", "", -1)
 	todoStatus := this.GetString("TodoStatus")      //任务状态
 	todoStatus := this.GetString("TodoStatus")      //任务状态
@@ -580,6 +581,11 @@ func (this *CompanyController) List() {
 		condition += ` AND a.city IN (` + citySql + `) `
 		condition += ` AND a.city IN (` + citySql + `) `
 	}
 	}
 
 
+	if regionType != "" {
+		condition += ` AND a.region_type =? `
+		pars = append(pars, regionType)
+	}
+
 	if keyWord != "" {
 	if keyWord != "" {
 		companyIdStr, err := company.GetCompanyIdByKeyWord(keyWord)
 		companyIdStr, err := company.GetCompanyIdByKeyWord(keyWord)
 		if err != nil {
 		if err != nil {
@@ -2827,6 +2833,13 @@ func (this *CompanyController) Add() {
 			return
 			return
 		}
 		}
 	}
 	}
+
+	// 每个权益销售手中的试用客户最多30个
+	if productId == utils.COMPANY_PRODUCT_RAI_ID && tryOutCount >= utils.COMPANY_STATUS_TRY_OUT_COUNT_RAI {
+		br.Msg = "您的试用客户总数,已超过上限,不可继续新增"
+		return
+	}
+
 	if seller == nil {
 	if seller == nil {
 		br.Msg = "所属销售不存在"
 		br.Msg = "所属销售不存在"
 		return
 		return
@@ -2920,7 +2933,11 @@ func (this *CompanyController) Add() {
 	companyProduct.TryStage = 1
 	companyProduct.TryStage = 1
 	companyProduct.OverseasLabel = 1
 	companyProduct.OverseasLabel = 1
 	if seller.Mobile == "13065778668" {
 	if seller.Mobile == "13065778668" {
-		companyProduct.IsOverseas = 1
+		if req.RegionType == "海外" {
+			companyProduct.IsOverseas = 0
+		} else {
+			companyProduct.IsOverseas = 1
+		}
 	}
 	}
 	companyProductId, err := company.AddCompanyProduct(companyProduct)
 	companyProductId, err := company.AddCompanyProduct(companyProduct)
 	if err != nil {
 	if err != nil {
@@ -3247,51 +3264,61 @@ func (this *CompanyController) Detail() {
 					}
 					}
 				}
 				}
 			}
 			}
-			for _, v := range utils.PermissionFiccClassifyArr {
-				checkList := make([]int, 0)
-				plist := new(company.PermissionLookList)
-				items, err := company.GetPermissionLookItems(item.ProductId, v)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
-				}
-				for itemK, n := range items {
-					permission, err := company.GetCompanyPermissionCheckItem(companyId, n.ChartPermissionId)
-					if err != nil && err.Error() != utils.ErrNoRow() {
-						br.Msg = "获取失败"
-						br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-						return
+			// 编辑回显
+			allPermissions, e := company.GetPermissionLookItemsByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取权限信息失败,Err:" + e.Error()
+				return
+			}
+			permissionMap := make(map[int][]*company.PermissionLookItem, 0)
+			permissionCheckMap := make(map[int][]int, 0)
+			for _, v := range allPermissions {
+				if v.ParentId > 0 {
+					permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+					if v.IsPublic == 1 {
+						permissionCheckMap[v.ParentId] = append(permissionCheckMap[v.ParentId], v.ChartPermissionId)
 					}
 					}
-					if permission != nil && permission.ChartPermissionId > 0 {
-						checkList = append(checkList, n.ChartPermissionId)
-						items[itemK].StartDate = permission.StartDate
-						items[itemK].EndDate = permission.EndDate
-						items[itemK].Status = permission.Status
-
-						endDateTime, _ := time.Parse(utils.FormatDate, permission.EndDate)
-						endDateTime = endDateTime.AddDate(0, 0, 1)
-						sub := endDateTime.Sub(time.Now())
-						if sub < 0 {
-							sub = 0
+				}
+			}
+			for _, v := range allPermissions {
+				if v.ParentId == 0 {
+					checkList := make([]int, 0)
+					plist := new(company.PermissionLookList)
+					plist.Items = make([]*company.PermissionLookItem, 0)
+					plist.ItemsType = make([]*company.PermissionSetItemType, 0)
+					items, ok := permissionMap[v.ChartPermissionId]
+					if ok {
+						for itemK, n := range items {
+							permission, err := company.GetCompanyPermissionCheckItem(companyId, n.ChartPermissionId)
+							if err != nil && err.Error() != utils.ErrNoRow() {
+								br.Msg = "获取失败"
+								br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+								return
+							}
+							if permission != nil && permission.ChartPermissionId > 0 {
+								checkList = append(checkList, n.ChartPermissionId)
+								items[itemK].StartDate = permission.StartDate
+								items[itemK].EndDate = permission.EndDate
+								items[itemK].Status = permission.Status
+
+								endDateTime, _ := time.Parse(utils.FormatDate, permission.EndDate)
+								endDateTime = endDateTime.AddDate(0, 0, 1)
+								sub := endDateTime.Sub(time.Now())
+								if sub < 0 {
+									sub = 0
+								}
+								expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
+								items[itemK].ExpireDay = expireDay
+							}
 						}
 						}
-						expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
-						items[itemK].ExpireDay = expireDay
+						plist.Items = items
 					}
 					}
-					//count, err := company.GetCompanyPermissionCheck(companyId, n.ChartPermissionId)
-					//if err != nil {
-					//	br.Msg = "获取失败"
-					//	br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					//	return
-					//}
-					//if count > 0 {
-					//	checkList = append(checkList, n.ChartPermissionId)
-					//}
+					plist.ClassifyName = v.PermissionName
+					plist.CheckList = checkList
+					item.PermissionList = append(item.PermissionList, plist)
 				}
 				}
-				plist.Items = items
-				plist.ClassifyName = v
-				plist.CheckList = checkList
-				item.PermissionList = append(item.PermissionList, plist)
+
 			}
 			}
 			resp.FiccItem = item
 			resp.FiccItem = item
 			if resp.FiccItem.Status == utils.COMPANY_STATUS_FOREVER {
 			if resp.FiccItem.Status == utils.COMPANY_STATUS_FOREVER {
@@ -3322,7 +3349,7 @@ func (this *CompanyController) Detail() {
 			}
 			}
 
 
 			// CRM8.8-权益权限列表调用较多、统一进行调整
 			// CRM8.8-权益权限列表调用较多、统一进行调整
-			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit)
+			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit, []string{"调研"})
 			if e != nil {
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
@@ -3588,51 +3615,51 @@ func (this *CompanyController) DetailByCreditCode() {
 					}
 					}
 				}
 				}
 			}
 			}
-			for _, v := range utils.PermissionFiccClassifyArr {
-				checkList := make([]int, 0)
-				plist := new(company.PermissionLookList)
-				items, err := company.GetPermissionLookItems(item.ProductId, v)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
-				}
-				for itemK, n := range items {
-					permission, err := company.GetCompanyPermissionCheckItem(companyId, n.ChartPermissionId)
-					if err != nil && err.Error() != utils.ErrNoRow() {
-						br.Msg = "获取失败"
-						br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-						return
-					}
-					if permission != nil && permission.ChartPermissionId > 0 {
-						checkList = append(checkList, n.ChartPermissionId)
-						items[itemK].StartDate = permission.StartDate
-						items[itemK].EndDate = permission.EndDate
-						items[itemK].Status = permission.Status
-
-						endDateTime, _ := time.Parse(utils.FormatDate, permission.EndDate)
-						endDateTime = endDateTime.AddDate(0, 0, 1)
-						sub := endDateTime.Sub(time.Now())
-						if sub < 0 {
-							sub = 0
+			//子权限切片集合
+			allFiccPermissions, permissionMap, e := services.GetBasePermissionLookItem(utils.COMPANY_PRODUCT_FICC_ID)
+			if e != nil {
+				br.Msg = "查询基础权限失败"
+				br.ErrMsg = "查询基础权限失败,Err:" + e.Error()
+				return
+			}
+			//遍历获取
+			for _, v := range allFiccPermissions {
+				if v.ParentId == 0 {
+					checkList := make([]int, 0)
+					plist := new(company.PermissionLookList)
+					plist.Items = make([]*company.PermissionLookItem, 0)
+					items, ok1 := permissionMap[v.ChartPermissionId]
+					if ok1 {
+
+						for itemK, n := range items {
+							permission, e := company.GetCompanyPermissionCheckItem(companyId, n.ChartPermissionId)
+							if e != nil && e.Error() != utils.ErrNoRow() {
+								br.Msg = "获取失败"
+								br.ErrMsg = "获取权限信息失败,Err:" + e.Error()
+								return
+							}
+							if permission != nil && permission.ChartPermissionId > 0 {
+								checkList = append(checkList, n.ChartPermissionId)
+								items[itemK].StartDate = permission.StartDate
+								items[itemK].EndDate = permission.EndDate
+								items[itemK].Status = permission.Status
+
+								endDateTime, _ := time.Parse(utils.FormatDate, permission.EndDate)
+								endDateTime = endDateTime.AddDate(0, 0, 1)
+								sub := endDateTime.Sub(time.Now())
+								if sub < 0 {
+									sub = 0
+								}
+								expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
+								items[itemK].ExpireDay = expireDay
+							}
 						}
 						}
-						expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
-						items[itemK].ExpireDay = expireDay
+						plist.Items = items
 					}
 					}
-					//count, err := company.GetCompanyPermissionCheck(companyId, n.ChartPermissionId)
-					//if err != nil {
-					//	br.Msg = "获取失败"
-					//	br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					//	return
-					//}
-					//if count > 0 {
-					//	checkList = append(checkList, n.ChartPermissionId)
-					//}
+					plist.ClassifyName = v.PermissionName
+					plist.CheckList = checkList
+					item.PermissionList = append(item.PermissionList, plist)
 				}
 				}
-				plist.Items = items
-				plist.ClassifyName = v
-				plist.CheckList = checkList
-				item.PermissionList = append(item.PermissionList, plist)
 			}
 			}
 			resp.FiccItem = item
 			resp.FiccItem = item
 			if (roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
 			if (roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
@@ -7609,20 +7636,27 @@ func (this *CompanyController) PermissionList() {
 
 
 	for _, companyType := range companySlice {
 	for _, companyType := range companySlice {
 		//子权限切片集合
 		//子权限切片集合
-		var permissionClassifyArr []string
+		//var permissionClassifyArr []string
+		var permissionProductId int
 		if companyType == "ficc" {
 		if companyType == "ficc" {
-			for _, v := range utils.PermissionFiccClassifyArr {
-				permissionClassifyArr = append(permissionClassifyArr, v)
-			}
+			permissionProductId = utils.COMPANY_PRODUCT_FICC_ID
 		} else {
 		} else {
-			permissionClassifyArr = append(permissionClassifyArr, "权益")
+			permissionProductId = utils.COMPANY_PRODUCT_RAI_ID
+		}
+		//子权限切片集合
+		permissionClassifyArr, err := models.GetPermissionFirstByProductId(permissionProductId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+			return
 		}
 		}
 
 
 		//遍历获取
 		//遍历获取
 		for _, v := range permissionClassifyArr {
 		for _, v := range permissionClassifyArr {
 			checkList := make([]int, 0)
 			checkList := make([]int, 0)
 			plist := new(company.PermissionLookList)
 			plist := new(company.PermissionLookList)
-			items, err := company.GetPermissionLookItems(classifyMap[companyType], v)
+			plist.Items = make([]*company.PermissionLookItem, 0)
+			items, err := company.GetPermissionLookItemsByParentId(classifyMap[companyType], v.ChartPermissionId)
 			if err != nil {
 			if err != nil {
 				br.Msg = "获取失败"
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
@@ -7669,7 +7703,7 @@ func (this *CompanyController) PermissionList() {
 				}
 				}
 				expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
 				expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
 				items[i].ExpireDay = expireDay
 				items[i].ExpireDay = expireDay
-				items[i].ClassifyName = v
+				items[i].ClassifyName = v.PermissionName
 				//if n.PermissionType == 1 {
 				//if n.PermissionType == 1 {
 				//	items[i].PermissionTypeName = "主观"
 				//	items[i].PermissionTypeName = "主观"
 				//} else if n.PermissionType == 2 {
 				//} else if n.PermissionType == 2 {
@@ -7690,7 +7724,7 @@ func (this *CompanyController) PermissionList() {
 					}
 					}
 				}
 				}
 			}
 			}
-			plist.ClassifyName = v
+			plist.ClassifyName = v.PermissionName
 			plist.CheckList = checkList
 			plist.CheckList = checkList
 			if companyType == "ficc" {
 			if companyType == "ficc" {
 				resp.FiccPermissionList = append(resp.FiccPermissionList, plist)
 				resp.FiccPermissionList = append(resp.FiccPermissionList, plist)

+ 94 - 54
controllers/company_apply.go

@@ -81,28 +81,38 @@ func (this *CompanyApplyController) ApplyContractHistoryList() {
 
 
 		productId = list[i].ProductId
 		productId = list[i].ProductId
 		if productId == 1 {
 		if productId == 1 {
-			for _, v := range utils.PermissionFiccClassifyArr {
+			permissionClassifyArr, e := services.GetPermissionFirstArr(utils.COMPANY_PRODUCT_FICC_ID)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取权限分类失败,Err:" + e.Error()
+				return
+			}
+			for _, v := range permissionClassifyArr {
 				checkList := make([]int, 0)
 				checkList := make([]int, 0)
 				plist := new(company.ContractPermissionList)
 				plist := new(company.ContractPermissionList)
-				items, err := company.GetPermissionLookItemsExt(productIdStr, v)
+				plist.Items = make([]*company.PermissionLookItem, 0)
+				items, err := company.GetPermissionLookItemsExtByParentId(productIdStr, v.ChartPermissionId)
 				if err != nil {
 				if err != nil {
 					br.Msg = "获取失败"
 					br.Msg = "获取失败"
 					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 					return
 					return
 				}
 				}
-				for _, n := range items {
-					count, err := company.GetCompanyContractPermissionCheckByContractId(companyId, companyContract.CompanyContractId, n.ChartPermissionId)
-					if err != nil {
-						br.Msg = "获取失败"
-						br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-						return
-					}
-					if count > 0 {
-						checkList = append(checkList, n.ChartPermissionId)
+				if len(items) > 0 {
+					for _, n := range items {
+						count, err := company.GetCompanyContractPermissionCheckByContractId(companyId, companyContract.CompanyContractId, n.ChartPermissionId)
+						if err != nil {
+							br.Msg = "获取失败"
+							br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+							return
+						}
+						if count > 0 {
+							checkList = append(checkList, n.ChartPermissionId)
+						}
 					}
 					}
+					plist.Items = items
 				}
 				}
-				plist.Items = items
-				plist.ClassifyName = v
+
+				plist.ClassifyName = v.PermissionName
 				plist.CheckList = checkList
 				plist.CheckList = checkList
 				list[i].PermissionList = append(list[i].PermissionList, plist)
 				list[i].PermissionList = append(list[i].PermissionList, plist)
 			}
 			}
@@ -398,30 +408,39 @@ func (this *CompanyApplyController) ApplyContractDetail() {
 	}
 	}
 
 
 	if detail.ProductId == 1 {
 	if detail.ProductId == 1 {
-		for _, v := range utils.PermissionFiccClassifyArr {
-			checkList := make([]int, 0)
-			plist := new(company.PermissionLookList)
-			items, err := company.GetPermissionLookItems(detail.ProductId, v)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-				return
-			}
-			for _, n := range items {
-				count, err := company.GetCompanyContractPermissionCheckByContractId(companyId, detail.CompanyContractId, n.ChartPermissionId)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+		//子权限切片集合
+		allFiccPermissions, permissionMap, e := services.GetBasePermissionLookItem(utils.COMPANY_PRODUCT_FICC_ID)
+		if e != nil {
+			br.Msg = "查询基础权限失败"
+			br.ErrMsg = "查询基础权限失败,Err:" + e.Error()
+			return
+		}
+		//遍历获取
+		for _, v := range allFiccPermissions {
+			if v.ParentId == 0 {
+				checkList := make([]int, 0)
+				plist := new(company.PermissionLookList)
+				items, ok := permissionMap[v.ChartPermissionId]
+				if !ok {
+					br.Msg = "获取权限信息失败"
 					return
 					return
 				}
 				}
-				if count > 0 {
-					checkList = append(checkList, n.ChartPermissionId)
+				for _, n := range items {
+					count, err := company.GetCompanyContractPermissionCheckByContractId(companyId, detail.CompanyContractId, n.ChartPermissionId)
+					if err != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+						return
+					}
+					if count > 0 {
+						checkList = append(checkList, n.ChartPermissionId)
+					}
 				}
 				}
+				plist.Items = items
+				plist.ClassifyName = v.PermissionName
+				plist.CheckList = checkList
+				detail.PermissionList = append(detail.PermissionList, plist)
 			}
 			}
-			plist.Items = items
-			plist.ClassifyName = v
-			plist.CheckList = checkList
-			detail.PermissionList = append(detail.PermissionList, plist)
 		}
 		}
 	}
 	}
 
 
@@ -1920,30 +1939,46 @@ func (this *CompanyApplyController) ApplyContract() {
 	companyId := approvalRecord.CompanyId
 	companyId := approvalRecord.CompanyId
 
 
 	if productId == 1 {
 	if productId == 1 {
-		for _, v := range utils.PermissionFiccClassifyArr {
-			checkList := make([]int, 0)
-			plist := new(company.PermissionLookList)
-			items, err := company.GetPermissionLookItems(productId, v)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-				return
-			}
-			for _, n := range items {
-				count, err := company.GetCompanyContractPermissionCheckByContractId(companyId, contractItem.CompanyContractId, n.ChartPermissionId)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
+		allFiccPermissions, e := company.GetPermissionLookItemsByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+		if e != nil {
+			br.Msg = "获取权限信息失败"
+			br.ErrMsg = "获取权限信息失败,Err:" + e.Error()
+			return
+		}
+		permissionMap := make(map[int][]*company.PermissionLookItem, 0)
+		permissionCheckMap := make(map[int][]int, 0)
+		for _, v := range allFiccPermissions {
+			if v.ParentId > 0 {
+				permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+				if v.IsPublic == 1 {
+					permissionCheckMap[v.ParentId] = append(permissionCheckMap[v.ParentId], v.ChartPermissionId)
 				}
 				}
-				if count > 0 {
-					checkList = append(checkList, n.ChartPermissionId)
+			}
+		}
+		for _, v := range allFiccPermissions {
+			if v.ParentId == 0 {
+				checkList := make([]int, 0)
+				plist := new(company.PermissionLookList)
+				plist.Items = make([]*company.PermissionLookItem, 0)
+				items, ok := permissionMap[v.ChartPermissionId]
+				if ok {
+					for _, n := range items {
+						count, err := company.GetCompanyContractPermissionCheckByContractId(companyId, contractItem.CompanyContractId, n.ChartPermissionId)
+						if err != nil {
+							br.Msg = "获取失败"
+							br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+							return
+						}
+						if count > 0 {
+							checkList = append(checkList, n.ChartPermissionId)
+						}
+					}
+					plist.Items = items
 				}
 				}
+				plist.ClassifyName = v.PermissionName
+				plist.CheckList = checkList
+				contractItem.PermissionList = append(contractItem.PermissionList, plist)
 			}
 			}
-			plist.Items = items
-			plist.ClassifyName = v
-			plist.CheckList = checkList
-			contractItem.PermissionList = append(contractItem.PermissionList, plist)
 		}
 		}
 	}
 	}
 
 
@@ -2028,6 +2063,11 @@ func (this *CompanyApplyController) ApplyContract() {
 			//	return
 			//	return
 			//}
 			//}
 
 
+			filterPermissionName := []string{"专家", "路演服务"} // 需要过滤不展示的行业
+			if utils.InArrayByStr(filterPermissionName, n.PermissionName) {
+				continue
+			}
+
 			if utils.InArrayByInt(permissionIds, n.ChartPermissionId) {
 			if utils.InArrayByInt(permissionIds, n.ChartPermissionId) {
 				fmt.Println(1)
 				fmt.Println(1)
 				n.Checked = true
 				n.Checked = true

+ 29 - 21
controllers/company_approval.go

@@ -655,15 +655,19 @@ func (this *CompanyApprovalController) GetApprovalPermissionList() {
 	}
 	}
 
 
 	//子权限切片集合
 	//子权限切片集合
-	var permissionClassifyArr []string
+	var permissionProductId int
+
 	if approvalInfo.ProductId == 1 {
 	if approvalInfo.ProductId == 1 {
-		for _, v := range utils.PermissionFiccClassifyArr {
-			permissionClassifyArr = append(permissionClassifyArr, v)
-		}
+		permissionProductId = 1
 	} else {
 	} else {
-		permissionClassifyArr = append(permissionClassifyArr, "权益")
+		permissionProductId = 2
+	}
+	permissionClassifyArr, err := services.GetPermissionFirstArr(permissionProductId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取权限分类失败,Err:" + err.Error()
+		return
 	}
 	}
-
 	//获取需要审批的权限
 	//获取需要审批的权限
 	delayPermissionList, err := company.GetDelayPermissionItems(approvalInfo.CompanyId, approvalInfo.CompanyApprovalId)
 	delayPermissionList, err := company.GetDelayPermissionItems(approvalInfo.CompanyId, approvalInfo.CompanyApprovalId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -682,26 +686,31 @@ func (this *CompanyApprovalController) GetApprovalPermissionList() {
 	for _, v := range permissionClassifyArr {
 	for _, v := range permissionClassifyArr {
 		checkList := make([]int, 0)
 		checkList := make([]int, 0)
 		plist := new(company.PermissionLookList)
 		plist := new(company.PermissionLookList)
-		items, err := company.GetPermissionLookItems(approvalInfo.ProductId, v)
+		plist.Items = make([]*company.PermissionLookItem, 0)
+		items, err := company.GetPermissionLookItemsByParentId(approvalInfo.ProductId, v.ChartPermissionId)
 		if err != nil {
 		if err != nil {
 			br.Msg = "获取失败"
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 			return
 			return
 		}
 		}
-		//权益客户下,主观客观同时选择,进行合并
-		for _, n := range items {
-			if _, ok := delayPermissionIdMap[n.ChartPermissionId]; ok {
-				//if approvalInfo.ProductId == 2 {
-				//	if sandoPermissionIdMap[n.PermissionName] == 0 {
-				//		checkList = append(checkList, n.ChartPermissionId)
-				//	}
-				//	sandoPermissionIdMap[n.PermissionName] += 1
-				//} else {
-				//	checkList = append(checkList, n.ChartPermissionId)
-				//}
-				checkList = append(checkList, n.ChartPermissionId)
+		if len(items) > 0 {
+			//权益客户下,主观客观同时选择,进行合并
+			for _, n := range items {
+				if _, ok := delayPermissionIdMap[n.ChartPermissionId]; ok {
+					//if approvalInfo.ProductId == 2 {
+					//	if sandoPermissionIdMap[n.PermissionName] == 0 {
+					//		checkList = append(checkList, n.ChartPermissionId)
+					//	}
+					//	sandoPermissionIdMap[n.PermissionName] += 1
+					//} else {
+					//	checkList = append(checkList, n.ChartPermissionId)
+					//}
+					checkList = append(checkList, n.ChartPermissionId)
+				}
 			}
 			}
+			plist.Items = items
 		}
 		}
+
 		//if approvalInfo.ProductId == 2 {
 		//if approvalInfo.ProductId == 2 {
 		//	for i, n := range items {
 		//	for i, n := range items {
 		//		if sandoPermissionIdMap[n.PermissionName] == 1 {
 		//		if sandoPermissionIdMap[n.PermissionName] == 1 {
@@ -709,8 +718,7 @@ func (this *CompanyApprovalController) GetApprovalPermissionList() {
 		//		}
 		//		}
 		//	}
 		//	}
 		//}
 		//}
-		plist.Items = items
-		plist.ClassifyName = v
+		plist.ClassifyName = v.PermissionName
 		plist.CheckList = checkList
 		plist.CheckList = checkList
 		if approvalInfo.ProductId == 1 {
 		if approvalInfo.ProductId == 1 {
 			resp.FiccPermissionList = append(resp.FiccPermissionList, plist)
 			resp.FiccPermissionList = append(resp.FiccPermissionList, plist)

+ 128 - 92
controllers/company_permission.go

@@ -17,6 +17,7 @@ type CompanyPermissionController struct {
 	BaseAuthController
 	BaseAuthController
 }
 }
 
 
+// List
 // @Title 获取权限设置基础信息
 // @Title 获取权限设置基础信息
 // @Description 获取权限设置基础信息接口
 // @Description 获取权限设置基础信息接口
 // @Param   CompanyType   query   string  true       "客户类型:传空字符串或者不传为全部,'ficc','权益'"
 // @Param   CompanyType   query   string  true       "客户类型:传空字符串或者不传为全部,'ficc','权益'"
@@ -50,23 +51,40 @@ func (this *CompanyPermissionController) List() {
 
 
 	// FICC
 	// FICC
 	if productId == utils.COMPANY_PRODUCT_FICC_ID || companyType == utils.COMPANY_PRODUCT_FICC_NAME {
 	if productId == utils.COMPANY_PRODUCT_FICC_ID || companyType == utils.COMPANY_PRODUCT_FICC_NAME {
-		for _, v := range utils.PermissionFiccClassifyArr {
-			checkList := make([]int, 0)
-			p := new(company.PermissionSetList)
-			p.ClassifyName = v
-			items, err := company.GetPermissionSetItems(utils.COMPANY_PRODUCT_FICC_ID, v)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-				return
+		items, err := company.GetPermissionByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+			return
+		}
+		permissionMap := make(map[int][]*company.PermissionSetItem, 0)
+		permissionCheckMap := make(map[int][]int, 0)
+		for _, v := range items {
+			if v.ParentId > 0 {
+				permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+				if v.IsPublic == 1 {
+					permissionCheckMap[v.ParentId] = append(permissionCheckMap[v.ParentId], v.ChartPermissionId)
+				}
 			}
 			}
-			p.Items = items
-			if v == "宏观经济" {
-				checkList = append(checkList, 1)
+		}
+		for _, v := range items {
+			if v.ParentId == 0 {
+				p := new(company.PermissionSetList)
+				p.Items = make([]*company.PermissionSetItem, 0)
+				p.CheckList = make([]int, 0)
+				p.ClassifyName = v.PermissionName
+
+				if subList, ok := permissionMap[v.ChartPermissionId]; ok {
+					p.Items = subList
+				}
+
+				if checkList, ok := permissionCheckMap[v.ChartPermissionId]; ok {
+					p.CheckList = checkList
+				}
+				resp.List = append(resp.List, p)
 			}
 			}
-			p.CheckList = checkList
-			resp.List = append(resp.List, p)
 		}
 		}
+
 		br.Ret = 200
 		br.Ret = 200
 		br.Success = true
 		br.Success = true
 		br.Msg = "获取成功"
 		br.Msg = "获取成功"
@@ -83,13 +101,19 @@ func (this *CompanyPermissionController) List() {
 			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 			return
 			return
 		}
 		}
-
+		filterPermissionName := []string{"专家", "路演服务", "调研"} // 需要过滤不展示的行业
+		if isShowYanXuanKouDian {
+			filterPermissionName = []string{"专家"} //申请转正,或者申请续约的时候 调研 行业需要进行展示
+		}
 		// 原始版的权限
 		// 原始版的权限
 		if noUpgrade {
 		if noUpgrade {
 			for _, v := range items {
 			for _, v := range items {
 				if !isShowYanXuanKouDian && v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 				if !isShowYanXuanKouDian && v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 					continue
 					continue
 				}
 				}
+				if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+					continue
+				}
 				p.Items = append(p.Items, v)
 				p.Items = append(p.Items, v)
 			}
 			}
 		}
 		}
@@ -135,6 +159,9 @@ func (this *CompanyPermissionController) List() {
 				if !isShowYanXuanKouDian && v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 				if !isShowYanXuanKouDian && v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 					continue
 					continue
 				}
 				}
+				if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+					continue
+				}
 				// 处理四大行业的升级展示
 				// 处理四大行业的升级展示
 				if strings.Contains("医药消费科技智造", v.PermissionName) {
 				if strings.Contains("医药消费科技智造", v.PermissionName) {
 					// 内部人员需要拆分主客观权限
 					// 内部人员需要拆分主客观权限
@@ -219,27 +246,41 @@ func (this *CompanyPermissionController) ListByContract() {
 
 
 	roleTypeCode := sysUser.RoleTypeCode
 	roleTypeCode := sysUser.RoleTypeCode
 	productId = services.GetProductId(roleTypeCode)
 	productId = services.GetProductId(roleTypeCode)
-	if productId == 1 {
-		for _, v := range utils.PermissionFiccClassifyArr {
-			//合同这边市场策略不需要体现出来,所以调整返回
-			if v == "市场策略" {
-				continue
-			}
-			checkList := make([]int, 0)
-			p := new(company.PermissionSetList)
-			p.ClassifyName = v
-			items, err := company.GetPermissionSetItems(productId, v)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-				return
+	if productId == 1 || companyType == utils.COMPANY_PRODUCT_FICC_NAME {
+		allFiccPermissions, err := company.GetPermissionByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+			return
+		}
+		permissionMap := make(map[int][]*company.PermissionSetItem, 0)
+		permissionCheckMap := make(map[int][]int, 0)
+		for _, v := range allFiccPermissions {
+			if v.ParentId > 0 {
+				permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+				if v.IsPublic == 1 {
+					permissionCheckMap[v.ParentId] = append(permissionCheckMap[v.ParentId], v.ChartPermissionId)
+				}
 			}
 			}
-			p.Items = items
-			if v == "宏观经济" {
-				checkList = append(checkList, 1)
+		}
+		for _, v := range allFiccPermissions {
+			if v.ParentId == 0 {
+				//合同这边市场策略不需要体现出来,所以调整返回
+				if v.PermissionName == "市场策略" {
+					continue
+				}
+				p := new(company.PermissionSetList)
+				p.Items = make([]*company.PermissionSetItem, 0)
+				p.CheckList = make([]int, 0)
+				p.ClassifyName = v.PermissionName
+				if subList, ok := permissionMap[v.ChartPermissionId]; ok {
+					p.Items = subList
+				}
+				if checkList, ok := permissionCheckMap[v.ChartPermissionId]; ok {
+					p.CheckList = checkList
+				}
+				resp.List = append(resp.List, p)
 			}
 			}
-			p.CheckList = checkList
-			resp.List = append(resp.List, p)
 		}
 		}
 	} else if productId == 2 {
 	} else if productId == 2 {
 		checkList := make([]int, 0)
 		checkList := make([]int, 0)
@@ -256,25 +297,7 @@ func (this *CompanyPermissionController) ListByContract() {
 		p.CheckList = checkList
 		p.CheckList = checkList
 		resp.List = append(resp.List, p)
 		resp.List = append(resp.List, p)
 	} else {
 	} else {
-		if companyType == utils.COMPANY_PRODUCT_FICC_NAME {
-			for _, v := range utils.PermissionFiccClassifyArr {
-				checkList := make([]int, 0)
-				p := new(company.PermissionSetList)
-				p.ClassifyName = v
-				items, err := company.GetPermissionSetItems(1, v)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
-				}
-				p.Items = items
-				if v == "宏观经济" {
-					checkList = append(checkList, 1)
-				}
-				p.CheckList = checkList
-				resp.List = append(resp.List, p)
-			}
-		} else {
+		if companyType != utils.COMPANY_PRODUCT_FICC_NAME {
 			v := "权益"
 			v := "权益"
 			checkList := make([]int, 0)
 			checkList := make([]int, 0)
 			p := new(company.PermissionSetList)
 			p := new(company.PermissionSetList)
@@ -327,38 +350,33 @@ func (this *CompanyPermissionController) PermissionLook() {
 	productId := services.GetProductId(roleTypeCode)
 	productId := services.GetProductId(roleTypeCode)
 
 
 	resp := new(company.PermissionLookResp)
 	resp := new(company.PermissionLookResp)
-	permissionArr := []string{}
+	permissionArr := make([]*models.ChartPermission, 0)
+	var err error
 	if lookType == 1 {
 	if lookType == 1 {
-		if productId == 1 {
-			for _, permission := range utils.PermissionFiccClassifyArr {
-				permissionArr = append(permissionArr, permission)
-			}
-		} else if productId == 2 {
-			permissionArr = []string{"权益"}
-		} else {
-			for _, permission := range utils.PermissionAllClassifyArr {
-				permissionArr = append(permissionArr, permission)
-			}
-		}
+		permissionArr, err = services.GetPermissionFirstArr(productId)
 	} else {
 	} else {
-		for _, permission := range utils.PermissionAllClassifyArr {
-			permissionArr = append(permissionArr, permission)
-		}
+		permissionArr, err = services.GetPermissionFirstArr(0)
+	}
+	if err != nil {
+		br.Msg = "获取权限失败"
+		br.ErrMsg = "获取权限失败 err:" + err.Error()
+		return
 	}
 	}
 	//ficc权限类目
 	//ficc权限类目
 	for _, v := range permissionArr {
 	for _, v := range permissionArr {
 		checkList := make([]int, 0)
 		checkList := make([]int, 0)
 		p := new(company.PermissionLookList)
 		p := new(company.PermissionLookList)
+		p.Items = make([]*company.PermissionLookItem, 0)
 		var productId int
 		var productId int
 		//if v == "权益" {
 		//if v == "权益" {
 		//	productId = 2
 		//	productId = 2
 		//} else {
 		//} else {
 		//	productId = 1
 		//	productId = 1
 		//}
 		//}
-		if v != "权益" {
+		if v.PermissionName != "权益" {
 			productId = 1
 			productId = 1
 			//mapPermissionName := make(map[string]int)
 			//mapPermissionName := make(map[string]int)
-			items, err := company.GetPermissionLookItems(productId, v)
+			items, err := company.GetPermissionLookItemsByParentId(productId, v.ChartPermissionId)
 			if err != nil {
 			if err != nil {
 				br.Msg = "获取失败"
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
@@ -404,7 +422,7 @@ func (this *CompanyPermissionController) PermissionLook() {
 				}
 				}
 				expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
 				expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
 				items[i].ExpireDay = expireDay
 				items[i].ExpireDay = expireDay
-				items[i].ClassifyName = v
+				items[i].ClassifyName = v.PermissionName
 				if lookType == 1 {
 				if lookType == 1 {
 					permissionList = append(permissionList, items[i])
 					permissionList = append(permissionList, items[i])
 				} else {
 				} else {
@@ -421,7 +439,7 @@ func (this *CompanyPermissionController) PermissionLook() {
 					mapPermissionNameList[v.PermissionName] = v.ChartPermissionId
 					mapPermissionNameList[v.PermissionName] = v.ChartPermissionId
 				}
 				}
 			}
 			}
-			p.ClassifyName = v
+			p.ClassifyName = v.PermissionName
 			//p.Items = permissionList
 			//p.Items = permissionList
 			p.CheckList = checkList
 			p.CheckList = checkList
 			if lookType == 1 {
 			if lookType == 1 {
@@ -434,16 +452,22 @@ func (this *CompanyPermissionController) PermissionLook() {
 		}
 		}
 	}
 	}
 
 
+	var filterPermissionName []string
+	if lookType == 1 {
+		filterPermissionName = []string{"专家", "路演服务", "研选扣点包", "调研"}
+	} else {
+		filterPermissionName = []string{"调研"}
+	}
 	//权益权限类目
 	//权益权限类目
 	for _, v := range permissionArr {
 	for _, v := range permissionArr {
 
 
-		if v == "权益" {
+		if v.PermissionName == "权益" {
 			// CRM8.8-权益权限列表调用较多、统一进行调整
 			// CRM8.8-权益权限列表调用较多、统一进行调整
 			unify := false
 			unify := false
 			if lookType == 1 {
 			if lookType == 1 {
 				unify = true
 				unify = true
 			}
 			}
-			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify)
+			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify, filterPermissionName)
 			if e != nil {
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
@@ -745,8 +769,34 @@ func (this *CompanyPermissionController) PermissionVariety() {
 		productId = 0
 		productId = 0
 	}
 	}
 
 
-	if productId == 1 {
-		for k, v := range utils.PermissionFiccClassifyArr {
+	if productId == 1 || companyType == utils.COMPANY_PRODUCT_FICC_NAME {
+		permissionFirst, e := services.GetPermissionFirstArr(utils.COMPANY_PRODUCT_FICC_ID)
+		if e != nil {
+			br.Msg = "获取权限信息失败"
+			br.ErrMsg = "获取权限信息失败,Err:" + e.Error()
+			return
+		}
+		allFiccPermissions, e := company.GetPermissionVarietyItemsByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+		if e != nil {
+			br.Msg = "获取权限信息失败"
+			br.ErrMsg = "获取权限信息失败,Err:" + e.Error()
+			return
+		}
+		permissionMap := make(map[int][]*company.PermissionVarietyItem, 0)
+		for _, v := range allFiccPermissions {
+			permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+		}
+		for _, v := range permissionFirst {
+			p := new(company.PermissionVarietyList)
+			p.ClassifyName = v.ClassifyName
+			p.ChartPermissionId = v.ChartPermissionId + 100
+			items, ok := permissionMap[v.ChartPermissionId]
+			if ok {
+				p.Items = items
+			}
+			resp.List = append(resp.List, p)
+		}
+		/*for k, v := range utils.PermissionFiccClassifyArr {
 			p := new(company.PermissionVarietyList)
 			p := new(company.PermissionVarietyList)
 			p.ClassifyName = v
 			p.ClassifyName = v
 			p.ChartPermissionId = k + 100
 			p.ChartPermissionId = k + 100
@@ -758,7 +808,7 @@ func (this *CompanyPermissionController) PermissionVariety() {
 			}
 			}
 			p.Items = items
 			p.Items = items
 			resp.List = append(resp.List, p)
 			resp.List = append(resp.List, p)
-		}
+		}*/
 	} else if productId == 2 {
 	} else if productId == 2 {
 		v := "权益"
 		v := "权益"
 		p := new(company.PermissionVarietyList)
 		p := new(company.PermissionVarietyList)
@@ -773,21 +823,7 @@ func (this *CompanyPermissionController) PermissionVariety() {
 		p.Items = items
 		p.Items = items
 		resp.List = append(resp.List, p)
 		resp.List = append(resp.List, p)
 	} else {
 	} else {
-		if companyType == utils.COMPANY_PRODUCT_FICC_NAME {
-			for k, v := range utils.PermissionFiccClassifyArr {
-				p := new(company.PermissionVarietyList)
-				p.ClassifyName = v
-				p.ChartPermissionId = k + 100
-				items, err := company.GetPermissionVarietyItems(1, v)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
-				}
-				p.Items = items
-				resp.List = append(resp.List, p)
-			}
-		} else if companyType == utils.COMPANY_PRODUCT_RAI_NAME {
+		if companyType == utils.COMPANY_PRODUCT_RAI_NAME {
 			v := "权益"
 			v := "权益"
 			p := new(company.PermissionVarietyList)
 			p := new(company.PermissionVarietyList)
 			p.ClassifyName = v
 			p.ClassifyName = v

+ 24 - 12
controllers/company_user.go

@@ -912,21 +912,23 @@ func (this *CompanyUserController) List() {
 		pars = append(pars, productId)
 		pars = append(pars, productId)
 
 
 		//流失客户(除非是超级管理员或者是部门管理员,要不然不允许看对应的联系人)
 		//流失客户(除非是超级管理员或者是部门管理员,要不然不允许看对应的联系人)
-		var companyProduct *company.CompanyProduct
+		//var companyProduct *company.CompanyProduct
 		//当前是ficc权限,且非ficc管理员
 		//当前是ficc权限,且非ficc管理员
 		//if productId == 1 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN {
 		//if productId == 1 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN {
 		//	tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 1)
 		//	tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 1)
 		//	companyProduct = tmpCompanyProduct
 		//	companyProduct = tmpCompanyProduct
 		//}
 		//}
-		if productId == 2 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
-			// 当前是权益权限,且非 权益管理员
-			tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 2)
-			companyProduct = tmpCompanyProduct
-			if companyProduct != nil && companyProduct.Status == utils.COMPANY_STATUS_LOSE {
-				condition += ` AND seller_id=? `
-				pars = append(pars, sysUser.AdminId)
-			}
-		}
+
+		//权益销售查看流失客户时,可以看到非本人名下流失客户的联系人需求池 930 2024-03-25
+		//if productId == 2 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
+		//	// 当前是权益权限,且非 权益管理员
+		//	tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 2)
+		//	companyProduct = tmpCompanyProduct
+		//	if companyProduct != nil && companyProduct.Status == utils.COMPANY_STATUS_LOSE {
+		//		condition += ` AND seller_id=? `
+		//		pars = append(pars, sysUser.AdminId)
+		//	}
+		//}
 	}
 	}
 
 
 	total, err := company.GetCompanyUserListCountV2(condition, pars, companyId)
 	total, err := company.GetCompanyUserListCountV2(condition, pars, companyId)
@@ -1257,6 +1259,9 @@ func (this *CompanyUserController) List() {
 					list[i].IsChartPermissionSetting = 1
 					list[i].IsChartPermissionSetting = 1
 				}
 				}
 			}
 			}
+			// 分产品阅读统计
+			list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
+			//list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
 		}
 		}
 
 
 		isUserYanXuanButtonShow, err := services.CheckCompanyUserYanXuanButton(sysUser.RoleTypeCode, sysUser.Mobile)
 		isUserYanXuanButtonShow, err := services.CheckCompanyUserYanXuanButton(sysUser.RoleTypeCode, sysUser.Mobile)
@@ -1291,7 +1296,7 @@ func (this *CompanyUserController) List() {
 			for i := 0; i < lenList; i++ {
 			for i := 0; i < lenList; i++ {
 				item := list[i]
 				item := list[i]
 				// 分产品阅读统计
 				// 分产品阅读统计
-				list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
+				//list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
 				list[i].MfyxInteractionNum = userInteractionNumMap[int(item.UserId)]
 				list[i].MfyxInteractionNum = userInteractionNumMap[int(item.UserId)]
 				//权益销售查看用户研选的信息
 				//权益销售查看用户研选的信息
 				if userYanxuanPermissionMap[int(item.UserId)] != nil {
 				if userYanxuanPermissionMap[int(item.UserId)] != nil {
@@ -1306,7 +1311,7 @@ func (this *CompanyUserController) List() {
 					list[i].MfyxIsBinding = true
 					list[i].MfyxIsBinding = true
 					list[i].MfyxBindingTime = mfyxuserRecordRegisterMap[int(item.UserId)]
 					list[i].MfyxBindingTime = mfyxuserRecordRegisterMap[int(item.UserId)]
 				}
 				}
-				list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
+				//list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
 			}
 			}
 		}
 		}
 	}
 	}
@@ -4069,6 +4074,13 @@ func (this *CompanyUserController) Import() {
 					br.Msg = "导入数据中存在【国际区号】为空的联系人,请检查"
 					br.Msg = "导入数据中存在【国际区号】为空的联系人,请检查"
 					return
 					return
 				}
 				}
+				// 大陆区号校验手机号
+				if mobileOne != "" && (countryCode == "86" || countryCode == "086" || countryCode == "+86" || countryCode == "+086") {
+					if !utils.ValidateMobileFormatat(mobileOne) {
+						br.Msg = "导入数据中存在【大陆手机号】格式有误的联系人,请检查"
+						return
+					}
+				}
 
 
 				//如果手机号或者邮箱都没有填写的情况下
 				//如果手机号或者邮箱都没有填写的情况下
 				if mobileOne == "" && email == "" {
 				if mobileOne == "" && email == "" {

+ 58 - 13
controllers/contract/contract.go

@@ -78,6 +78,7 @@ func (this *ContractController) GetServiceTemplateList() {
 				br.ErrMsg = "获取详情模板失败,Err:" + err.Error()
 				br.ErrMsg = "获取详情模板失败,Err:" + err.Error()
 				return
 				return
 			}
 			}
+
 			tmpList[j].Detail = detail
 			tmpList[j].Detail = detail
 			// 权益存在第三级主客观套餐-CRM8.8
 			// 权益存在第三级主客观套餐-CRM8.8
 			thirdList, e := contract.GetContractServiceTemplateMapByParentId(tmpList[j].ServiceTemplateId)
 			thirdList, e := contract.GetContractServiceTemplateMapByParentId(tmpList[j].ServiceTemplateId)
@@ -123,6 +124,44 @@ func (this *ContractController) GetServiceTemplateList() {
 			br.ErrMsg = "获取详情模板失败,Err:" + err.Error()
 			br.ErrMsg = "获取详情模板失败,Err:" + err.Error()
 			return
 			return
 		}
 		}
+		if productId == 1 && list[i].ServiceTemplateId == 2 {
+			// 特殊处理Ficc周报、商品双周报、数据点评的套餐显示
+			// 把detail转成go struct
+			// 查询默认的公有权限
+			publicPermissionList, tmpE := models.GetFiccPermissionSecondPublic()
+			if tmpE != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取默认的公有权限失败,Err:" + tmpE.Error()
+				return
+			}
+			publicPermissionIds := make([]int, 0)
+			publicPermissionNames := make([]string, 0)
+			for _, v := range publicPermissionList {
+				publicPermissionIds = append(publicPermissionIds, v.ChartPermissionId)
+				publicPermissionNames = append(publicPermissionNames, v.PermissionName)
+			}
+			for k, v := range detail {
+				if v.Id == 4 || v.Id == 5 || v.Id == 6 {
+					detailStruct := new(contract.ServiceTemplateDetailCol2)
+					e := json.Unmarshal([]byte(v.Col2), detailStruct)
+					if e != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取套餐信息失败, json.Unmarshal Err: " + e.Error()
+						return
+					}
+					//替换默认品种
+					detailStruct.ValueId = publicPermissionIds
+					detailStruct.Value = strings.Join(publicPermissionNames, ",")
+					newCol2, e := json.Marshal(detailStruct)
+					if e != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取套餐信息失败, json.Marshal Err: " + e.Error()
+						return
+					}
+					detail[k].Col2 = string(newCol2)
+				}
+			}
+		}
 		if productId == 1 && contractType == "补充协议" {
 		if productId == 1 && contractType == "补充协议" {
 			for _, v := range detail {
 			for _, v := range detail {
 				//ficc 的合同模板的 补充协议需要将默认的宏观经济给移除掉
 				//ficc 的合同模板的 补充协议需要将默认的宏观经济给移除掉
@@ -862,14 +901,20 @@ func contractListExport(this *ContractController, list []*contract.ContractList,
 					}
 					}
 
 
 					permissionList := make([]*company.PermissionSetItem, 0)
 					permissionList := make([]*company.PermissionSetItem, 0)
-					for _, v := range utils.PermissionFiccClassifyArr {
-						items, err := company.GetPermissionSetItems(1, v)
-						if err != nil {
-							br.Msg = "获取失败"
-							br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-							return
+					allPermissions, permissionMap, e := services.GetBaseFiccPermissionSetItem()
+					if e != nil {
+						br.Msg = "查询基础权限失败"
+						br.ErrMsg = "查询基础权限失败,Err:" + e.Error()
+						return
+					}
+					//遍历获取
+					for _, v := range allPermissions {
+						if v.ParentId == 0 {
+							items, ok := permissionMap[v.ChartPermissionId]
+							if ok {
+								permissionList = append(permissionList, items...)
+							}
 						}
 						}
-						permissionList = append(permissionList, items...)
 					}
 					}
 
 
 					//权限列表
 					//权限列表
@@ -1611,7 +1656,7 @@ func (this *ContractController) Detail() {
 	if isNeedPermission {
 	if isNeedPermission {
 		checkPermissionMap, tErr := contractService.GetServicePermissionMap(contractInfo.Service)
 		checkPermissionMap, tErr := contractService.GetServicePermissionMap(contractInfo.Service)
 		if tErr == nil {
 		if tErr == nil {
-			permissionLookListMap := make(map[string][]*contract.PermissionLookItem)
+			permissionLookListMap := make(map[int][]*contract.PermissionLookItem)
 			var permissionIds []string
 			var permissionIds []string
 			for _, v := range checkPermissionMap {
 			for _, v := range checkPermissionMap {
 				permissionIds = append(permissionIds, strconv.Itoa(v))
 				permissionIds = append(permissionIds, strconv.Itoa(v))
@@ -1624,12 +1669,12 @@ func (this *ContractController) Detail() {
 					tmp.ClassifyName = v.ClassifyName
 					tmp.ClassifyName = v.ClassifyName
 					tmp.PermissionName = v.PermissionName
 					tmp.PermissionName = v.PermissionName
 					tmp.ChartPermissionId = v.ChartPermissionId
 					tmp.ChartPermissionId = v.ChartPermissionId
-					permissionLookListMap[v.ClassifyName] = append(permissionLookListMap[v.ClassifyName], tmp)
+					permissionLookListMap[v.ParentId] = append(permissionLookListMap[v.ParentId], tmp)
 				}
 				}
 				classifyNameList, tErr2 := company.GetChartPermissionFirst()
 				classifyNameList, tErr2 := company.GetChartPermissionFirst()
 				if tErr2 == nil {
 				if tErr2 == nil {
 					for _, v := range classifyNameList {
 					for _, v := range classifyNameList {
-						if perList, ok := permissionLookListMap[v.ClassifyName]; ok {
+						if perList, ok := permissionLookListMap[v.ChartPermissionId]; ok {
 							permissionLookListRespItem := &contract.PermissionLookList{
 							permissionLookListRespItem := &contract.PermissionLookList{
 								ClassifyName: v.ClassifyName,
 								ClassifyName: v.ClassifyName,
 								Items:        perList,
 								Items:        perList,
@@ -2998,7 +3043,7 @@ func (this *ContractController) DetailMerge() {
 	if isNeedPermission {
 	if isNeedPermission {
 		checkPermissionMap, tErr := contractService.GetServicePermissionMap(contractInfo.Service)
 		checkPermissionMap, tErr := contractService.GetServicePermissionMap(contractInfo.Service)
 		if tErr == nil {
 		if tErr == nil {
-			permissionLookListMap := make(map[string][]*contract.PermissionLookItem)
+			permissionLookListMap := make(map[int][]*contract.PermissionLookItem)
 			var permissionIds []string
 			var permissionIds []string
 			for _, v := range checkPermissionMap {
 			for _, v := range checkPermissionMap {
 				permissionIds = append(permissionIds, strconv.Itoa(v))
 				permissionIds = append(permissionIds, strconv.Itoa(v))
@@ -3011,12 +3056,12 @@ func (this *ContractController) DetailMerge() {
 					tmp.ClassifyName = v.ClassifyName
 					tmp.ClassifyName = v.ClassifyName
 					tmp.PermissionName = v.PermissionName
 					tmp.PermissionName = v.PermissionName
 					tmp.ChartPermissionId = v.ChartPermissionId
 					tmp.ChartPermissionId = v.ChartPermissionId
-					permissionLookListMap[v.ClassifyName] = append(permissionLookListMap[v.ClassifyName], tmp)
+					permissionLookListMap[v.ParentId] = append(permissionLookListMap[v.ParentId], tmp)
 				}
 				}
 				classifyNameList, tErr2 := company.GetChartPermissionFirst()
 				classifyNameList, tErr2 := company.GetChartPermissionFirst()
 				if tErr2 == nil {
 				if tErr2 == nil {
 					for _, v := range classifyNameList {
 					for _, v := range classifyNameList {
-						if perList, ok := permissionLookListMap[v.ClassifyName]; ok {
+						if perList, ok := permissionLookListMap[v.ChartPermissionId]; ok {
 							permissionLookListRespItem := &contract.PermissionLookList{
 							permissionLookListRespItem := &contract.PermissionLookList{
 								ClassifyName: v.ClassifyName,
 								ClassifyName: v.ClassifyName,
 								Items:        perList,
 								Items:        perList,

+ 34 - 4
controllers/contract/contract_approval.go

@@ -624,7 +624,22 @@ func contractApprovalListExport(this *ContractApprovalController, list []*contra
 					}
 					}
 
 
 					permissionList := make([]*company.PermissionSetItem, 0)
 					permissionList := make([]*company.PermissionSetItem, 0)
-					for _, v := range utils.PermissionFiccClassifyArr {
+					allPermissions, permissionMap, e := services.GetBaseFiccPermissionSetItem()
+					if e != nil {
+						br.Msg = "查询基础权限失败"
+						br.ErrMsg = "查询基础权限失败,Err:" + e.Error()
+						return
+					}
+					//遍历获取
+					for _, v := range allPermissions {
+						if v.ParentId == 0 {
+							items, ok := permissionMap[v.ChartPermissionId]
+							if ok {
+								permissionList = append(permissionList, items...)
+							}
+						}
+					}
+					/*for _, v := range utils.PermissionFiccClassifyArr {
 						items, err := company.GetPermissionSetItems(1, v)
 						items, err := company.GetPermissionSetItems(1, v)
 						if err != nil {
 						if err != nil {
 							br.Msg = "获取失败"
 							br.Msg = "获取失败"
@@ -632,7 +647,7 @@ func contractApprovalListExport(this *ContractApprovalController, list []*contra
 							return
 							return
 						}
 						}
 						permissionList = append(permissionList, items...)
 						permissionList = append(permissionList, items...)
-					}
+					}*/
 
 
 					//权限列表
 					//权限列表
 					for j := 0; j < len(permissionList); j++ {
 					for j := 0; j < len(permissionList); j++ {
@@ -1259,7 +1274,22 @@ func (this *ContractApprovalController) Export() {
 					}
 					}
 
 
 					permissionList := make([]*company.PermissionSetItem, 0)
 					permissionList := make([]*company.PermissionSetItem, 0)
-					for _, v := range utils.PermissionFiccClassifyArr {
+					allPermissions, permissionMap, e := services.GetBaseFiccPermissionSetItem()
+					if e != nil {
+						br.Msg = "查询基础权限失败"
+						br.ErrMsg = "查询基础权限失败,Err:" + e.Error()
+						return
+					}
+					//遍历获取
+					for _, v := range allPermissions {
+						if v.ParentId == 0 {
+							items, ok := permissionMap[v.ChartPermissionId]
+							if ok {
+								permissionList = append(permissionList, items...)
+							}
+						}
+					}
+					/*for _, v := range utils.PermissionFiccClassifyArr {
 						items, err := company.GetPermissionSetItems(1, v)
 						items, err := company.GetPermissionSetItems(1, v)
 						if err != nil {
 						if err != nil {
 							br.Msg = "获取失败"
 							br.Msg = "获取失败"
@@ -1268,7 +1298,7 @@ func (this *ContractApprovalController) Export() {
 						}
 						}
 						permissionList = append(permissionList, items...)
 						permissionList = append(permissionList, items...)
 					}
 					}
-
+					*/
 					//权限列表
 					//权限列表
 					for j := 0; j < len(permissionList); j++ {
 					for j := 0; j < len(permissionList); j++ {
 						key := fmt.Sprint(item.ServiceTemplateId, "_permission_", permissionList[j].ChartPermissionId)
 						key := fmt.Sprint(item.ServiceTemplateId, "_permission_", permissionList[j].ChartPermissionId)

+ 9 - 10
controllers/cygx/activity.go

@@ -802,16 +802,15 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 		//如果是添加多条活动那么就推送多次
 		//如果是添加多条活动那么就推送多次
 		for _, v := range activityIdArr {
 		for _, v := range activityIdArr {
 			if req.DoType == 1 {
 			if req.DoType == 1 {
-				go func() {
-					//同时添加多个活动的时候,避免协程开的过多
-					cygxService.DoActivityOnenIdWxTemplateMsg(v)
-					//cygxService.UpdateResourceData(v, "activity", "add", time.Now().Format(utils.FormatDateTime))
-					cygxService.UpdateActivityResourceData(v) //写入首页最新  cygx_resource_data 表
-					cygxService.YiDongSaveRoadshowDetail(v)
-					cygxService.YanXuanActivityPointsBillActivityPublishAndCancel(v, AdminUser.AdminId, 1) //活动发布以及取消发布处理研选扣
-					elastic.AddComprehensiveActivity(v)
-				}()
-
+				//go func() {
+				//同时添加多个活动的时候,避免协程开的过多
+				go cygxService.DoActivityOnenIdWxTemplateMsg(v)
+				//cygxService.UpdateResourceData(v, "activity", "add", time.Now().Format(utils.FormatDateTime))
+				go cygxService.UpdateActivityResourceData(v) //写入首页最新  cygx_resource_data 表
+				go cygxService.YiDongSaveRoadshowDetail(v)
+				go cygxService.YanXuanActivityPointsBillActivityPublishAndCancel(v, AdminUser.AdminId, 1) //活动发布以及取消发布处理研选扣
+				go elastic.AddComprehensiveActivity(v)
+				//}()
 			}
 			}
 			go cygxService.MakeActivitySigninImg(v)
 			go cygxService.MakeActivitySigninImg(v)
 		}
 		}

+ 47 - 2
controllers/cygx/activity_signup.go

@@ -2059,7 +2059,8 @@ func (this *ActivitySignupCoAntroller) AddSignuUser() {
 	if len(items) > 0 {
 	if len(items) > 0 {
 		//1用户报名添加到处理研选扣点
 		//1用户报名添加到处理研选扣点
 		for _, v := range items {
 		for _, v := range items {
-			go cygxService.YanXuanActivityPointsBillSignupAdd(v.ActivityId, v.UserId, adminInfo.AdminId)
+			time.Sleep(100 * time.Millisecond) // 添加0.1秒的延时
+			cygxService.YanXuanActivityPointsBillSignupAdd(v.ActivityId, v.UserId, adminInfo.AdminId)
 		}
 		}
 
 
 		go cygxService.AddctivitySignupDetailListByAdminSignup(req.ActivityIds) //已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中
 		go cygxService.AddctivitySignupDetailListByAdminSignup(req.ActivityIds) //已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中
@@ -2098,12 +2099,34 @@ func (this *ActivitySignupCoAntroller) AskList() {
 		return
 		return
 	}
 	}
 	list, err := cygx.GetActivityHelpAskList(activityId)
 	list, err := cygx.GetActivityHelpAskList(activityId)
-	respist := new(cygx.ActivityHelpAskListResp)
 	if err != nil {
 	if err != nil {
 		br.Msg = "获取失败"
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 		return
 	}
 	}
+	var userIds []string
+	for _, v := range list {
+		userIds = append(userIds, strconv.Itoa(v.UserId))
+	}
+	// 查询留言相关的用户
+	var userOthers []*models.WxUser
+	if len(userIds) > 0 {
+		userOthers, err = models.GetWxUserListByUserIds(strings.Join(userIds, ","))
+		if err != nil {
+			br.Msg = "查询留言用户出错"
+			br.ErrMsg = "查询留言用户出错,Err:" + err.Error()
+			return
+		}
+	}
+	usersMapName := make(map[int]string)
+	for _, v := range userOthers {
+		usersMapName[int(v.UserId)] = v.RealName
+	}
+	for _, v := range list {
+		v.RealName = usersMapName[v.UserId]
+	}
+	respist := new(cygx.ActivityHelpAskListResp)
+
 	respist.List = list
 	respist.List = list
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true
@@ -2141,6 +2164,28 @@ func (this *ActivitySignupCoAntroller) AskListExport() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 		return
 	}
 	}
+
+	var userIds []string
+	for _, v := range list {
+		userIds = append(userIds, strconv.Itoa(v.UserId))
+	}
+	// 查询留言相关的用户
+	var userOthers []*models.WxUser
+	if len(userIds) > 0 {
+		userOthers, err = models.GetWxUserListByUserIds(strings.Join(userIds, ","))
+		if err != nil {
+			br.Msg = "查询留言用户出错"
+			br.ErrMsg = "查询留言用户出错,Err:" + err.Error()
+			return
+		}
+	}
+	usersMapName := make(map[int]string)
+	for _, v := range userOthers {
+		usersMapName[int(v.UserId)] = v.RealName
+	}
+	for _, v := range list {
+		v.RealName = usersMapName[v.UserId]
+	}
 	//创建excel
 	//创建excel
 	dir, err := os.Executable()
 	dir, err := os.Executable()
 	exPath := filepath.Dir(dir)
 	exPath := filepath.Dir(dir)

+ 4 - 4
controllers/cygx/activity_special_trip.go

@@ -153,8 +153,8 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 			itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 			itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 			itemBill.AdminId = AdminUser.AdminId
 			itemBill.AdminId = AdminUser.AdminId
 
 
-			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
-				//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME || activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
+				//如果是策略、固收行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
 				maxChartPermissionId, maxChartPermissionName, err := cygxService.GetSpecialBillMaxChartPermissionId(infoUser)
 				maxChartPermissionId, maxChartPermissionName, err := cygxService.GetSpecialBillMaxChartPermissionId(infoUser)
 				if err != nil {
 				if err != nil {
 					br.Msg = "操作失败"
 					br.Msg = "操作失败"
@@ -568,8 +568,8 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 	itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 	itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 	itemBill.AdminId = sysUser.AdminId
 	itemBill.AdminId = sysUser.AdminId
 
 
-	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
-		//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME || activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
+		//如果是策略、固收行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
 		lastTripBill, err := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, userId)
 		lastTripBill, err := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, userId)
 		if err != nil {
 		if err != nil {
 			br.Msg = "操作失败"
 			br.Msg = "操作失败"

+ 3 - 1
controllers/cygx/apply_record.go

@@ -179,9 +179,11 @@ func (this *ApplyRecordController) ListSysRole() {
 
 
 		switch v.RegisterPlatform {
 		switch v.RegisterPlatform {
 		case 1:
 		case 1:
-			list[i].ApplicationSource = "小程序"
+			list[i].ApplicationSource = "查研小程序"
 		case 2:
 		case 2:
 			list[i].ApplicationSource = "网页版"
 			list[i].ApplicationSource = "网页版"
+		case 5:
+			list[i].ApplicationSource = "研选小程序"
 		}
 		}
 
 
 		switch v.InviteCompanySource {
 		switch v.InviteCompanySource {

+ 2 - 1
controllers/cygx/contract_allocation.go

@@ -13,6 +13,7 @@ import (
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/models/system"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/utils"
 	"hongze/hz_crm_api/utils"
+	"math"
 	"os"
 	"os"
 	"path/filepath"
 	"path/filepath"
 	"strconv"
 	"strconv"
@@ -519,7 +520,7 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 	for _, p := range hasPermissions {
 	for _, p := range hasPermissions {
 		hasMap[p.ChartPermissionId] = p
 		hasMap[p.ChartPermissionId] = p
 		if p.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 		if p.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
-			pointMoney = 0.2 * p.Points
+			pointMoney = math.Round(0.2*p.Points*100) / 100 // 将给定数字舍入到最近的整数,处理精度问题
 		}
 		}
 	}
 	}
 
 

+ 10 - 9
controllers/cygx/industrial_management.go

@@ -54,14 +54,15 @@ func (this *IndustrialManagementController) ChartPermissionList() {
 	//判断是否是策略平台的报告类型
 	//判断是否是策略平台的报告类型
 	if isCeLueReport {
 	if isCeLueReport {
 		for _, v := range list {
 		for _, v := range list {
-			if v.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
-				resp.List = append(resp.List, v)
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN || v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
+				continue
 			}
 			}
+			resp.List = append(resp.List, v)
 		}
 		}
-		item := new(cygx.ChartPermission)
-		item.PermissionName = utils.GU_SHOU_NAME
-		item.ChartPermissionId = utils.GU_SHOU_ID
-		resp.List = append(resp.List, item)
+		//item := new(cygx.ChartPermission)
+		//item.PermissionName = utils.GU_SHOU_NAME
+		//item.ChartPermissionId = utils.GU_SHOU_ID
+		//resp.List = append(resp.List, item)
 	} else {
 	} else {
 		for _, v := range list {
 		for _, v := range list {
 			if (v.PermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN || v.PermissionName == utils.YAN_XUAN_KOU_DIAN_BAO_NAME) && isHideResearch {
 			if (v.PermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN || v.PermissionName == utils.YAN_XUAN_KOU_DIAN_BAO_NAME) && isHideResearch {
@@ -187,7 +188,7 @@ func (this *IndustrialManagementController) ChartPermissionFirstProduct() {
 	}
 	}
 	//医药消费科技制造策略
 	//医药消费科技制造策略
 	for _, v := range list {
 	for _, v := range list {
-		if v.PermissionName == utils.YI_YAO_NAME || v.PermissionName == utils.XIAO_FEI_NAME || v.PermissionName == utils.KE_JI_NAME || v.PermissionName == utils.ZHI_ZAO_NAME || v.PermissionName == utils.CE_LUE_NAME {
+		if v.PermissionName == utils.YI_YAO_NAME || v.PermissionName == utils.XIAO_FEI_NAME || v.PermissionName == utils.KE_JI_NAME || v.PermissionName == utils.ZHI_ZAO_NAME || v.PermissionName == utils.CE_LUE_NAME || v.PermissionName == utils.GU_SHOU_NAME {
 			resp.List = append(resp.List, v)
 			resp.List = append(resp.List, v)
 		}
 		}
 	}
 	}
@@ -214,9 +215,9 @@ func (this *IndustrialManagementController) ChartPermissionListActivitySpecial()
 		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
 		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
 		return
 		return
 	}
 	}
-	//医药、消费、科技、制造、策略
+	//医药、消费、科技、制造、策略,固收
 	for _, v := range list {
 	for _, v := range list {
-		if v.PermissionName == utils.YI_YAO_NAME || v.PermissionName == utils.XIAO_FEI_NAME || v.PermissionName == utils.KE_JI_NAME || v.PermissionName == utils.ZHI_ZAO_NAME || v.PermissionName == utils.CE_LUE_NAME {
+		if v.PermissionName == utils.YI_YAO_NAME || v.PermissionName == utils.XIAO_FEI_NAME || v.PermissionName == utils.KE_JI_NAME || v.PermissionName == utils.ZHI_ZAO_NAME || v.PermissionName == utils.CE_LUE_NAME || v.PermissionName == utils.GU_SHOU_NAME {
 			resp.List = append(resp.List, v)
 			resp.List = append(resp.List, v)
 		}
 		}
 	}
 	}

+ 23 - 0
controllers/cygx/summary_manage.go

@@ -7,6 +7,7 @@ import (
 	"github.com/tealeg/xlsx"
 	"github.com/tealeg/xlsx"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services"
 	"hongze/hz_crm_api/services"
@@ -1105,6 +1106,28 @@ func (this *SummaryManage) ArticleCollection() {
 		br.ErrMsg = "获取列表失败,Err:" + err.Error()
 		br.ErrMsg = "获取列表失败,Err:" + err.Error()
 		return
 		return
 	}
 	}
+
+	//获取对应销售名称
+	if len(list) > 0 {
+		var companyIds []int
+		for _, v := range list {
+			companyIds = append(companyIds, v.CompanyId)
+		}
+		listCompanyProduct, err := company.GetCompanyProductListByCompanyIds(companyIds, 2)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取销售列表失败,Err:" + err.Error()
+			return
+		}
+		mapSellName := make(map[int]string)
+		for _, v := range listCompanyProduct {
+			mapSellName[v.CompanyId] = v.SellerName
+		}
+		for _, v := range list {
+			v.SellerName = mapSellName[v.CompanyId]
+		}
+	}
+
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true
 	br.Msg = "获取成功"
 	br.Msg = "获取成功"

+ 88 - 1
controllers/cygx/yanxuan_special.go

@@ -2,10 +2,12 @@ package cygx
 
 
 import (
 import (
 	"encoding/json"
 	"encoding/json"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
 	"github.com/tealeg/xlsx"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/models/cygx"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/services/elastic"
 	"hongze/hz_crm_api/services/elastic"
@@ -74,6 +76,7 @@ func (this *YanxuanSpecialController) Add() {
 		UserId:      req.UserId,
 		UserId:      req.UserId,
 		RealName:    req.RealName,
 		RealName:    req.RealName,
 		Mobile:      req.Mobile,
 		Mobile:      req.Mobile,
+		MobileInit:  infoUser.Mobile,
 		CompanyName: infoUser.CompanyName,
 		CompanyName: infoUser.CompanyName,
 		CompanyId:   infoUser.CompanyId,
 		CompanyId:   infoUser.CompanyId,
 		CreateTime:  time.Now(),
 		CreateTime:  time.Now(),
@@ -251,15 +254,46 @@ func (this *YanxuanSpecialController) AuthorList() {
 	}
 	}
 
 
 	var userIds []int
 	var userIds []int
-
+	var mobiles []string
 	for _, v := range list {
 	for _, v := range list {
 		userIds = append(userIds, v.UserId)
 		userIds = append(userIds, v.UserId)
+		if v.MobileInit != "" {
+			mobiles = append(mobiles, v.MobileInit)
+		}
+	}
+
+	listUser, err := models.GetWxUserRaiSllerListByUserMobile(mobiles)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
 	}
 	}
+	//获取用户当前最新的公司信息
+	mapWxUserSller := make(map[string]*models.WxUserSller)
+	for _, v := range listUser {
+		mapWxUserSller[v.Mobile] = v
+	}
+
+	//对权益管理员跟超管展示全部手机号
+	var isShow bool
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
+		isShow = true
+	}
+
 	//获取专栏用户最新的一篇文章信息
 	//获取专栏用户最新的一篇文章信息
 	mapNewTime := cygxService.GetBestNewYanxuanSpecialByUserId(userIds)
 	mapNewTime := cygxService.GetBestNewYanxuanSpecialByUserId(userIds)
 	for _, v := range list {
 	for _, v := range list {
 		v.SpecialAuthorId = v.Id
 		v.SpecialAuthorId = v.Id
 		v.ArticlePublishTime = mapNewTime[v.UserId]
 		v.ArticlePublishTime = mapNewTime[v.UserId]
+		mapItem := mapWxUserSller[v.MobileInit]
+		if mapItem != nil {
+			v.CompanyName = mapItem.CompanyName
+			v.CompanyId = mapItem.CompanyId
+		}
+		if isShow {
+			v.Mobile = v.MobileInit
+		}
+
 	}
 	}
 	resp := new(cygx.GetCygxYanxuanSpecialAuthorItemResp)
 	resp := new(cygx.GetCygxYanxuanSpecialAuthorItemResp)
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -561,6 +595,22 @@ func (this *YanxuanSpecialController) ListPv() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 		return
 	}
 	}
+
+	var companyIds []int
+	for _, v := range list {
+		companyIds = append(companyIds, v.CompanyId)
+	}
+
+	listCompanyProduct, err := company.GetCompanyProductListByCompanyIds(companyIds, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取销售列表失败,Err:" + err.Error()
+		return
+	}
+	mapsCompanyStatus := make(map[int]string)
+	for _, v := range listCompanyProduct {
+		mapsCompanyStatus[v.CompanyId] = v.Status
+	}
 	//创建excel
 	//创建excel
 	dir, err := os.Executable()
 	dir, err := os.Executable()
 	exPath := filepath.Dir(dir)
 	exPath := filepath.Dir(dir)
@@ -588,8 +638,12 @@ func (this *YanxuanSpecialController) ListPv() {
 	rowTitle := sheet.AddRow()
 	rowTitle := sheet.AddRow()
 	cellA := rowTitle.AddCell()
 	cellA := rowTitle.AddCell()
 	cellA.Value = "姓名"
 	cellA.Value = "姓名"
+	cellMobile := rowTitle.AddCell()
+	cellMobile.Value = "手机号"
 	cellB := rowTitle.AddCell()
 	cellB := rowTitle.AddCell()
 	cellB.Value = "公司名称"
 	cellB.Value = "公司名称"
+	cellCompanyStatus := rowTitle.AddCell()
+	cellCompanyStatus.Value = "客户状态"
 	cellC := rowTitle.AddCell()
 	cellC := rowTitle.AddCell()
 	cellC.Value = "所属权益销售"
 	cellC.Value = "所属权益销售"
 	cellD := rowTitle.AddCell()
 	cellD := rowTitle.AddCell()
@@ -601,8 +655,12 @@ func (this *YanxuanSpecialController) ListPv() {
 		row := sheet.AddRow()
 		row := sheet.AddRow()
 		cellA := row.AddCell()
 		cellA := row.AddCell()
 		cellA.Value = item.RealName
 		cellA.Value = item.RealName
+		cellMobile := row.AddCell()
+		cellMobile.Value = item.Mobile
 		cellB := row.AddCell()
 		cellB := row.AddCell()
 		cellB.Value = item.CompanyName
 		cellB.Value = item.CompanyName
+		cellCompanyStatus := row.AddCell()
+		cellCompanyStatus.Value = mapsCompanyStatus[item.CompanyId]
 		cellC := row.AddCell()
 		cellC := row.AddCell()
 		cellC.Value = item.SellerName
 		cellC.Value = item.SellerName
 		cellD := row.AddCell()
 		cellD := row.AddCell()
@@ -787,3 +845,32 @@ func (this *YanxuanSpecialController) SpecialAuthorFansList() {
 	br.Success = true
 	br.Success = true
 	br.Msg = "获取成功"
 	br.Msg = "获取成功"
 }
 }
+
+func init_928() {
+	var condition string
+	var pars []interface{}
+	list, err := cygx.GetYanxuanSpecialAuthorList(condition, pars, 0, 999)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	for k, v := range list {
+		fmt.Println(k)
+		//获取关联公司的用户信息
+		infoUser, err := cygx.GetUserAndCompanyNameList(v.UserId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			fmt.Println(err)
+			return
+		}
+		if infoUser == nil {
+			continue
+		}
+		err = cygx.UpdateSpecialAuthormobile_init(infoUser.Mobile, infoUser.UserId)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+	}
+	return
+}

+ 2 - 2
controllers/english_report/en_permission.go

@@ -198,7 +198,7 @@ func (this *EnPermissionController) ParentList() {
 		return
 		return
 	}
 	}
 
 
-	cond := fmt.Sprintf(` AND %s = ?`, models.EnPermissionColumns.ParentId)
+	cond := fmt.Sprintf(` enabled = 1 AND %s = ?`, models.EnPermissionColumns.ParentId)
 	pars := make([]interface{}, 0)
 	pars := make([]interface{}, 0)
 	pars = append(pars, 0)
 	pars = append(pars, 0)
 	ob := new(models.EnPermission)
 	ob := new(models.EnPermission)
@@ -278,7 +278,7 @@ func (this *EnPermissionController) List() {
 		limitIds = ps
 		limitIds = ps
 	}
 	}
 
 
-	cond := ``
+	cond := ` AND enabled=1 `
 	pars := make([]interface{}, 0)
 	pars := make([]interface{}, 0)
 	if keyword != "" {
 	if keyword != "" {
 		k := fmt.Sprint("%", keyword, "%")
 		k := fmt.Sprint("%", keyword, "%")

+ 7 - 0
controllers/english_report/english_company.go

@@ -58,6 +58,7 @@ func (this *EnglishCompanyController) List() {
 	sortType, _ := this.GetInt("SortType", 0)
 	sortType, _ := this.GetInt("SortType", 0)
 	sortParam := this.GetString("SortParam", "")
 	sortParam := this.GetString("SortParam", "")
 	strPermissionIds := this.GetString("EnPermissionIds", "")
 	strPermissionIds := this.GetString("EnPermissionIds", "")
+	sellers := this.GetString("Sellers", "")
 
 
 	var cond, order string
 	var cond, order string
 	var pars []interface{}
 	var pars []interface{}
@@ -84,6 +85,12 @@ func (this *EnglishCompanyController) List() {
 		cond += fmt.Sprintf(` AND c.company_id IN (%s) `, utils.GetOrmInReplace(len(companyIds)))
 		cond += fmt.Sprintf(` AND c.company_id IN (%s) `, utils.GetOrmInReplace(len(companyIds)))
 		pars = append(pars, companyIds)
 		pars = append(pars, companyIds)
 	}
 	}
+
+	if sellers != "" {
+		sellerIds := strings.Split(sellers, ",")
+		cond += fmt.Sprintf(` AND c.seller_id IN (%s) `, utils.GetOrmInReplace(len(sellerIds)))
+		pars = append(pars, sellerIds)
+	}
 	// 品种权限
 	// 品种权限
 	if strPermissionIds != "" {
 	if strPermissionIds != "" {
 		permissionIdArr := strings.Split(strPermissionIds, ",")
 		permissionIdArr := strings.Split(strPermissionIds, ",")

+ 69 - 48
controllers/full_company.go

@@ -2375,51 +2375,60 @@ func (this *FullCompanyController) Detail() {
 					}
 					}
 				}
 				}
 			}
 			}
-			for _, v := range utils.PermissionFiccClassifyArr {
-				checkList := make([]int, 0)
-				plist := new(company.PermissionLookList)
-				items, err := company.GetPermissionLookItems(item.ProductId, v)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					return
-				}
-				for itemK, n := range items {
-					permission, err := company.GetCompanyPermissionCheckItem(companyId, n.ChartPermissionId)
-					if err != nil && err.Error() != utils.ErrNoRow() {
-						br.Msg = "获取失败"
-						br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+			//子权限切片集合
+			allFiccPermissions, permissionMap, e := services.GetBasePermissionLookItem(utils.COMPANY_PRODUCT_FICC_ID)
+			if e != nil {
+				br.Msg = "查询基础权限失败"
+				br.ErrMsg = "查询基础权限失败,Err:" + e.Error()
+				return
+			}
+			//遍历获取
+			for _, v := range allFiccPermissions {
+				if v.ParentId == 0 {
+					checkList := make([]int, 0)
+					plist := new(company.PermissionLookList)
+					items, ok := permissionMap[v.ChartPermissionId]
+					if !ok {
+						br.Msg = "获取权限信息失败"
 						return
 						return
 					}
 					}
-					if permission != nil && permission.ChartPermissionId > 0 {
-						checkList = append(checkList, n.ChartPermissionId)
-						items[itemK].StartDate = permission.StartDate
-						items[itemK].EndDate = permission.EndDate
-						items[itemK].Status = permission.Status
+					for itemK, n := range items {
+						permission, err := company.GetCompanyPermissionCheckItem(companyId, n.ChartPermissionId)
+						if err != nil && err.Error() != utils.ErrNoRow() {
+							br.Msg = "获取失败"
+							br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+							return
+						}
+						if permission != nil && permission.ChartPermissionId > 0 {
+							checkList = append(checkList, n.ChartPermissionId)
+							items[itemK].StartDate = permission.StartDate
+							items[itemK].EndDate = permission.EndDate
+							items[itemK].Status = permission.Status
 
 
-						endDateTime, _ := time.Parse(utils.FormatDate, permission.EndDate)
-						endDateTime = endDateTime.AddDate(0, 0, 1)
-						sub := endDateTime.Sub(time.Now())
-						if sub < 0 {
-							sub = 0
+							endDateTime, _ := time.Parse(utils.FormatDate, permission.EndDate)
+							endDateTime = endDateTime.AddDate(0, 0, 1)
+							sub := endDateTime.Sub(time.Now())
+							if sub < 0 {
+								sub = 0
+							}
+							expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
+							items[itemK].ExpireDay = expireDay
 						}
 						}
-						expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
-						items[itemK].ExpireDay = expireDay
+						//count, err := company.GetCompanyPermissionCheck(companyId, n.ChartPermissionId)
+						//if err != nil {
+						//	br.Msg = "获取失败"
+						//	br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
+						//	return
+						//}
+						//if count > 0 {
+						//	checkList = append(checkList, n.ChartPermissionId)
+						//}
 					}
 					}
-					//count, err := company.GetCompanyPermissionCheck(companyId, n.ChartPermissionId)
-					//if err != nil {
-					//	br.Msg = "获取失败"
-					//	br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
-					//	return
-					//}
-					//if count > 0 {
-					//	checkList = append(checkList, n.ChartPermissionId)
-					//}
+					plist.Items = items
+					plist.ClassifyName = v.PermissionName
+					plist.CheckList = checkList
+					item.PermissionList = append(item.PermissionList, plist)
 				}
 				}
-				plist.Items = items
-				plist.ClassifyName = v
-				plist.CheckList = checkList
-				item.PermissionList = append(item.PermissionList, plist)
 			}
 			}
 			resp.FiccItem = item
 			resp.FiccItem = item
 			if (roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
 			if (roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
@@ -2447,7 +2456,7 @@ func (this *FullCompanyController) Detail() {
 			}
 			}
 
 
 			// CRM8.8-权益权限列表调用较多、统一进行调整
 			// CRM8.8-权益权限列表调用较多、统一进行调整
-			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit)
+			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit, []string{"调研"})
 			if e != nil {
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
@@ -2637,8 +2646,19 @@ func (this *FullCompanyController) PermissionLook() {
 	}
 	}
 
 
 	resp := new(company.PermissionLookResp)
 	resp := new(company.PermissionLookResp)
-	permissionArr := []string{}
+	permissionArr := make([]*models.ChartPermission, 0)
+	var err error
 	if lookType == 1 {
 	if lookType == 1 {
+		permissionArr, err = services.GetPermissionFirstArr(productId)
+	} else {
+		permissionArr, err = services.GetPermissionFirstArr(0)
+	}
+	if err != nil {
+		br.Msg = "获取权限失败"
+		br.ErrMsg = "获取权限失败 err:" + err.Error()
+		return
+	}
+	/*if lookType == 1 {
 		if productId == 1 {
 		if productId == 1 {
 			for _, permission := range utils.PermissionFiccClassifyArr {
 			for _, permission := range utils.PermissionFiccClassifyArr {
 				permissionArr = append(permissionArr, permission)
 				permissionArr = append(permissionArr, permission)
@@ -2654,21 +2674,22 @@ func (this *FullCompanyController) PermissionLook() {
 		for _, permission := range utils.PermissionAllClassifyArr {
 		for _, permission := range utils.PermissionAllClassifyArr {
 			permissionArr = append(permissionArr, permission)
 			permissionArr = append(permissionArr, permission)
 		}
 		}
-	}
+	}*/
 	//ficc权限类目
 	//ficc权限类目
 	for _, v := range permissionArr {
 	for _, v := range permissionArr {
 		checkList := make([]int, 0)
 		checkList := make([]int, 0)
 		p := new(company.PermissionLookList)
 		p := new(company.PermissionLookList)
+		p.Items = make([]*company.PermissionLookItem, 0)
 		var productId int
 		var productId int
 		//if v == "权益" {
 		//if v == "权益" {
 		//	productId = 2
 		//	productId = 2
 		//} else {
 		//} else {
 		//	productId = 1
 		//	productId = 1
 		//}
 		//}
-		if v != "权益" {
+		if v.PermissionName != "权益" {
 			productId = 1
 			productId = 1
 			//mapPermissionName := make(map[string]int)
 			//mapPermissionName := make(map[string]int)
-			items, err := company.GetPermissionLookItems(productId, v)
+			items, err := company.GetPermissionLookItemsByParentId(productId, v.ChartPermissionId)
 			if err != nil {
 			if err != nil {
 				br.Msg = "获取失败"
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 				br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
@@ -2714,7 +2735,7 @@ func (this *FullCompanyController) PermissionLook() {
 				}
 				}
 				expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
 				expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
 				items[i].ExpireDay = expireDay
 				items[i].ExpireDay = expireDay
-				items[i].ClassifyName = v
+				items[i].ClassifyName = v.PermissionName
 				if lookType == 1 {
 				if lookType == 1 {
 					permissionList = append(permissionList, items[i])
 					permissionList = append(permissionList, items[i])
 				} else {
 				} else {
@@ -2731,7 +2752,7 @@ func (this *FullCompanyController) PermissionLook() {
 					mapPermissionNameList[v.PermissionName] = v.ChartPermissionId
 					mapPermissionNameList[v.PermissionName] = v.ChartPermissionId
 				}
 				}
 			}
 			}
-			p.ClassifyName = v
+			p.ClassifyName = v.PermissionName
 			//p.Items = permissionList
 			//p.Items = permissionList
 			p.CheckList = checkList
 			p.CheckList = checkList
 			if lookType == 1 {
 			if lookType == 1 {
@@ -2747,13 +2768,13 @@ func (this *FullCompanyController) PermissionLook() {
 	//权益权限类目
 	//权益权限类目
 	for _, v := range permissionArr {
 	for _, v := range permissionArr {
 
 
-		if v == "权益" {
+		if v.PermissionName == "权益" {
 			// CRM8.8-权益权限列表调用较多、统一进行调整
 			// CRM8.8-权益权限列表调用较多、统一进行调整
 			unify := false
 			unify := false
 			if lookType == 1 {
 			if lookType == 1 {
 				unify = true
 				unify = true
 			}
 			}
-			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify)
+			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify, []string{"调研"})
 			if e != nil {
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()

+ 11 - 4
controllers/help_doc/doc.go

@@ -68,6 +68,10 @@ func (this *HelpDocController) Add() {
 		}
 		}
 	}
 	}
 
 
+	var resp help_doc.HelpDocSaveResp
+	resp.HelpDocId = req.Id
+	resp.ModifyTime = time.Now().Format(utils.FormatDateTime)
+
 	item := new(help_doc.HelpDoc)
 	item := new(help_doc.HelpDoc)
 	item.ClassifyId = req.ClassifyId
 	item.ClassifyId = req.ClassifyId
 	item.Title = req.Title
 	item.Title = req.Title
@@ -85,13 +89,16 @@ func (this *HelpDocController) Add() {
 	}
 	}
 
 
 	if req.Id == 0 {
 	if req.Id == 0 {
-		_, err = help_doc.AddHelpDoc(item)
-		if err != nil {
+		id, e := help_doc.AddHelpDoc(item)
+		if e != nil {
+			err = e
 			br.Msg = "新增失败"
 			br.Msg = "新增失败"
 			br.ErrMsg = "保存失败,Err:" + err.Error()
 			br.ErrMsg = "保存失败,Err:" + err.Error()
 			return
 			return
 		}
 		}
-	} else {
+		resp.HelpDocId = id
+		resp.ModifyTime = item.ModifyTime.Format(utils.FormatDateTime)
+	} else if req.IsChange {
 		err = help_doc.EditHelpDoc(item, req.Id)
 		err = help_doc.EditHelpDoc(item, req.Id)
 		if err != nil {
 		if err != nil {
 			br.Msg = "保存失败"
 			br.Msg = "保存失败"
@@ -107,7 +114,7 @@ func (this *HelpDocController) Add() {
 	}
 	}
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true
-
+	br.Data = resp
 }
 }
 
 
 // @Title 获取报告详情接口
 // @Title 获取报告详情接口

+ 12 - 0
controllers/report.go

@@ -202,6 +202,12 @@ func (this *ReportController) SetDayWeekReportUpdateRule() {
 		br.ErrMsg = "设置暂停时间失败, Err: " + err.Error()
 		br.ErrMsg = "设置暂停时间失败, Err: " + err.Error()
 		return
 		return
 	}
 	}
+	// 同步eta系统的章节更新配置
+	go func() {
+		ruleSyncReq := new(services.EditReportChapterTypeRuleSyncReq)
+		ruleSyncReq.ResearchType = researchType
+		_, _ = services.EditReportChapterTypeRuleSync(ruleSyncReq)
+	}()
 
 
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true
@@ -252,6 +258,12 @@ func (this *ReportController) SetDayWeekReportEnableRule() {
 		return
 		return
 	}
 	}
 
 
+	// 同步eta系统的章节更新配置
+	go func() {
+		ruleSyncReq := new(services.EditReportChapterTypeRuleSyncReq)
+		_, _ = services.EditReportChapterTypeRuleSync(ruleSyncReq)
+	}()
+
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true
 	br.Msg = "操作成功"
 	br.Msg = "操作成功"

+ 150 - 0
controllers/report_chapter_type.go

@@ -0,0 +1,150 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/services"
+	"hongze/hz_crm_api/utils"
+)
+
+// ReportChapterTypeController 报告章节配置
+type ReportChapterTypeController struct {
+	BaseAuthController
+}
+
+// List
+// @Title 报告章节列表
+// @Description 报告章节列表
+// @Param   ReportType  query  string  true  "报告类型: day-晨报; week-周报"
+// @Success 200 {object} models.ReportChapterTypePageListResp
+// @router /chapter_type/list [get]
+func (this *ReportChapterTypeController) List() {
+	br := new(models.BaseResponse).Init()
+	br.IsSendEmail = false
+	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
+	}
+	reportType := this.GetString("ReportType")
+	typeArr := []string{utils.REPORT_TYPE_DAY, utils.REPORT_TYPE_WEEK}
+	if !utils.InArrayByStr(typeArr, reportType) {
+		br.Msg = "请选择报告类型"
+		return
+	}
+
+	cond := ` AND research_type = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, reportType)
+	list, e := models.GetReportChapterTypePageList(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取报告章节列表失败, Err: " + e.Error()
+		return
+	}
+	respList := make([]*models.ReportChapterTypeListItem, 0)
+	for i := range list {
+		respList = append(respList, &models.ReportChapterTypeListItem{
+			ReportChapterTypeId:   list[i].ReportChapterTypeId,
+			ReportChapterTypeName: list[i].ReportChapterTypeName,
+			Sort:                  list[i].Sort,
+			CreatedTime:           list[i].CreatedTime.Format(utils.FormatDateTime),
+			ResearchType:          list[i].ResearchType,
+			SelectedImage:         list[i].SelectedImage,
+			UnselectedImage:       list[i].UnselectedImage,
+			WordsImage:            list[i].YbBottomIcon, // 此处的不一样
+			EditImgUrl:            list[i].EditImgUrl,
+			IsShow:                list[i].IsShow,
+			Enabled:               list[i].Enabled,
+		})
+	}
+
+	resp := new(models.ReportChapterTypeListResp)
+	resp.List = respList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// Edit
+// @Title 编辑报告章节
+// @Description 编辑报告章节
+// @Param	request  body  models.ReportChapterTypeEditReq  true  "type json string"
+// @Success 200 string "操作成功"
+// @router /chapter_type/edit [post]
+func (this *ReportChapterTypeController) Edit() {
+	br := new(models.BaseResponse).Init()
+	br.IsSendEmail = false
+	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.ReportChapterTypeEditReq
+	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ReportChapterTypeId <= 0 {
+		br.Msg = "章节ID有误"
+		return
+	}
+
+	item, e := models.GetReportChapterTypeById(req.ReportChapterTypeId)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取报告章节失败, Err:" + e.Error()
+		return
+	}
+
+	item.SelectedImage = req.SelectedImage
+	item.UnselectedImage = req.UnselectedImage
+	item.PcSelectedImage = req.SelectedImage
+	item.PcUnselectedImage = req.UnselectedImage
+	item.EditImgUrl = req.EditImgUrl
+	item.YbIconUrl = req.UnselectedImage
+	item.YbBottomIcon = req.WordsImage
+	item.IsShow = req.IsShow
+	item.ReportChapterTypeThumb = req.EditImgUrl
+	item.BannerUrl = req.UnselectedImage
+
+	updateCols := []string{"SelectedImage", "UnselectedImage",
+		"PcSelectedImage", "PcUnselectedImage", "EditImgUrl", "YbIconUrl", "YbBottomIcon", "IsShow",
+		"ReportChapterTypeThumb", "BannerUrl",
+	}
+	if e = item.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新报告章节失败, Err:" + e.Error()
+		return
+	}
+
+	// 清除小程序端的章节缓存
+	{
+		key := "hongze_yb:report_chapter_type:GetEffectTypeID"
+		_ = utils.Rc.Delete(key)
+	}
+	// 同步eta系统的章节小程序配置
+	go func() {
+		var reqEta services.EditReportChapterTypeSyncReq
+		reqEta.ReportChapterTypeId = req.ReportChapterTypeId
+		_, _ = services.EditReportChapterTypeSync(&reqEta)
+	}()
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 128 - 0
controllers/roadshow/report.go

@@ -2,6 +2,7 @@ package roadshow
 
 
 import (
 import (
 	"encoding/json"
 	"encoding/json"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/roadshow"
 	"hongze/hz_crm_api/models/roadshow"
@@ -1152,3 +1153,130 @@ func (this *CalendarController) ResearcherBusinessTrip() {
 	br.Data = resp
 	br.Data = resp
 	return
 	return
 }
 }
+
+// OverseasCustomReportCalendarList
+// @Title 路演详情列表
+// @Description 路演详情列表接口
+// @Param   Keyword   query   string  true       "关键字:客户名称"
+// @Param   CompanyStatus   query   string  true       "客户状态,枚举值:正式、试用、关闭"
+// @Param   SellerId   query   int  true       "销售id列表;多个用英文,分割"
+// @Param   ResearcherId   query   int  true       "销售id列表;多个用英文,分割"
+// @Param   StartDate   query   string  true       "开始日期,格式:2022-04-06"
+// @Param   EndDate   query   string  true       "结束日期,格式:2022-04-06"
+// @Param   SortField	query	string		false	"排序字段:start_date"
+// @Param   SortDesc	query	int		false	"1:降序,默认,2:升序"
+// @Success 200 {object} []roadshow.RsReportRecordList
+// @router /overseas_custom/calendar/list [get]
+func (this *CalendarController) OverseasCustomReportCalendarList() {
+	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
+	}
+	keyword := this.GetString("Keyword")
+	companyStatus := this.GetString("CompanyStatus")
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	sellerId := this.GetString("SellerId")
+	researcherId := this.GetString("ResearcherId")
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	sortField := this.GetString("SortField")
+	sortDesc, _ := this.GetInt("SortDesc")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	switch sortField {
+	case "start_date":
+	default:
+		sortField = "start_date"
+	}
+
+	// "1:降序,默认,2:升序"
+	sortDesStr := ` desc `
+	switch sortDesc {
+	case 2:
+		sortDesStr = ` asc `
+	default:
+		sortDesStr = "desc"
+	}
+
+	total, list, err := roadshow.GetOverseaCustomCalendarList(keyword, sellerId, researcherId, startDate, endDate, companyStatus, sortField, sortDesStr, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,ERR:" + err.Error()
+		return
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	resp := new(roadshow.OverseaCustomRecordInfoResp)
+	resp.Paging = page
+	resp.List = list
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+	return
+}
+
+// OverseasCustomCalendarAdminList
+// @Title 海外客户路演用户列表接口
+// @Description 海外客户路演用户列表接口
+// @Param   AdminType   query   string  true       "枚举值:researcher、seller"
+// @Success 200 {object} []roadshow.AdminInfo
+// @router /overseas_custom/sys_user/list [get]
+func (this *CalendarController) OverseasCustomCalendarAdminList() {
+	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
+	}
+	adminType := this.GetString("AdminType")
+
+	var list []*roadshow.AdminInfo
+	var err error
+	//选择的人员类型(发起人还是被发起人)
+	if adminType == "seller" {
+		list, err = roadshow.GetOverseaCustomCalendarSellerList()
+	} else if adminType == "researcher" {
+		list, err = roadshow.GetOverseaCustomCalendarResearcherList()
+	} else {
+		br.Msg = "错误的类型"
+		br.IsSendEmail = false
+	}
+
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,ERR:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+	return
+}

+ 8 - 33
models/advisory/chart_permission.go

@@ -1,7 +1,6 @@
 package advisory
 package advisory
 
 
 import (
 import (
-	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/client/orm"
 )
 )
 
 
@@ -18,7 +17,7 @@ type ChartPermissionResp struct {
 	List []*ChartPermission
 	List []*ChartPermission
 }
 }
 
 
-//用户关注的分类
+// 用户关注的分类
 type ChartPermissionListResp struct {
 type ChartPermissionListResp struct {
 	ChartPermissionId   int    `description:"权限id"`
 	ChartPermissionId   int    `description:"权限id"`
 	ChartPermissionName string `description:"名称"`
 	ChartPermissionName string `description:"名称"`
@@ -32,7 +31,7 @@ type GetChartPermissionAllByChartIdResp struct {
 	ChartPermissionId int `description:"权限id"`
 	ChartPermissionId int `description:"权限id"`
 }
 }
 
 
-//用户关注的分类
+// 用户关注的分类
 type MyChartPermission struct {
 type MyChartPermission struct {
 	ChartPermissionId   int    `description:"权限id"`
 	ChartPermissionId   int    `description:"权限id"`
 	ClassifyName        string `description:"分类名称"`
 	ClassifyName        string `description:"分类名称"`
@@ -59,30 +58,6 @@ type NoAdminInfoResp struct {
 	List []*MyChartPermission
 	List []*MyChartPermission
 }
 }
 
 
-//获取一级分类名称
-func AdvisoryGetFirstChartPermissionAll() (items []*ChartPermission, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT  * FROM chart_permission as ch  WHERE product_id = 1  AND product_name = 'ficc'  GROUP BY ch.classify_name ORDER BY sort ASC; `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
-//获取关注分类名称
-func GetChartPermissionByIds(Ids string) (items []*MyChartPermission, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE chart_permission_id IN (` + Ids + `)`
-	fmt.Println(sql)
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
-func AdvisoryGetChartToClassifyName(ClassifyName string) (items []*ChartPermission, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission  WHERE product_id = 1  AND product_name = 'ficc' AND classify_name = ?  ORDER BY sort ASC `
-	_, err = o.Raw(sql, ClassifyName).QueryRows(&items)
-	return
-}
-
 func GetCategoryInfoById(chartPermissionId int) (item *ChartPermission, err error) {
 func GetCategoryInfoById(chartPermissionId int) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	//o.Using("rddp")
 	//o.Using("rddp")
@@ -91,10 +66,10 @@ func GetCategoryInfoById(chartPermissionId int) (item *ChartPermission, err erro
 	return
 	return
 }
 }
 
 
-//获取分类列表
+// 获取分类列表
 func GetChartPermissionList() (items []*MyChartPermission, err error) {
 func GetChartPermissionList() (items []*MyChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT  * FROM chart_permission as ch  WHERE product_id = 1  AND product_name = 'ficc'   ORDER BY sort ASC; `
+	sql := `SELECT  * FROM chart_permission as ch  WHERE product_id = 1  AND product_name = 'ficc' and parent_id > 0  ORDER BY sort ASC; `
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }
@@ -109,7 +84,7 @@ type GetBuChartPermissionRespLIst struct {
 	List []*GetBuChartPermissionResp
 	List []*GetBuChartPermissionResp
 }
 }
 
 
-//获取用户购买的分类信息
+// 获取用户购买的分类信息
 func GetBuChartPermission(CompanyId int, pars []interface{}) (items []*GetBuChartPermissionResp, err error) {
 func GetBuChartPermission(CompanyId int, pars []interface{}) (items []*GetBuChartPermissionResp, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `SELECT ch.chart_permission_id , ch.permission_name ,ch.image_url  FROM chart_permission  as ch INNER JOIN company_report_permission as co ON co.chart_permission_id = ch.chart_permission_id WHERE co.company_id = ? `
 	sql := `SELECT ch.chart_permission_id , ch.permission_name ,ch.image_url  FROM chart_permission  as ch INNER JOIN company_report_permission as co ON co.chart_permission_id = ch.chart_permission_id WHERE co.company_id = ? `
@@ -117,7 +92,7 @@ func GetBuChartPermission(CompanyId int, pars []interface{}) (items []*GetBuChar
 	return
 	return
 }
 }
 
 
-//获取分类列表
+// 获取分类列表
 func GetPermissionList(condition string, pars []interface{}, startSize, pageSize int) (items []*ChartPermission, err error) {
 func GetPermissionList(condition string, pars []interface{}, startSize, pageSize int) (items []*ChartPermission, err error) {
 	sql := ` SELECT * FROM chart_permission WHERE 1=1 `
 	sql := ` SELECT * FROM chart_permission WHERE 1=1 `
 	if condition != "" {
 	if condition != "" {
@@ -129,7 +104,7 @@ func GetPermissionList(condition string, pars []interface{}, startSize, pageSize
 	return
 	return
 }
 }
 
 
-//获取用户权限的一级分类名称
+// 获取用户权限的一级分类名称
 func GetFirstChartPermissionAllByUser(Ids string) (items []*ChartPermission, err error) {
 func GetFirstChartPermissionAllByUser(Ids string) (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `SELECT  * FROM chart_permission as ch  WHERE product_id = 1  AND product_name = 'ficc' AND chart_permission_id IN (` + Ids + `)` + ` GROUP BY ch.classify_name ORDER BY sort ASC; `
 	sql := `SELECT  * FROM chart_permission as ch  WHERE product_id = 1  AND product_name = 'ficc' AND chart_permission_id IN (` + Ids + `)` + ` GROUP BY ch.classify_name ORDER BY sort ASC; `
@@ -137,7 +112,7 @@ func GetFirstChartPermissionAllByUser(Ids string) (items []*ChartPermission, err
 	return
 	return
 }
 }
 
 
-//获取用户权限的二级分类名称
+// 获取用户权限的二级分类名称
 func GetChartToClassifyNameByUser(ClassifyName, Ids string) (items []*ChartPermission, err error) {
 func GetChartToClassifyNameByUser(ClassifyName, Ids string) (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `SELECT * FROM chart_permission  WHERE product_id = 1  AND product_name = 'ficc' AND classify_name = ?   AND chart_permission_id IN (` + Ids + `)`
 	sql := `SELECT * FROM chart_permission  WHERE product_id = 1  AND product_name = 'ficc' AND classify_name = ?   AND chart_permission_id IN (` + Ids + `)`

+ 33 - 15
models/chart_permission.go

@@ -27,6 +27,8 @@ type ChartPermission struct {
 	CygxAuth            int       `description:"是否是权限,用于查研观向小程序前台权限校验"`
 	CygxAuth            int       `description:"是否是权限,用于查研观向小程序前台权限校验"`
 	YbImgUrl            string    `description:"研报小程序报告列表icon"`
 	YbImgUrl            string    `description:"研报小程序报告列表icon"`
 	PriceDrivenState    int       `description:"品种价格驱动开启状态 0-关闭 1-开启"`
 	PriceDrivenState    int       `description:"品种价格驱动开启状态 0-关闭 1-开启"`
+	ParentId            int       `description:"父级权限id"`
+	IsPublic            int       `description:"是否是公有权限1:公有权限,0私有权限"`
 }
 }
 
 
 // GetChartPermissionById 主键获取权限
 // GetChartPermissionById 主键获取权限
@@ -70,26 +72,42 @@ func GetFiccPermissionExceptTactic() (items []*ChartPermission, err error) {
 	return
 	return
 }
 }
 
 
-// GetPermissionByProductIdAndClassifyName 获取子分类
-func GetPermissionByProductIdAndClassifyName(productId int, classifyName string) (items []*ChartPermission, err error) {
+// GetFiccPermissionSecondPublic 获取ficc公有的二级品种
+func GetFiccPermissionSecondPublic() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE enabled = 1 AND product_id = ? AND classify_name = ? AND permission_type = 0 ORDER BY sort ASC`
-	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
+	sql := `SELECT * FROM chart_permission WHERE enabled = 1 AND permission_type = 0 AND product_id = 1 and parent_id>0 and is_public=1 ORDER BY sort ASC`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+// GetPermissionFirstByProductId 获取一级品种
+func GetPermissionFirstByProductId(productId int) (items []*ChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission WHERE enabled = 1 AND product_id = ? and parent_id=0  ORDER BY sort ASC`
+	_, err = o.Raw(sql, productId).QueryRows(&items)
 	return
 	return
 }
 }
 
 
-// GetYbChartPermissionFirstByName 根据分类名称获取一级分类
-func GetYbChartPermissionFirstByName(classifyName string) (item *YbChartPermissionFirst, err error) {
+// GetPermissionFirst 获取一级品种
+func GetPermissionFirst() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission_first WHERE classify_name = ? LIMIT 1`
-	err = o.Raw(sql, classifyName).QueryRow(&item)
+	sql := `SELECT * FROM chart_permission WHERE enabled = 1 and parent_id=0  ORDER BY sort ASC`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+// GetPermissionByProductIdAndClassifyName 获取子分类
+func GetPermissionByProductIdAndClassifyName(productId int, classifyName string) (items []*ChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission WHERE parent_id > 0 and enabled = 1 AND product_id = ? AND classify_name = ? AND permission_type = 0 ORDER BY sort ASC`
+	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
 
 
 // GetChartPermissionById 主键获取权限
 // GetChartPermissionById 主键获取权限
 func GetChartPermissionByRemark(remark string) (item *ChartPermission, err error) {
 func GetChartPermissionByRemark(remark string) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE remark = ? LIMIT 1`
+	sql := `SELECT * FROM chart_permission WHERE parent_id > 0 and remark = ?  LIMIT 1`
 	err = o.Raw(sql, remark).QueryRow(&item)
 	err = o.Raw(sql, remark).QueryRow(&item)
 	return
 	return
 }
 }
@@ -99,7 +117,7 @@ func GetChartPermissionByIds(permissionIds []string) (list []*ChartPermission, e
 	qb, _ := orm.NewQueryBuilder("mysql")
 	qb, _ := orm.NewQueryBuilder("mysql")
 	// 构建查询对象
 	// 构建查询对象
 	qb.Select("*").From("chart_permission").
 	qb.Select("*").From("chart_permission").
-		Where("chart_permission_id").In(permissionIds...)
+		Where("parent_id > 0 and chart_permission_id").In(permissionIds...)
 	// 导出 SQL 语句
 	// 导出 SQL 语句
 	sql := qb.String()
 	sql := qb.String()
 
 
@@ -117,7 +135,7 @@ func GetChartPermissionByIdList(chartPermissionIdList []int) (list []*ChartPermi
 	}
 	}
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `select * from chart_permission where chart_permission_id in (` + utils.GetOrmInReplace(num) + `)`
+	sql := `select * from chart_permission where parent_id > 0 and chart_permission_id in (` + utils.GetOrmInReplace(num) + `)`
 	_, err = o.Raw(sql, chartPermissionIdList).QueryRows(&list)
 	_, err = o.Raw(sql, chartPermissionIdList).QueryRows(&list)
 
 
 	return
 	return
@@ -128,7 +146,7 @@ func GetChartPermissionByNames(permissionNames []string) (list []*ChartPermissio
 	qb, _ := orm.NewQueryBuilder("mysql")
 	qb, _ := orm.NewQueryBuilder("mysql")
 	// 构建查询对象
 	// 构建查询对象
 	qb.Select("*").From("chart_permission").
 	qb.Select("*").From("chart_permission").
-		Where("chart_permission_name").In(permissionNames...)
+		Where("parent_id > 0 and chart_permission_name").In(permissionNames...)
 	// 导出 SQL 语句
 	// 导出 SQL 语句
 	sql := qb.String()
 	sql := qb.String()
 
 
@@ -141,14 +159,14 @@ func GetChartPermissionByNames(permissionNames []string) (list []*ChartPermissio
 // GetChartPermissionList 获取品种权限列表
 // GetChartPermissionList 获取品种权限列表
 func GetChartPermissionList() (list []*ChartPermission, err error) {
 func GetChartPermissionList() (list []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission ORDER BY product_id ASC, sort ASC`
+	sql := `SELECT * FROM chart_permission WHERE parent_id > 0 ORDER BY product_id ASC, sort ASC`
 	_, err = o.Raw(sql).QueryRows(&list)
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 	return
 }
 }
 
 
 func GetChartPermissionListRai() (items []*ChartPermission, err error) {
 func GetChartPermissionListRai() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE product_id=2  ORDER BY sort ASC `
+	sql := `SELECT * FROM chart_permission WHERE product_id=2 and parent_id > 0  ORDER BY sort ASC `
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }
@@ -156,7 +174,7 @@ func GetChartPermissionListRai() (items []*ChartPermission, err error) {
 // 获取权益主观权限
 // 获取权益主观权限
 func GetChartPermissionListRaiSubjectivity() (items []*ChartPermission, err error) {
 func GetChartPermissionListRaiSubjectivity() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE product_id=2  AND permission_type = 1  ORDER BY sort ASC `
+	sql := `SELECT * FROM chart_permission WHERE product_id=2  AND permission_type = 1 and parent_id > 0  ORDER BY sort ASC `
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }

+ 3 - 3
models/classify.go

@@ -2,7 +2,6 @@ package models
 
 
 import (
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/client/orm"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/utils"
 	"hongze/hz_crm_api/utils"
 	"time"
 	"time"
 )
 )
@@ -39,6 +38,7 @@ type Classify struct {
 	RelateTel         int       `description:"是否在电话会中可选: 0-否; 1-是"`
 	RelateTel         int       `description:"是否在电话会中可选: 0-否; 1-是"`
 	RelateVideo       int       `description:"是否在路演视频中可选: 0-否; 1-是"`
 	RelateVideo       int       `description:"是否在路演视频中可选: 0-否; 1-是"`
 	IsMassSend        int       `description:"1:群发,0:非群发"`
 	IsMassSend        int       `description:"1:群发,0:非群发"`
+	Enabled           int       `description:"是否可用,1可用,0禁用"`
 }
 }
 
 
 func GetClassifyById(classifyId int) (item *Classify, err error) {
 func GetClassifyById(classifyId int) (item *Classify, err error) {
@@ -71,6 +71,7 @@ type ClassifyList struct {
 	YbRightBanner     string    `description:"Pc端详情页,右侧,报告合集背景图"`
 	YbRightBanner     string    `description:"Pc端详情页,右侧,报告合集背景图"`
 	RelateTel         int       `description:"是否在电话会中可选: 0-否; 1-是"`
 	RelateTel         int       `description:"是否在电话会中可选: 0-否; 1-是"`
 	RelateVideo       int       `description:"是否在路演视频中可选: 0-否; 1-是"`
 	RelateVideo       int       `description:"是否在路演视频中可选: 0-否; 1-是"`
+	Enabled           int       `description:"是否可用,1可用,0禁用"`
 	Child             []*ClassifyItem
 	Child             []*ClassifyItem
 	ClassifyMenuList  []*ClassifyMenu
 	ClassifyMenuList  []*ClassifyMenu
 }
 }
@@ -82,8 +83,7 @@ type ClassifyItem struct {
 }
 }
 
 
 type ClassifyListResp struct {
 type ClassifyListResp struct {
-	List   []*ClassifyList
-	Paging *paging.PagingItem `description:"分页数据"`
+	List []*ClassifyList
 }
 }
 
 
 // 获取分类列表
 // 获取分类列表

+ 2 - 2
models/company/company.go

@@ -1311,9 +1311,9 @@ func CompanyFreeze(companyId, productId int, freezeReason string) (err error) {
 	freezeStartDate := time.Now().Format(utils.FormatDate)
 	freezeStartDate := time.Now().Format(utils.FormatDate)
 	freezeEndDate := time.Now().AddDate(0, 3, 0).Format(utils.FormatDate)
 	freezeEndDate := time.Now().AddDate(0, 3, 0).Format(utils.FormatDate)
 
 
-	// ficc是个月的冻结期
+	// ficc是个月的冻结期
 	if productId == 1 {
 	if productId == 1 {
-		freezeEndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+		freezeEndDate = time.Now().AddDate(0, 6, 0).Format(utils.FormatDate)
 	}
 	}
 
 
 	// 权益也调整为 两个月的冻结期
 	// 权益也调整为 两个月的冻结期

+ 60 - 15
models/company/company_permission.go

@@ -21,14 +21,19 @@ type ChartPermission struct {
 	ClassifyName        string    `description:"分类"`
 	ClassifyName        string    `description:"分类"`
 	PermissionType      int       `description:"1主观,2客观"`
 	PermissionType      int       `description:"1主观,2客观"`
 	Checked             bool      `description:"选中状态"`
 	Checked             bool      `description:"选中状态"`
+	ParentId            int       `description:"父级权限id"`
+	IsPublic            int       `description:"是否是公有权限1:公有权限,0私有权限"`
 }
 }
 
 
 type PermissionSetItem struct {
 type PermissionSetItem struct {
-	ChartPermissionId int                  `description:"权限id"`
-	PermissionName    string               `description:"权限名称"`
-	PermissionType    int                  `description:"1主观,2客观"`
-	Checked           bool                 `description:"选中状态"`
-	Child             []*PermissionSetItem `description:"具体的主客观-方便前端的排版用的"`
+	ChartPermissionId int    `description:"权限id"`
+	PermissionName    string `description:"权限名称"`
+	PermissionType    int    `description:"1主观,2客观"`
+	ParentId          int    `description:"父级权限id"`
+	IsPublic          int    `description:"是否是公有权限1:公有权限,0私有权限"`
+	Checked           bool   `description:"选中状态"`
+
+	Child []*PermissionSetItem `description:"具体的主客观-方便前端的排版用的"`
 }
 }
 
 
 type PermissionSetItemType struct {
 type PermissionSetItemType struct {
@@ -58,26 +63,33 @@ type PermissionSetResp struct {
 }
 }
 
 
 type ChartPermissionFirst struct {
 type ChartPermissionFirst struct {
-	ClassifyName string `description:"分类"`
+	ChartPermissionId int    `description:"权限id"`
+	ClassifyName      string `description:"分类"`
 }
 }
 
 
 func GetPermissionSetItems(productId int, classifyName string) (items []*PermissionSetItem, err error) {
 func GetPermissionSetItems(productId int, classifyName string) (items []*PermissionSetItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=?  AND permission_type=0 ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? AND parent_id>0 AND permission_type=0 ORDER BY sort ASC `
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
 
 
+func GetPermissionByProductId(productId int) (items []*PermissionSetItem, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND permission_type=0 ORDER BY sort ASC `
+	_, err = o.Raw(sql, productId).QueryRows(&items)
+	return
+}
 func GetPermissionSetItemsByType(productId int, classifyName string) (items []*PermissionSetItem, err error) {
 func GetPermissionSetItemsByType(productId int, classifyName string) (items []*PermissionSetItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=?  AND permission_type!=2 ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? AND parent_id>0 AND permission_type!=2 ORDER BY sort ASC `
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
 
 
 func GetPermissionSetSandoItems(productId int, classifyName string) (items []*PermissionLookItem, err error) {
 func GetPermissionSetSandoItems(productId int, classifyName string) (items []*PermissionLookItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=?  ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? AND parent_id>0 ORDER BY sort ASC `
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
@@ -164,16 +176,33 @@ type PermissionLookItem struct {
 	IsUpgrade          int                   `description:"是否升级,1是,0否"`
 	IsUpgrade          int                   `description:"是否升级,1是,0否"`
 	ExpensiveYx        int                   `description:"权益研选: 0-3w; 1-5w ,2: 10W"`
 	ExpensiveYx        int                   `description:"权益研选: 0-3w; 1-5w ,2: 10W"`
 	Points             float64               `description:"研选扣点包点数"`
 	Points             float64               `description:"研选扣点包点数"`
+	ParentId           int                   `description:"父级权限id"`
+	IsPublic           int                   `description:"是否是公有权限1:公有权限,0私有权限"`
 	Child              []*PermissionLookItem `description:"子权限"`
 	Child              []*PermissionLookItem `description:"子权限"`
 }
 }
 
 
+// todo 确认是否需要删除
 func GetPermissionLookItems(productId int, classifyName string) (items []*PermissionLookItem, err error) {
 func GetPermissionLookItems(productId int, classifyName string) (items []*PermissionLookItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? AND parent_id > 0 ORDER BY sort ASC `
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
 
 
+func GetPermissionLookItemsByProductId(productId int) (items []*PermissionLookItem, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? ORDER BY sort ASC `
+	_, err = o.Raw(sql, productId).QueryRows(&items)
+	return
+}
+
+func GetPermissionLookItemsByParentId(productId int, parentId int) (items []*PermissionLookItem, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND parent_id=? ORDER BY sort ASC `
+	_, err = o.Raw(sql, productId, parentId).QueryRows(&items)
+	return
+}
+
 func GetCompanyPermissionCheck(companyId, permissionId int) (count int, err error) {
 func GetCompanyPermissionCheck(companyId, permissionId int) (count int, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `SELECT COUNT(1) AS count FROM company_report_permission AS a WHERE a.company_id=? AND a.chart_permission_id=? `
 	sql := `SELECT COUNT(1) AS count FROM company_report_permission AS a WHERE a.company_id=? AND a.chart_permission_id=? `
@@ -203,6 +232,7 @@ func GetPermissionIdById(permissionIds string) (allpermissionId string, err erro
 			FROM
 			FROM
 				chart_permission 
 				chart_permission 
 			WHERE
 			WHERE
+			    parent_id > 0 and 
 				product_permission_name IN (
 				product_permission_name IN (
 				SELECT
 				SELECT
 					product_permission_name 
 					product_permission_name 
@@ -251,6 +281,7 @@ type PermissionVarietyResp struct {
 
 
 type PermissionVarietyItem struct {
 type PermissionVarietyItem struct {
 	ChartPermissionId int    `description:"权限id"`
 	ChartPermissionId int    `description:"权限id"`
+	ParentId          int    `description:"父级权限id"`
 	ClassifyName      string `orm:"column(permission_name)" description:"权限名称"`
 	ClassifyName      string `orm:"column(permission_name)" description:"权限名称"`
 }
 }
 
 
@@ -260,13 +291,21 @@ type PermissionVarietyList struct {
 	Items             []*PermissionVarietyItem
 	Items             []*PermissionVarietyItem
 }
 }
 
 
+// todo 删除品种列表
 func GetPermissionVarietyItems(productId int, classifyName string) (items []*PermissionVarietyItem, err error) {
 func GetPermissionVarietyItems(productId int, classifyName string) (items []*PermissionVarietyItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=? GROUP BY permission_name ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? AND classify_name=?  AND parent_id > 0 GROUP BY permission_name ORDER BY sort ASC `
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
 
 
+func GetPermissionVarietyItemsByProductId(productId int) (items []*PermissionVarietyItem, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id=? and parent_id > 0 GROUP BY permission_name ORDER BY sort ASC `
+	_, err = o.Raw(sql, productId).QueryRows(&items)
+	return
+}
+
 func GetCompanyReportPermission(companyId, productId int) (items []*CompanyReportPermission, err error) {
 func GetCompanyReportPermission(companyId, productId int) (items []*CompanyReportPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
 	sql := `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
@@ -349,10 +388,16 @@ func FixPermissionStatus(companyId, productId int, startDate, endDate, status st
 
 
 func GetPermissionLookItemsExt(productId string, classifyName string) (items []*PermissionLookItem, err error) {
 func GetPermissionLookItemsExt(productId string, classifyName string) (items []*PermissionLookItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id IN(` + productId + `) AND classify_name=? ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id IN(` + productId + `) AND classify_name=? AND parent_id > 0 ORDER BY sort ASC `
 	_, err = o.Raw(sql, classifyName).QueryRows(&items)
 	_, err = o.Raw(sql, classifyName).QueryRows(&items)
 	return
 	return
 }
 }
+func GetPermissionLookItemsExtByParentId(productId string, parentId int) (items []*PermissionLookItem, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1 AND product_id IN(` + productId + `) AND parent_id=? ORDER BY sort ASC `
+	_, err = o.Raw(sql, parentId).QueryRows(&items)
+	return
+}
 
 
 // 客户授权产品结构体(包含产品名称)
 // 客户授权产品结构体(包含产品名称)
 type CompanyReportPermissionAndName struct {
 type CompanyReportPermissionAndName struct {
@@ -429,7 +474,7 @@ func GetPermissionLookItemsSandO(permissionIds string) (items []*PermissionLookI
 
 
 func GetPermissionLookItemsSandOByName(permissionName string) (items []*PermissionLookItem, err error) {
 func GetPermissionLookItemsSandOByName(permissionName string) (items []*PermissionLookItem, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_permission WHERE enabled=1  AND product_id = 2 AND remark IN (` + permissionName + `) ORDER BY sort ASC `
+	sql := ` SELECT * FROM chart_permission WHERE enabled=1  AND product_id = 2 AND remark IN (` + permissionName + `) AND parent_id > 0 ORDER BY sort ASC `
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }
@@ -458,7 +503,7 @@ func GetGroupNamesById(gid int) (items *string, err error) {
 // GetChartPermissionFirst 获取排序后的权限分类
 // GetChartPermissionFirst 获取排序后的权限分类
 func GetChartPermissionFirst() (list []*ChartPermissionFirst, err error) {
 func GetChartPermissionFirst() (list []*ChartPermissionFirst, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := ` SELECT classify_name FROM chart_permission_first ORDER BY yb_index_sort ASC `
+	sql := ` SELECT chart_permission_id, classify_name FROM chart_permission where enabled =1 and product_id=1 and parent_id=0 ORDER BY sort ASC `
 	_, err = o.Raw(sql).QueryRows(&list)
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 	return
 }
 }
@@ -543,7 +588,7 @@ func GetPermissionIdsByPermissionNames(names []string) (ids []int, err error) {
 			FROM
 			FROM
 				chart_permission
 				chart_permission
 			WHERE
 			WHERE
-				chart_permission_name IN (` + utils.GetOrmInReplace(len(names)) + `)`
+				chart_permission_name IN (` + utils.GetOrmInReplace(len(names)) + `) AND parent_id > 0 `
 	_, err = o.Raw(sql, names).QueryRows(&ids)
 	_, err = o.Raw(sql, names).QueryRows(&ids)
 	return
 	return
 }
 }

+ 12 - 0
models/company/company_product.go

@@ -653,3 +653,15 @@ func GetCompanyProductItemByCompanyId(companyId int, productId int) (items *Comp
 
 
 	return
 	return
 }
 }
+
+// GetCompanyProductListByCompanyIds 根据客户id集合以及类型获取所有客户产品列表
+func GetCompanyProductListByCompanyIds(companyIds []int, productId int) (items []*CompanyProduct, err error) {
+	lenArr := len(companyIds)
+	if lenArr == 0 {
+		return
+	}
+	sql := `SELECT * FROM company_product WHERE  1= 1 AND company_id IN  (` + utils.GetOrmInReplace(lenArr) + `)` + ` AND    product_id  = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, companyIds, productId).QueryRows(&items)
+	return
+}

+ 11 - 2
models/contract/contract_service_detail.go

@@ -21,7 +21,16 @@ type ContractServiceDetail struct {
 	CreateTime        time.Time `description:"数据添加时间"`
 	CreateTime        time.Time `description:"数据添加时间"`
 }
 }
 
 
-//根据服务模板id获取对应的套餐表格数据详情
+type ServiceTemplateDetailCol2 struct {
+	CanEdit  bool   `json:"CanEdit"`
+	Type     string `json:"Type"`
+	ValueId  []int  `json:"ValueId"`
+	Value    string `json:"Value"`
+	HeadName string `json:"HeadName"`
+	RowName  string `json:"RowName"`
+}
+
+// 根据服务模板id获取对应的套餐表格数据详情
 func GetContractServiceDetailByTemplateId(serviceTemplateId int) (list []*ContractServiceDetail, err error) {
 func GetContractServiceDetailByTemplateId(serviceTemplateId int) (list []*ContractServiceDetail, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `select * from contract_service_detail where service_template_id = ? and contract_service_id = 0 order by id asc`
 	sql := `select * from contract_service_detail where service_template_id = ? and contract_service_id = 0 order by id asc`
@@ -45,7 +54,7 @@ func GetContractServiceDetailListByServiceIds(contractServiceIds string) (list [
 	return
 	return
 }
 }
 
 
-//根据服务模板id获取对应的套餐表格数据详情
+// 根据服务模板id获取对应的套餐表格数据详情
 func GetContractServiceDetailList() (list []*ContractServiceDetail, err error) {
 func GetContractServiceDetailList() (list []*ContractServiceDetail, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := `select * from contract_service_detail order by id asc`
 	sql := `select * from contract_service_detail order by id asc`

+ 1 - 0
models/cygx/article_department.go

@@ -82,6 +82,7 @@ func GetCygxArticleDepartmentList(condition string) (items []*CygxArticleDepartm
 type CygxDepartmentFllowList struct {
 type CygxDepartmentFllowList struct {
 	RealName    string `description:"姓名"`
 	RealName    string `description:"姓名"`
 	CompanyName string `description:"公司名称"`
 	CompanyName string `description:"公司名称"`
+	CompanyId   int    `description:"公司Id"`
 	SellerName  string `description:"公司名称"`
 	SellerName  string `description:"公司名称"`
 	CreateTime  string `description:"创建时间"`
 	CreateTime  string `description:"创建时间"`
 }
 }

+ 10 - 10
models/cygx/chart_permission.go

@@ -32,7 +32,7 @@ func GetChartPermissionAll() (items []*ChartPermission, err error) {
 // 获取带有ICo的产业
 // 获取带有ICo的产业
 func GetChartPermissionIco(condition string) (items []*ChartPermission, err error) {
 func GetChartPermissionIco(condition string) (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission  WHERE 1=1 `
+	sql := `SELECT * FROM chart_permission  WHERE parent_id>0 `
 	if condition != "" {
 	if condition != "" {
 		sql += condition
 		sql += condition
 	}
 	}
@@ -44,7 +44,7 @@ func GetChartPermissionIco(condition string) (items []*ChartPermission, err erro
 // 获取带有ICo的产业
 // 获取带有ICo的产业
 func GetChartPermissionIcoNew(condition string) (items []*CygxRSlChartPermissionIcoTmp, err error) {
 func GetChartPermissionIcoNew(condition string) (items []*CygxRSlChartPermissionIcoTmp, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE 1=1 `
+	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE parent_id>0 `
 	if condition != "" {
 	if condition != "" {
 		sql += condition
 		sql += condition
 	}
 	}
@@ -56,7 +56,7 @@ func GetChartPermissionIcoNew(condition string) (items []*CygxRSlChartPermission
 // 获取带有ICo的产业
 // 获取带有ICo的产业
 func GetChartPermissionIcoDetail(condition string) (items []*CygxRSlChartPermissionIco, err error) {
 func GetChartPermissionIcoDetail(condition string) (items []*CygxRSlChartPermissionIco, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE 1=1 `
+	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE parent_id>0 `
 	if condition != "" {
 	if condition != "" {
 		sql += condition
 		sql += condition
 	}
 	}
@@ -68,7 +68,7 @@ func GetChartPermissionIcoDetail(condition string) (items []*CygxRSlChartPermiss
 // 获取带有ICo的产业
 // 获取带有ICo的产业
 func GetChartPermissionDetail(condition string) (items []*CygxReportSelectionChart, err error) {
 func GetChartPermissionDetail(condition string) (items []*CygxReportSelectionChart, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE 1=1 `
+	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE parent_id>0 `
 	if condition != "" {
 	if condition != "" {
 		sql += condition
 		sql += condition
 	}
 	}
@@ -80,21 +80,21 @@ func GetChartPermissionDetail(condition string) (items []*CygxReportSelectionCha
 // 没有策略的顶级分类
 // 没有策略的顶级分类
 func GetChartPermissionAllNoTactics() (items []*ChartPermission, err error) {
 func GetChartPermissionAllNoTactics() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE product_id=2 AND show_type=1 AND is_report=1 AND chart_permission_id != 23 AND is_other = 0 AND permission_type != 2   ORDER BY sort ASC   `
+	sql := `SELECT * FROM chart_permission WHERE product_id=2 AND show_type=1 AND is_report=1 AND chart_permission_id != 23 AND is_other = 0 AND permission_type != 2 AND parent_id>0  ORDER BY sort ASC   `
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }
 
 
 func GetChartPermissionOtherAll() (items []*ChartPermission, err error) {
 func GetChartPermissionOtherAll() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE product_id=2 AND show_type=1 AND is_report=1  AND permission_type != 2   OR is_other = 1  ORDER BY sort ASC`
+	sql := `SELECT * FROM chart_permission WHERE product_id=2 AND show_type=1 AND is_report=1  AND permission_type != 2   OR is_other = 1 AND parent_id>0  ORDER BY sort ASC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }
 
 
 // 获取产业数量
 // 获取产业数量
 func GetChartPermissionCount(condition string, pars []interface{}) (count int, err error) {
 func GetChartPermissionCount(condition string, pars []interface{}) (count int, err error) {
-	sqlCount := ` SELECT COUNT(1) AS count  FROM chart_permission WHERE 1=1 `
+	sqlCount := ` SELECT COUNT(1) AS count  FROM chart_permission WHERE parent_id>0 `
 	if condition != "" {
 	if condition != "" {
 		sqlCount += condition
 		sqlCount += condition
 	}
 	}
@@ -117,7 +117,7 @@ func GetCategoryInfoByName(name string) (item *ChartPermission, err error) {
 		name = "宏观经济"
 		name = "宏观经济"
 	}
 	}
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	sql := `SELECT * FROM chart_permission WHERE permission_name=?`
+	sql := `SELECT * FROM chart_permission WHERE permission_name=? AND parent_id>0`
 	err = o.Raw(sql, name).QueryRow(&item)
 	err = o.Raw(sql, name).QueryRow(&item)
 	return
 	return
 }
 }
@@ -132,14 +132,14 @@ type ReportMapping struct {
 
 
 func GetReportMapping() (item []*ReportMapping, err error) {
 func GetReportMapping() (item []*ReportMapping, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
 	o := orm.NewOrmUsingDB("hz_cygx")
-	sql := ` SELECT *  FROM	cygx_report_mapping WHERE	match_type_name != ''  `
+	sql := ` SELECT *  FROM	cygx_report_mapping WHERE	match_type_name != '' `
 	_, err = o.Raw(sql).QueryRows(&item)
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 	return
 }
 }
 
 
 func GetReportMappingDetail(condition string, pars []interface{}) (item *ReportMapping, err error) {
 func GetReportMappingDetail(condition string, pars []interface{}) (item *ReportMapping, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
 	o := orm.NewOrmUsingDB("hz_cygx")
-	sql := ` SELECT *  FROM	cygx_report_mapping WHERE	 1= 1  ` + condition + ` LIMIT 1 `
+	sql := ` SELECT *  FROM	cygx_report_mapping WHERE 1=1 ` + condition + ` LIMIT 1 `
 	err = o.Raw(sql, pars).QueryRow(&item)
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
 	return
 }
 }

+ 12 - 0
models/cygx/cygx_yanxuan_special_user.go

@@ -15,6 +15,7 @@ type CygxYanxuanSpecialAuthor struct {
 	NickName     string    // 昵称
 	NickName     string    // 昵称
 	RealName     string    // 姓名
 	RealName     string    // 姓名
 	Mobile       string    // 手机号
 	Mobile       string    // 手机号
+	MobileInit   string    // 初始化手机号(没有脱敏的)
 	CreateTime   time.Time // 创建时间
 	CreateTime   time.Time // 创建时间
 	ModifyTime   time.Time // 修改时间
 	ModifyTime   time.Time // 修改时间
 	HeadImg      string    // 头像
 	HeadImg      string    // 头像
@@ -30,12 +31,14 @@ type CygxYanxuanSpecialAuthorItem struct {
 	Id                 int    `orm:"column(id);pk"`
 	Id                 int    `orm:"column(id);pk"`
 	UserId             int    // 用户ID
 	UserId             int    // 用户ID
 	CompanyName        string // 公司名
 	CompanyName        string // 公司名
+	CompanyId          int    // 公Id
 	SpecialName        string // 专栏名称
 	SpecialName        string // 专栏名称
 	Introduction       string // 介绍
 	Introduction       string // 介绍
 	Label              string // 标签
 	Label              string // 标签
 	NickName           string // 昵称
 	NickName           string // 昵称
 	RealName           string // 姓名
 	RealName           string // 姓名
 	Mobile             string // 手机号
 	Mobile             string // 手机号
+	MobileInit         string // 初始化手机号(没有脱敏的)
 	CreateTime         string // 创建时间
 	CreateTime         string // 创建时间
 	ModifyTime         string // 修改时间
 	ModifyTime         string // 修改时间
 	HeadImg            string // 头像
 	HeadImg            string // 头像
@@ -135,3 +138,12 @@ type CygxYanxuanSpecialCenterAuthorResp struct {
 	PublishTime string // 提审过审或驳回时间
 	PublishTime string // 提审过审或驳回时间
 	Title       string // 标题
 	Title       string // 标题
 }
 }
+
+// 启用禁用作者
+func UpdateSpecialAuthormobile_init(mobile_init string, userId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ``
+	sql = `UPDATE cygx_yanxuan_special_author SET mobile_init = ?  WHERE user_id = ? `
+	_, err = o.Raw(sql, mobile_init, userId).Exec()
+	return
+}

+ 2 - 2
models/eta_trial/eta_trial.go

@@ -112,10 +112,10 @@ func AddETATrial(item *EtaTrial) (lastId int64, err error) {
 }
 }
 
 
 func GetETATrialByAccount(account string) (items []*EtaTrial, err error) {
 func GetETATrialByAccount(account string) (items []*EtaTrial, err error) {
-	sql := `SELECT * FROM eta_trial WHERE account = ? `
+	sql := `SELECT * FROM eta_trial WHERE account LIKE '%` + account + `%' `
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
-	_, err = o.Raw(sql, account).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }
 
 

+ 7 - 1
models/help_doc/help_doc.go

@@ -52,6 +52,7 @@ type AddHelpDocReq struct {
 	Author        string `description:"作者"`
 	Author        string `description:"作者"`
 	Status        int    `description:"状态:1:未发布,2:已发布"`
 	Status        int    `description:"状态:1:未发布,2:已发布"`
 	Content       string `description:"内容"`
 	Content       string `description:"内容"`
+	IsChange      bool   `description:"内容是否改变"`
 	AnchorData    []AnchorList
 	AnchorData    []AnchorList
 	RecommendData []RecommendList
 	RecommendData []RecommendList
 }
 }
@@ -189,4 +190,9 @@ func GetAllHelpDoc() (items []*HelpDocItem, err error) {
 	sql := `SELECT * FROM help_doc `
 	sql := `SELECT * FROM help_doc `
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
-}
+}
+
+type HelpDocSaveResp struct {
+	HelpDocId  int64  `description:"智能研报ID"`
+	ModifyTime string `description:"修改时间"`
+}

+ 11 - 16
models/report_chapter_type.go

@@ -2,7 +2,6 @@ package models
 
 
 import (
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/client/orm"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/utils"
 	"hongze/hz_crm_api/utils"
 	"time"
 	"time"
 )
 )
@@ -299,9 +298,8 @@ type UpdateReportChapterTypeResp struct {
 	Week []*ReportChapterType `description:"所有周报品种"`
 	Week []*ReportChapterType `description:"所有周报品种"`
 }
 }
 
 
-type ReportChapterTypePageListResp struct {
-	List   []*ReportChapterTypeListItem
-	Paging *paging.PagingItem `description:"分页数据"`
+type ReportChapterTypeListResp struct {
+	List []*ReportChapterTypeListItem
 }
 }
 
 
 // GetReportChapterTypeCount 获取章节类型总数
 // GetReportChapterTypeCount 获取章节类型总数
@@ -314,13 +312,12 @@ func GetReportChapterTypeCount(condition string, pars []interface{}) (count int,
 }
 }
 
 
 // GetReportChapterTypeList 获取章节类型列表
 // GetReportChapterTypeList 获取章节类型列表
-func GetReportChapterTypePageList(condition string, pars []interface{}, startSize, pageSize int) (list []*ReportChapterType, err error) {
+func GetReportChapterTypePageList(condition string, pars []interface{}) (list []*ReportChapterType, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	sql := ` SELECT * FROM report_chapter_type WHERE 1 = 1 `
 	sql := ` SELECT * FROM report_chapter_type WHERE 1 = 1 `
 	sql += condition
 	sql += condition
 	sql += ` ORDER BY sort ASC, created_time DESC`
 	sql += ` ORDER BY sort ASC, created_time DESC`
-	sql += ` LIMIT ?,?`
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 	return
 }
 }
 
 
@@ -336,6 +333,7 @@ type ReportChapterTypeListItem struct {
 	WordsImage            string `description:"带字的icon"`
 	WordsImage            string `description:"带字的icon"`
 	EditImgUrl            string `description:"管理后台编辑时选用的图"`
 	EditImgUrl            string `description:"管理后台编辑时选用的图"`
 	IsShow                int    `description:"显示隐藏: 1-显示; 0-隐藏"`
 	IsShow                int    `description:"显示隐藏: 1-显示; 0-隐藏"`
+	Enabled               int    `description:"是否可用,1可用,0禁用"`
 }
 }
 
 
 // ReportChapterTypeAddReq 新增章节类型请求体
 // ReportChapterTypeAddReq 新增章节类型请求体
@@ -352,15 +350,12 @@ type ReportChapterTypeAddReq struct {
 
 
 // ReportChapterTypeEditReq 编辑章节类型请求体
 // ReportChapterTypeEditReq 编辑章节类型请求体
 type ReportChapterTypeEditReq struct {
 type ReportChapterTypeEditReq struct {
-	ReportChapterTypeId   int    `description:"报告章节类型id"`
-	ReportChapterTypeName string `description:"报告章节类型名称"`
-	Sort                  int    `description:"排序字段"`
-	ResearchType          string `description:"研报类型"`
-	SelectedImage         string `description:"选中时的icon"`
-	UnselectedImage       string `description:"未选中时的icon"`
-	WordsImage            string `description:"带字的icon"`
-	EditImgUrl            string `description:"管理后台编辑时选用的图"`
-	IsShow                int    `description:"显示隐藏: 1-显示; 0-隐藏"`
+	ReportChapterTypeId int    `description:"报告章节类型id"`
+	SelectedImage       string `description:"选中时的icon"`
+	UnselectedImage     string `description:"未选中时的icon"`
+	WordsImage          string `description:"带字的icon"`
+	EditImgUrl          string `description:"管理后台编辑时选用的图"`
+	IsShow              int    `description:"显示隐藏: 1-显示; 0-隐藏"`
 }
 }
 
 
 // ReportChapterTypeDelReq 删除章节类型请求体
 // ReportChapterTypeDelReq 删除章节类型请求体

+ 178 - 0
models/roadshow/calendar.go

@@ -1,10 +1,13 @@
 package roadshow
 package roadshow
 
 
 import (
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/models/system"
+	"hongze/hz_crm_api/utils"
+	"strings"
 	"time"
 	"time"
 )
 )
 
 
@@ -726,3 +729,178 @@ func GetPublicCalendarDetailList(condition string, pars []interface{}) (list []*
 	_, err = o.Raw(sql, pars).QueryRows(&list)
 	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 	return
 }
 }
+
+type AdminInfo struct {
+	AdminId  int
+	RealName string
+}
+
+func GetOverseaCustomCalendarSellerList() (list []*AdminInfo, err error) {
+	o := orm.NewOrm()
+	sql1 := `SELECT a.sys_user_id FROM  rs_calendar AS a
+    INNER JOIN rs_report_record  AS b ON a.rs_calendar_id=b.rs_calendar_id
+         JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+         JOIN company AS d ON c.company_id=d.company_id 
+				INNER JOIN overseas_custom_seller AS f ON c.seller_id=f.seller_id
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.rs_calendar_researcher_status=2 AND a.sys_user_id != 0 `
+
+	sql2 := `SELECT aa.sys_user_id FROM  rs_calendar AS aa
+    INNER JOIN rs_report_record  AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.rs_calendar_researcher_status=2 AND aa.sys_user_id != 0`
+
+	sql := `SELECT n.admin_id,n.real_name FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += `		) AS m 
+ JOIN admin n on m.sys_user_id=n.admin_id
+WHERE 1=1 Group by sys_user_id order by sys_user_id asc`
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+func GetOverseaCustomCalendarResearcherList() (list []*AdminInfo, err error) {
+	o := orm.NewOrm()
+	sql1 := `SELECT b.researcher_id FROM  rs_calendar AS a
+    INNER JOIN rs_report_record  AS b ON a.rs_calendar_id=b.rs_calendar_id
+         JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+         JOIN company AS d ON c.company_id=d.company_id 
+				INNER JOIN overseas_custom_seller AS f ON c.seller_id=f.seller_id
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.rs_calendar_researcher_status=2 AND b.researcher_id != 0`
+
+	sql2 := `SELECT bb.researcher_id FROM  rs_calendar AS aa
+    INNER JOIN rs_report_record  AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.rs_calendar_researcher_status=2 AND bb.researcher_id != 0 `
+
+	sql := `SELECT n.admin_id,n.real_name FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += `		) AS m 
+JOIN admin n on m.researcher_id=n.admin_id
+WHERE 1=1 Group by researcher_id order by researcher_id asc`
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+type OverseaCustomRecordInfoResp struct {
+	Paging *paging.PagingItem
+	List   []*OverseaCustomRecordInfo
+}
+
+type OverseaCustomRecordInfo struct {
+	RsCalendarId     int
+	CompanyId        int
+	Source           int
+	RoadshowType     string
+	RoadshowPlatform string
+	SellerName       string
+	ResearcherName   string
+	CompanyName      string
+	CompanyStatus    string
+	StartDate        string
+}
+
+func GetOverseaCustomCalendarList(keyword, sellerId, researcherId, startDate, endDate, companyStatus, sortField, sortDesc string, startSize, pageSize int) (total int, list []*OverseaCustomRecordInfo, err error) {
+	var databaseName string
+	if utils.RunMode == "debug" {
+		databaseName = "test_v2_hongze_rddp"
+	} else {
+		databaseName = "hongze_rddp"
+	}
+	companyStatusList := make([]string, 0)
+	if companyStatus != "" {
+		companyStatusList = strings.Split(companyStatus, ",")
+	}
+	lenCompanyStatusList := len(companyStatusList)
+
+	o := orm.NewOrm()
+
+	pars := make([]interface{}, 0)
+
+	sql1 := `SELECT d.company_name,d.overseas_status company_status,b.start_date,a.rs_calendar_id,a.roadshow_type,a.roadshow_platform,a.sys_user_real_name seller_name,b.researcher_name as base_researcher_name,2 AS source,d.company_id FROM  rs_calendar AS a
+    INNER JOIN rs_report_record  AS b ON a.rs_calendar_id=b.rs_calendar_id
+         JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+         JOIN company AS d ON c.company_id=d.company_id 
+				INNER JOIN overseas_custom_seller AS f ON c.seller_id=f.seller_id
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.rs_calendar_researcher_status=2 AND b.researcher_id != 0`
+
+	if keyword != "" {
+		sql1 += ` AND d.company_name like ? `
+		pars = utils.GetLikeKeywordPars(pars, keyword, 1)
+	}
+	if sellerId != "" {
+		sql1 += fmt.Sprintf(` AND a.sys_user_id in (%s) `, sellerId)
+	}
+	if startDate != "" {
+		sql1 += ` AND b.start_date >= ? `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql1 += ` AND b.start_date <= ? `
+		pars = append(pars, endDate)
+	}
+	if lenCompanyStatusList > 0 {
+		sql1 += ` AND d.overseas_status in (` + utils.GetOrmInReplace(lenCompanyStatusList) + ") "
+		pars = append(pars, companyStatusList)
+	}
+
+	sql2 := fmt.Sprintf(`SELECT cc.company_name,cc.overseas_status company_status,bb.start_date,aa.rs_calendar_id,aa.roadshow_type,aa.roadshow_platform,aa.sys_user_real_name seller_name,bb.researcher_name as base_researcher_name,1 AS source,cc.company_id+10000000 FROM rs_calendar AS aa
+    INNER JOIN rs_report_record  AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+    INNER JOIN %s.english_company AS cc ON aa.company_id=cc.company_id
+		where aa.english_company= 1 AND aa.source = 0 AND cc.is_deleted=0  AND bb.rs_calendar_researcher_status=2 AND bb.researcher_id != 0 `, databaseName)
+
+	if keyword != "" {
+		sql2 += ` AND cc.company_name like ? `
+		pars = utils.GetLikeKeywordPars(pars, keyword, 1)
+	}
+	if sellerId != "" {
+		sql2 += fmt.Sprintf(` AND aa.sys_user_id in (%s) `, sellerId)
+	}
+	if startDate != "" {
+		sql2 += ` AND bb.start_date >= ?  `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql2 += ` AND bb.start_date <= ?  `
+		pars = append(pars, endDate)
+	}
+	if lenCompanyStatusList > 0 {
+		sql2 += ` AND cc.overseas_status in (` + utils.GetOrmInReplace(lenCompanyStatusList) + ") "
+		pars = append(pars, companyStatusList)
+	}
+	rsCalendarIdList := make([]int, 0)
+	if researcherId != `` {
+		rsCalendarIdSql := fmt.Sprintf("select rs_calendar_id from rs_calendar_researcher where researcher_id in (%s) group by rs_calendar_id", researcherId)
+		_, err = o.Raw(rsCalendarIdSql).QueryRows(&rsCalendarIdList)
+		if err != nil {
+			return
+		}
+	}
+	rsCalendarIdNum := len(rsCalendarIdList)
+
+	// 汇总数据
+	totalSql := `SELECT COUNT(1) FROM (SELECT rs_calendar_id FROM (` + sql1 + ` UNION ALL ` + sql2
+	totalSql += ` ) AS m  WHERE 1=1 `
+
+	if rsCalendarIdNum > 0 {
+		totalSql += fmt.Sprintf(` AND rs_calendar_id IN (` + utils.GetOrmInReplace(rsCalendarIdNum) + `)`)
+		pars = append(pars, rsCalendarIdList)
+	}
+
+	totalSql += ` Group by rs_calendar_id) fff`
+	err = o.Raw(totalSql, pars).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	// 列表数据
+	sql := `SELECT m.*,GROUP_CONCAT(DISTINCT base_researcher_name ORDER BY rs_calendar_id ASC SEPARATOR ',') AS researcher_name  FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += ` ) AS m  WHERE 1=1 `
+
+	if rsCalendarIdNum > 0 {
+		sql += fmt.Sprintf(` AND rs_calendar_id IN (` + utils.GetOrmInReplace(rsCalendarIdNum) + `)`)
+	}
+
+	sql += fmt.Sprintf(` Group by rs_calendar_id order by %s %s `, sortField, sortDesc)
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+
+	return
+}

+ 2 - 1
models/system/sys_admin.go

@@ -473,7 +473,8 @@ func GetSysuserRaiList() (items []*AdminItem, err error) {
 			role_type_code LIKE '%rai%' 
 			role_type_code LIKE '%rai%' 
 			AND group_id NOT IN ( 19, 10, 17 ) 
 			AND group_id NOT IN ( 19, 10, 17 ) 
 			AND enabled = 1 
 			AND enabled = 1 
-			OR real_name IN ( '沈涛', '张传星' )`
+			OR real_name IN ( '沈涛', '张传星' )  
+			OR mobile IN ( '15011263967', '18935318900' , '15600639653', '18010097689', '13520990566') ` // 先写死,看情况要不要改
 	_, err = o.Raw(sql).QueryRows(&items)
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 	return
 }
 }

+ 27 - 1
models/wx_user.go

@@ -562,6 +562,32 @@ func GetWxUserRaiSllerListByUserIds(userIds []int) (list []*WxUserSller, err err
 	return
 	return
 }
 }
 
 
+// GetWxUserRaiSllerListByUserMobile 根据用户手机号获取权益相关用户信息
+func GetWxUserRaiSllerListByUserMobile(mobiles []string) (list []*WxUserSller, err error) {
+	lenarr := len(mobiles)
+	if lenarr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := ` SELECT
+				w.user_id,
+				w.real_name,
+				w.mobile,
+				c.company_name,
+				c.company_id,
+				p.seller_name 
+			FROM
+				wx_user AS w
+				INNER JOIN company_product AS p ON p.company_id = w.company_id
+				INNER JOIN company AS c ON c.company_id = w.company_id 
+			WHERE
+				1 = 1 
+				AND p.product_id = 2 
+				AND w.mobile IN (` + utils.GetOrmInReplace(lenarr) + `)  `
+	_, err = o.Raw(sql, mobiles).QueryRows(&list)
+	return
+}
+
 // GetWxUserByCompanyIds 根据客户ID集合获取用户列表
 // GetWxUserByCompanyIds 根据客户ID集合获取用户列表
 func GetWxUserByCompanyIds(companyIds []int) (items []*WxUser, err error) {
 func GetWxUserByCompanyIds(companyIds []int) (items []*WxUser, err error) {
 	num := len(companyIds)
 	num := len(companyIds)
@@ -598,4 +624,4 @@ func GetCompanyFollowCount(companyId int) (count int, err error) {
 	sql := ` SELECT COUNT(1) FROM wx_user WHERE company_id=? AND is_follow = 1 `
 	sql := ` SELECT COUNT(1) FROM wx_user WHERE company_id=? AND is_follow = 1 `
 	err = o.Raw(sql, companyId).QueryRow(&count)
 	err = o.Raw(sql, companyId).QueryRow(&count)
 	return
 	return
-}
+}

+ 45 - 0
routers/commentsRouter.go

@@ -7387,6 +7387,24 @@ func init() {
             Filters: nil,
             Filters: nil,
             Params: nil})
             Params: nil})
 
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "OverseasCustomReportCalendarList",
+            Router: `/overseas_custom/calendar/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "OverseasCustomCalendarAdminList",
+            Router: `/overseas_custom/sys_user/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
         beego.ControllerComments{
         beego.ControllerComments{
             Method: "PublicMeetingDetail",
             Method: "PublicMeetingDetail",
@@ -8782,6 +8800,15 @@ func init() {
             Filters: nil,
             Filters: nil,
             Params: nil})
             Params: nil})
 
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ClassifyController"],
+        beego.ControllerComments{
+            Method: "Edit",
+            Router: `/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ClassifyController"],
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ClassifyController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ClassifyController"],
         beego.ControllerComments{
         beego.ControllerComments{
             Method: "ListClassify",
             Method: "ListClassify",
@@ -10375,6 +10402,24 @@ func init() {
             Filters: nil,
             Filters: nil,
             Params: nil})
             Params: nil})
 
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportChapterTypeController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportChapterTypeController"],
+        beego.ControllerComments{
+            Method: "Edit",
+            Router: `/chapter_type/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportChapterTypeController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportChapterTypeController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/chapter_type/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportController"],
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:ReportController"],
         beego.ControllerComments{
         beego.ControllerComments{
             Method: "GetDayWeekReportChapterTypeList",
             Method: "GetDayWeekReportChapterTypeList",

+ 1 - 0
routers/router.go

@@ -63,6 +63,7 @@ func init() {
 			web.NSInclude(
 			web.NSInclude(
 				&controllers.ReportController{},
 				&controllers.ReportController{},
 				&controllers.ReportUploadCommonController{},
 				&controllers.ReportUploadCommonController{},
+				&controllers.ReportChapterTypeController{},
 			),
 			),
 		),
 		),
 		web.NSNamespace("/statistic_report",
 		web.NSNamespace("/statistic_report",

+ 184 - 0
services/classify.go

@@ -0,0 +1,184 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+)
+
+type GetClassifyListReq struct {
+	Keyword     string
+	CompanyType string
+	HideDayWeek int
+}
+
+type ClassifySetEnabledReq struct {
+	ClassifyId int `description:"分类ID"`
+	Enabled    int `description:"是否可用,1可用,0禁用"`
+}
+
+type EditClassifyReq struct {
+	ClassifyId int `description:"分类ID"`
+	/*Abstract          string                 `description:"栏目简介"`
+	Descript          string                 `description:"分享描述"`
+	ReportAuthor      string                 `description:"栏目作者"`
+	AuthorDescript    string                 `description:"作者简介"`
+	ColumnImgUrl      string                 `description:"栏目配图"`
+	ReportImgUrl      string                 `description:"报告配图"`
+	HeadImgUrl        string                 `description:"头部banner"`
+	AvatarImgUrl      string                 `description:"头像"`
+	HomeImgUrl        string                 `description:"首页配图"`*/
+	ClassifyLabel string `description:"分类标签"`
+	ShowType      int    `description:"展示类型:1-列表 2-专栏"`
+	/*HasTeleconference int                    `description:"是否有电话会:0-否 1-是"`
+	VipTitle          string                 `description:"研究员头衔"`*/
+	//Sort              int                    `description:"后台排序"`
+	IsShow         int                    `description:"是否在小程序显示:1-显示 0-隐藏"`
+	YbFiccSort     int                    `description:"小程序FICC页排序"`
+	YbFiccIcon     string                 `description:"小程序FICC页icon"`
+	YbFiccPcIcon   string                 `description:"小程序PC端FICC页背景图"`
+	YbIconUrl      string                 `description:"小程序已购页icon"`
+	YbBgUrl        string                 `description:"小程序已购详情背景图"`
+	YbListImg      string                 `description:"小程序研报列表封面图"`
+	YbShareBgImg   string                 `description:"小程序研报详情分享背景图"`
+	YbRightBanner  string                 `description:"Pc端详情页,右侧,报告合集背景图"`
+	MenuList       []*ClassifyMenuSaveReq `description:"子目录列表"`
+	ClassifyMenuId int                    `description:"二级分类-子目录ID"`
+	RelateTel      int                    `description:"是否在电话会中可选: 0-否; 1-是"`
+	RelateVideo    int                    `description:"是否在路演视频中可选: 0-否; 1-是"`
+}
+
+// ClassifyMenuSaveReq 保存分类子目录请求体
+type ClassifyMenuSaveReq struct {
+	MenuId   int    `description:"子目录ID, 0为新增, 大于0为编辑"`
+	MenuName string `description:"子目录名称"`
+}
+
+type CrmEtaBaseResp struct {
+	Code   int    `json:"code" description:"状态码"`
+	Msg    string `json:"msg" description:"提示信息"`
+	ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
+}
+
+func crmEtaPost(url string, param interface{}) (respBody []byte, err error) {
+	data, e := json.Marshal(param)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	body := ioutil.NopCloser(strings.NewReader(string(data)))
+	client := &http.Client{}
+	req, e := http.NewRequest("POST", url, body)
+	if e != nil {
+		err = fmt.Errorf("http create request err: %s", e.Error())
+		return
+	}
+
+	contentType := "application/json;charset=utf-8"
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
+	resp, e := client.Do(req)
+	if e != nil {
+		err = fmt.Errorf("http client do err: %s", e.Error())
+		return
+	}
+	defer func() {
+		_ = resp.Body.Close()
+	}()
+	b, e := ioutil.ReadAll(resp.Body)
+	if e != nil {
+		err = fmt.Errorf("resp body read err: %s", e.Error())
+		return
+	}
+	if len(b) == 0 {
+		err = fmt.Errorf("resp body is empty")
+		return
+	}
+	// 生产环境解密, 注意有个坑前后的双引号
+	if utils.RunMode == "release" {
+		str := string(b)
+		str = strings.Trim(str, `"`)
+		b = utils.DesBase64Decrypt([]byte(str))
+	}
+
+	respBody = b
+	return
+}
+
+func EditReportClassify(pars *EditClassifyReq) (err error, errMsg string) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta/classify/edit")
+	b, err := crmEtaPost(url, pars)
+	if err != nil {
+		errMsg = "更新品种失败"
+		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		return
+	}
+	result := new(CrmEtaBaseResp)
+	if e := json.Unmarshal(b, &result); e != nil {
+		errMsg = "更新分类失败"
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	utils.FileLog.Info("%s", string(b))
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
+		errMsg = result.Msg
+		return
+	}
+	return
+}
+
+type EditClassifyPermissionReq struct {
+	Keyword               string
+	ChartPermissionIdList []int `description:"权限id数组"`
+	NewKeyword            string
+}
+
+// GetClassifyList 获取报告分类已绑定的权限
+func GetClassifyList(req *GetClassifyListReq) (list models.ClassifyListResp, err error) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta/classify/list")
+	b, err := crmEtaPost(url, req)
+	if err != nil {
+		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		return
+	}
+	//result := new(models.ResultData)
+	result := new(GetClassifyListResp)
+	if e := json.Unmarshal(b, &result); e != nil {
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	utils.FileLog.Info("%s", string(b))
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s", string(b))
+		return
+	}
+	list = result.Data
+	return
+}
+
+type ClassifyPermissionReq struct {
+	Keyword string
+}
+
+type ClassifyPermissionList struct {
+	List []*models.ChartPermissionSearchKeyWordMapping
+}
+
+type GetClassifyListResp struct {
+	Code   int                     `json:"code" description:"状态码"`
+	Msg    string                  `json:"msg" description:"提示信息"`
+	Data   models.ClassifyListResp `json:"data" description:"返回数据"`
+	ErrMsg string                  `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
+}

+ 11 - 8
services/company.go

@@ -2419,17 +2419,20 @@ func GetShareCompanyPermissionButton(roleTypeCode, statuses string, productId in
 	if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
 	if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
 		button.BtnModifySeller = false
 		button.BtnModifySeller = false
 	}
 	}
-	status, _ := statusMap[1]
-	//if !ok {
-	//	return
-	//}
+	status, ok := statusMap[1]
+	if !ok {
+		return
+	}
+	// 客户非关闭状态可见沟通记录按钮
+	if status != utils.COMPANY_STATUS_CLOSE {
+		button.BtnServiceRecord = true
+	}
 
 
-	// 销售
-	sellerArr := []string{
+	// ficc销售
+	ficcArr := []string{
 		utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_FICC_TEAM, utils.ROLE_TYPE_CODE_FICC_SELLER,
 		utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_FICC_TEAM, utils.ROLE_TYPE_CODE_FICC_SELLER,
-		utils.ROLE_TYPE_CODE_RAI_GROUP,utils.ROLE_TYPE_CODE_RAI_SELLER,utils.ROLE_TYPE_CODE_RAI_ADMIN,
 	}
 	}
-	if !utils.InArrayByStr(sellerArr, roleTypeCode) {
+	if !utils.InArrayByStr(ficcArr, roleTypeCode) {
 		return
 		return
 	}
 	}
 	if status == utils.COMPANY_STATUS_TRY_OUT {
 	if status == utils.COMPANY_STATUS_TRY_OUT {

+ 53 - 2
services/company_permission.go

@@ -16,7 +16,8 @@ import (
 // 场景:查看客户权限、客户详情、编辑客户、增开试用
 // 场景:查看客户权限、客户详情、编辑客户、增开试用
 // 非权益客户时, 返回权益权限列表, 但是checkList为空[]int
 // 非权益客户时, 返回权益权限列表, 但是checkList为空[]int
 // unify: 是否需要统一合并/拆分
 // unify: 是否需要统一合并/拆分
-func RaiCompanyPermissionAndCheckList(companyId int, unify bool) (resp *company.PermissionLookList, err error) {
+// filterPermissionName: 需要隐藏的权限名称
+func RaiCompanyPermissionAndCheckList(companyId int, unify bool, filterPermissionName []string) (resp *company.PermissionLookList, err error) {
 	resp = new(company.PermissionLookList)
 	resp = new(company.PermissionLookList)
 	productId := utils.COMPANY_PRODUCT_RAI_ID
 	productId := utils.COMPANY_PRODUCT_RAI_ID
 	productName := utils.COMPANY_PRODUCT_RAI_NAME
 	productName := utils.COMPANY_PRODUCT_RAI_NAME
@@ -154,7 +155,13 @@ func RaiCompanyPermissionAndCheckList(companyId int, unify bool) (resp *company.
 	//有升级权限时只展示一个
 	//有升级权限时只展示一个
 	newpPermissionItems := make([]*company.PermissionLookItem, 0)
 	newpPermissionItems := make([]*company.PermissionLookItem, 0)
 	if unify {
 	if unify {
-		newpPermissionItems = permissionItems
+		//newpPermissionItems = permissionItems
+		for _, v := range permissionItems {
+			if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+				continue
+			}
+			newpPermissionItems = append(newpPermissionItems, v)
+		}
 	} else {
 	} else {
 		upgradeMap := make(map[string]int)
 		upgradeMap := make(map[string]int)
 		for _, v := range permissionItems {
 		for _, v := range permissionItems {
@@ -162,6 +169,9 @@ func RaiCompanyPermissionAndCheckList(companyId int, unify bool) (resp *company.
 			//if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 			//if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 			//	continue
 			//	continue
 			//}
 			//}
+			if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+				continue
+			}
 			if _, ok := upgradeMap[v.PermissionName]; !ok {
 			if _, ok := upgradeMap[v.PermissionName]; !ok {
 				newpPermissionItems = append(newpPermissionItems, v)
 				newpPermissionItems = append(newpPermissionItems, v)
 				if strings.Contains(v.PermissionName, "升级") {
 				if strings.Contains(v.PermissionName, "升级") {
@@ -368,3 +378,44 @@ func GetPermissionNameMap() (mapItem map[int]string, err error) {
 	mapItem = mapPermissionName
 	mapItem = mapPermissionName
 	return
 	return
 }
 }
+
+func GetBasePermissionLookItem(productId int) (allPermissions []*company.PermissionLookItem, permissionMap map[int][]*company.PermissionLookItem, err error) {
+	//子权限切片集合
+	allPermissions, err = company.GetPermissionLookItemsByProductId(productId)
+	if err != nil {
+		err = fmt.Errorf("获取权限失败,Err:%s", err.Error())
+		return
+	}
+	permissionMap = make(map[int][]*company.PermissionLookItem, 0)
+	for _, v := range allPermissions {
+		if v.ParentId > 0 {
+			permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+		}
+	}
+	return
+}
+
+func GetBaseFiccPermissionSetItem() (allPermissions []*company.PermissionSetItem, permissionMap map[int][]*company.PermissionSetItem, err error) {
+	//子权限切片集合
+	allPermissions, err = company.GetPermissionByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+	if err != nil {
+		err = fmt.Errorf("获取权限失败,Err:%s", err.Error())
+		return
+	}
+	permissionMap = make(map[int][]*company.PermissionSetItem, 0)
+	for _, v := range allPermissions {
+		if v.ParentId > 0 {
+			permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
+		}
+	}
+	return
+}
+
+func GetPermissionFirstArr(productId int) (list []*models.ChartPermission, err error) {
+	if productId == 0 {
+		list, err = models.GetPermissionFirst()
+	} else {
+		list, err = models.GetPermissionFirstByProductId(productId)
+	}
+	return
+}

+ 51 - 51
services/contract/contract.go

@@ -1167,52 +1167,41 @@ func GetPermissionByContractService(productId int, serviceList []*contract.Contr
 // GetPermissionByPermissionIdMap 通过权限id的map,获取权限列表
 // GetPermissionByPermissionIdMap 通过权限id的map,获取权限列表
 func GetPermissionByPermissionIdMap(productId int, checkPermissionIdMap map[int]int) (permissionList []*company.PermissionLookList, err error) {
 func GetPermissionByPermissionIdMap(productId int, checkPermissionIdMap map[int]int) (permissionList []*company.PermissionLookList, err error) {
 	//子权限切片集合
 	//子权限切片集合
-	var permissionClassifyArr []string
-	if productId == 1 {
-		for _, v := range utils.PermissionFiccClassifyArr {
-			permissionClassifyArr = append(permissionClassifyArr, v)
+	allPermissions, err := company.GetPermissionLookItemsByProductId(productId)
+	if err != nil {
+		err = fmt.Errorf("获取权限失败,Err:%s", err.Error())
+		return
+	}
+	permissionMap := make(map[int][]*company.PermissionLookItem, 0)
+	for _, v := range allPermissions {
+		if v.ParentId > 0 {
+			permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
 		}
 		}
-	} else {
-		permissionClassifyArr = append(permissionClassifyArr, "权益")
 	}
 	}
-
 	//遍历获取
 	//遍历获取
-	for _, v := range permissionClassifyArr {
-		checkList := make([]int, 0)
-		plist := new(company.PermissionLookList)
-		items, tmpErr := company.GetPermissionLookItems(productId, v)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		for _, n := range items {
-			if _, ok := checkPermissionIdMap[n.ChartPermissionId]; ok {
-				checkList = append(checkList, n.ChartPermissionId)
-			} else if _, ok2 := checkPermissionIdMap[n.ChartPermissionId+utils.PERMISSION_ID_UPGRADE]; ok2 {
-				checkList = append(checkList, n.ChartPermissionId)
-				n.IsUpgrade = 1
+	for _, v := range allPermissions {
+		if v.ParentId == 0 {
+			checkList := make([]int, 0)
+			plist := new(company.PermissionLookList)
+			plist.Items = make([]*company.PermissionLookItem, 0)
+			items, ok1 := permissionMap[v.ChartPermissionId]
+			if ok1 {
+				for _, n := range items {
+					if _, ok := checkPermissionIdMap[n.ChartPermissionId]; ok {
+						checkList = append(checkList, n.ChartPermissionId)
+					} else if _, ok2 := checkPermissionIdMap[n.ChartPermissionId+utils.PERMISSION_ID_UPGRADE]; ok2 {
+						checkList = append(checkList, n.ChartPermissionId)
+						n.IsUpgrade = 1
+					}
+				}
+				plist.Items = items
 			}
 			}
+			plist.ClassifyName = v.PermissionName
+			plist.CheckList = checkList
+
+			permissionList = append(permissionList, plist)
 		}
 		}
-		//sandoPermissionIdMap := make(map[string]int)
-		////权益客户下,主观客观同时选择,进行合并
-		//for _, n := range items {
-		//	if _, ok := checkPermissionIdMap[n.ChartPermissionId]; ok {
-		//		if sandoPermissionIdMap[n.PermissionName] == 0 {
-		//			checkList = append(checkList, n.ChartPermissionId)
-		//		}
-		//		sandoPermissionIdMap[n.PermissionName] += 1
-		//	}
-		//}
-		//for i, n := range items {
-		//	if sandoPermissionIdMap[n.PermissionName] == 1 {
-		//		items[i].PermissionName = n.Remark
-		//	}
-		//}
-		plist.Items = items
-		plist.ClassifyName = v
-		plist.CheckList = checkList
 
 
-		permissionList = append(permissionList, plist)
 	}
 	}
 	return
 	return
 }
 }
@@ -1235,18 +1224,29 @@ func GetServicePermissionMap(serviceList []*contract.ContractServiceAndDetail) (
 		}
 		}
 		switch contractService.ServiceTemplateId {
 		switch contractService.ServiceTemplateId {
 		case 1: //ficc 大套餐
 		case 1: //ficc 大套餐
-			for _, v := range utils.PermissionFiccClassifyArr {
-				//大套餐中 市场策略暂时不作为勾选项
-				if v == "市场策略" {
-					continue
-				}
-				items, tmpErr := company.GetPermissionLookItems(1, v)
-				if tmpErr != nil {
-					err = tmpErr
-					return
+			allFiccPermissions, e := company.GetPermissionLookItemsByProductId(utils.COMPANY_PRODUCT_FICC_ID)
+			if e != nil {
+				err = fmt.Errorf("获取权限失败 Err:%v", e)
+				return
+			}
+			permissionMap := make(map[int][]*company.PermissionLookItem, 0)
+			for _, v := range allFiccPermissions {
+				if v.ParentId > 0 {
+					permissionMap[v.ParentId] = append(permissionMap[v.ParentId], v)
 				}
 				}
-				for _, n := range items {
-					checkPermissionIdMap[n.ChartPermissionId] = n.ChartPermissionId
+			}
+			for _, v := range allFiccPermissions {
+				if v.ParentId == 0 {
+					//合同这边市场策略不需要体现出来,所以调整返回
+					if v.PermissionName == "市场策略" {
+						continue
+					}
+					items, ok := permissionMap[v.ChartPermissionId]
+					if ok {
+						for _, n := range items {
+							checkPermissionIdMap[n.ChartPermissionId] = n.ChartPermissionId
+						}
+					}
 				}
 				}
 			}
 			}
 		case 2: //ficc小套餐
 		case 2: //ficc小套餐

+ 1 - 0
services/cygx/acitvity.go

@@ -1367,6 +1367,7 @@ func GetActChartPermissionList() []*cygx.ChartPermissionRepMore {
 		{PermissionName: "科技"},
 		{PermissionName: "科技"},
 		{PermissionName: "智造"},
 		{PermissionName: "智造"},
 		{PermissionName: "策略"},
 		{PermissionName: "策略"},
+		{PermissionName: "固收"},
 		{PermissionName: "宏观"},
 		{PermissionName: "宏观"},
 		//{PermissionName: utils.CHART_PERMISSION_NAME_MF_YANXUAN},
 		//{PermissionName: utils.CHART_PERMISSION_NAME_MF_YANXUAN},
 		//{PermissionName: utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(医药)"},
 		//{PermissionName: utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(医药)"},

+ 0 - 1
services/cygx/activity_points_set.go

@@ -211,7 +211,6 @@ func UpdateYanXuanActivityPointsBillOldComapny(activityInfo *cygx.ActivityDetail
 
 
 // 1用户报名添加到处理研选扣点
 // 1用户报名添加到处理研选扣点
 func YanXuanActivityPointsBillSignupAdd(activityId, uid, adminId int) (err error) {
 func YanXuanActivityPointsBillSignupAdd(activityId, uid, adminId int) (err error) {
-	time.Sleep(1 * time.Second) // 添加一秒的延时
 	defer func() {
 	defer func() {
 		if err != nil {
 		if err != nil {
 			fmt.Println(err)
 			fmt.Println(err)

+ 5 - 6
services/cygx/activity_power_check.go

@@ -552,19 +552,18 @@ func GetSpecialDetailUserPower(user *models.WxUser, activityInfo *cygx.ActivityS
 			return
 			return
 		}
 		}
 	}
 	}
-	//如果没有对应的权限,则返回
-	if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
-		return
-	}
 	permissionShengji, errs := cygx.GetCompanyPermissionByUserTrip(user.CompanyId)
 	permissionShengji, errs := cygx.GetCompanyPermissionByUserTrip(user.CompanyId)
 	if errs != nil {
 	if errs != nil {
 		err = errs
 		err = errs
 		return
 		return
 	}
 	}
-	//如果有升级权限的自动添加策略的升级权限
+	//如果有升级权限的自动添加策略、固收的升级权限
 	if permissionStr != "" {
 	if permissionStr != "" {
 		if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
 		if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
-			permissionStr += "," + utils.CE_LUE_NAME
+			permissionShengji += "," + utils.CE_LUE_NAME
+		}
+		if activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
+			permissionShengji += "," + utils.GU_SHOU_NAME
 		}
 		}
 	}
 	}
 	//如果没有对应的升级权限,则返回
 	//如果没有对应的升级权限,则返回

+ 4 - 4
services/cygx/activity_special.go

@@ -793,8 +793,8 @@ func DeductTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
 	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
 	pars = append(pars, companyId)
 	pars = append(pars, companyId)
 
 
-	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
-	if chartPermissionName != utils.CE_LUE_NAME {
+	//判断是不是策略、固收行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME && chartPermissionName != utils.GU_SHOU_NAME {
 		pars = make([]interface{}, 0)
 		pars = make([]interface{}, 0)
 		condition = " AND  company_id  = ?   AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )    ORDER BY  points DESC LIMIT 1   "
 		condition = " AND  company_id  = ?   AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )    ORDER BY  points DESC LIMIT 1   "
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)
@@ -882,8 +882,8 @@ func RebateTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
 	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
 	pars = append(pars, companyId)
 	pars = append(pars, companyId)
 
 
-	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
-	if chartPermissionName != utils.CE_LUE_NAME {
+	//判断是不是策略、固收行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME && chartPermissionName != utils.GU_SHOU_NAME {
 		pars = make([]interface{}, 0)
 		pars = make([]interface{}, 0)
 		condition = " AND  company_id  = ?  AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )  LIMIT 1   "
 		condition = " AND  company_id  = ?  AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )  LIMIT 1   "
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)

+ 2 - 2
services/cygx/mail.go

@@ -22,7 +22,7 @@ func SendResearchSummaryEmail(detail *cygx.DetailCygxResearchSummaryRep, touser
 	user = append(user, "zwxi@hzinsights.com ")
 	user = append(user, "zwxi@hzinsights.com ")
 	user = append(user, "zqliu@hzinsights.com ")
 	user = append(user, "zqliu@hzinsights.com ")
 	user = append(user, "tshen@hzinsights.com ")
 	user = append(user, "tshen@hzinsights.com ")
-	user = append(user, "krfeng@hzinsights.com ")
+	user = append(user, "hdong@hzinsights.com ")
 	user = append(user, "cxzhang@hzinsights.com ")
 	user = append(user, "cxzhang@hzinsights.com ")
 	m.SetHeader("Bcc", user...)
 	m.SetHeader("Bcc", user...)
 	m.SetHeader("Subject", detail.Title)
 	m.SetHeader("Subject", detail.Title)
@@ -291,7 +291,7 @@ func SendMinutesSummaryEmail(detail *cygx.DetailCygxMinutesSummaryRep, touser []
 	user = append(user, "zwxi@hzinsights.com ")
 	user = append(user, "zwxi@hzinsights.com ")
 	user = append(user, "zqliu@hzinsights.com ")
 	user = append(user, "zqliu@hzinsights.com ")
 	user = append(user, "tshen@hzinsights.com ")
 	user = append(user, "tshen@hzinsights.com ")
-	user = append(user, "krfeng@hzinsights.com ")
+	user = append(user, "hdong@hzinsights.com ")
 	user = append(user, "cxzhang@hzinsights.com ")
 	user = append(user, "cxzhang@hzinsights.com ")
 	m.SetHeader("To", user...)
 	m.SetHeader("To", user...)
 	m.SetHeader("Subject", detail.Title)
 	m.SetHeader("Subject", detail.Title)

+ 81 - 0
services/report_chapter_type_sync.go

@@ -0,0 +1,81 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hz_crm_api/services/alarm_msg"
+	"hongze/hz_crm_api/utils"
+)
+
+type EditReportChapterTypeSyncReq struct {
+	ReportChapterTypeId int `description:"报告章节类型id"`
+}
+
+func EditReportChapterTypeSync(pars *EditReportChapterTypeSyncReq) (err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("同步章节小程序数据失败, Err: " + err.Error() + errMsg)
+			alarm_msg.SendAlarmMsg("同步章节小程序数据失败,Err:"+err.Error(), 3)
+		}
+	}()
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta/chapter_type/yb/sync")
+	b, err := crmEtaPost(url, pars)
+	if err != nil {
+		errMsg = "更新品种失败"
+		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		return
+	}
+	result := new(CrmEtaBaseResp)
+	if e := json.Unmarshal(b, &result); e != nil {
+		errMsg = "更新分类失败"
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	utils.FileLog.Info("%s", string(b))
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
+		errMsg = result.Msg
+		return
+	}
+	return
+}
+
+type EditReportChapterTypeRuleSyncReq struct {
+	ResearchType string `description:"研报类型"`
+}
+
+// EditReportChapterTypeRuleSync 同步章节更新设置
+func EditReportChapterTypeRuleSync(pars *EditReportChapterTypeRuleSyncReq) (err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("同步章节更新设置失败, Err: " + err.Error() + errMsg)
+			alarm_msg.SendAlarmMsg("同步章节更新设置失败,Err:"+err.Error(), 3)
+		}
+	}()
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta/chapter_type/rule/sync")
+	b, err := crmEtaPost(url, pars)
+	if err != nil {
+		errMsg = "更新品种失败"
+		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		return
+	}
+	result := new(CrmEtaBaseResp)
+	if e := json.Unmarshal(b, &result); e != nil {
+		errMsg = "更新分类失败"
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	utils.FileLog.Info("%s", string(b))
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
+		errMsg = result.Msg
+		return
+	}
+	return
+}

+ 23 - 13
services/yb/road_video.go

@@ -330,26 +330,33 @@ func GetFiccPermission() (ret response.RoadPermissionResp, err error) {
 	if err != nil {
 	if err != nil {
 		return
 		return
 	}
 	}
-	permissionFirstMap := make(map[string]*response.RoadPermissionItem)
+	permissionFirstMap := make(map[int]*response.RoadPermissionItem)
 
 
-	//查询首页展示的图标
+	/*//查询首页展示的图标
 	permissionFirstList, err := models.GetYbChartPermissionFirst()
 	permissionFirstList, err := models.GetYbChartPermissionFirst()
 	if err != nil {
 	if err != nil {
 		return
 		return
-	}
-	for _, v := range permissionFirstList {
-		permissionFirstMap[v.ClassifyName] = &response.RoadPermissionItem{
-			Id:           v.Id,
-			ClassifyName: v.YbIndexName,
+	}*/
+	permissionFirstList := make([]*response.RoadPermissionItem, 0)
+	for _, v := range permissionList {
+		if v.ParentId == 0 {
+			tmp := &response.RoadPermissionItem{
+				Id:           v.ChartPermissionId,
+				ClassifyName: v.PermissionName,
+			}
+			permissionFirstMap[v.ChartPermissionId] = tmp
+			permissionFirstList = append(permissionFirstList, tmp)
 		}
 		}
 	}
 	}
 
 
 	for _, v := range permissionList {
 	for _, v := range permissionList {
-		temp := new(response.RoadPermissionSecondItem)
-		temp.ChartPermissionID = v.ChartPermissionId
-		temp.ChartPermissionName = v.PermissionName
-		if _, ok := permissionFirstMap[v.ClassifyName]; ok {
-			permissionFirstMap[v.ClassifyName].List = append(permissionFirstMap[v.ClassifyName].List, temp)
+		if v.ParentId > 0 {
+			temp := new(response.RoadPermissionSecondItem)
+			temp.ChartPermissionID = v.ChartPermissionId
+			temp.ChartPermissionName = v.PermissionName
+			if _, ok := permissionFirstMap[v.ParentId]; ok {
+				permissionFirstMap[v.ParentId].List = append(permissionFirstMap[v.ParentId].List, temp)
+			}
 		}
 		}
 	}
 	}
 
 
@@ -358,7 +365,10 @@ func GetFiccPermission() (ret response.RoadPermissionResp, err error) {
 		temp := new(response.RoadPermissionItem)
 		temp := new(response.RoadPermissionItem)
 		temp.Id = v.Id
 		temp.Id = v.Id
 		temp.ClassifyName = v.ClassifyName
 		temp.ClassifyName = v.ClassifyName
-		temp.List = permissionFirstMap[v.ClassifyName].List
+		l, ok := permissionFirstMap[v.Id]
+		if ok {
+			temp.List = l.List
+		}
 		list = append(list, temp)
 		list = append(list, temp)
 	}
 	}
 	ret.List = list
 	ret.List = list

+ 20 - 0
utils/common.go

@@ -2181,3 +2181,23 @@ func GetArabicNumbers(str string) string {
 	}
 	}
 	return string(numbers)
 	return string(numbers)
 }
 }
+
+// GetLikeKeywordPars
+//
+//	@Description: 获取sql查询中的参数切片
+//	@author: Roc
+//	@datetime2023-10-23 14:50:18
+//	@param pars []interface{}
+//	@param keyword string
+//	@param num int
+//	@return newPars []interface{}
+func GetLikeKeywordPars(pars []interface{}, keyword string, num int) (newPars []interface{}) {
+	newPars = pars
+	if newPars == nil {
+		newPars = make([]interface{}, 0)
+	}
+	for i := 1; i <= num; i++ {
+		newPars = append(newPars, `%`+keyword+`%`)
+	}
+	return
+}

+ 12 - 11
utils/constants.go

@@ -92,17 +92,18 @@ const (
 
 
 // 客户状态
 // 客户状态
 const (
 const (
-	COMPANY_STATUS_TRY_OUT         = "试用"
-	COMPANY_STATUS_X_CLASS_TRY_OUT = "X类试用" //最早定义为永续
-	COMPANY_STATUS_FOREVER         = "永续"
-	COMPANY_STATUS_FREEZE          = "冻结"
-	COMPANY_STATUS_LOSE            = "流失"
-	COMPANY_STATUS_LOSE_FLAG       = "loss"
-	COMPANY_STATUS_FORMAL          = "正式"
-	COMPANY_STATUS_POTENTIAL       = "潜在"
-	COMPANY_STATUS_CLOSE           = "关闭"
-	COMPANY_STATUS_CLOSE_FLAG      = "close"
-	COMPANY_STATUS_TRY_OUT_COUNT   = 60
+	COMPANY_STATUS_TRY_OUT           = "试用"
+	COMPANY_STATUS_X_CLASS_TRY_OUT   = "X类试用" //最早定义为永续
+	COMPANY_STATUS_FOREVER           = "永续"
+	COMPANY_STATUS_FREEZE            = "冻结"
+	COMPANY_STATUS_LOSE              = "流失"
+	COMPANY_STATUS_LOSE_FLAG         = "loss"
+	COMPANY_STATUS_FORMAL            = "正式"
+	COMPANY_STATUS_POTENTIAL         = "潜在"
+	COMPANY_STATUS_CLOSE             = "关闭"
+	COMPANY_STATUS_CLOSE_FLAG        = "close"
+	COMPANY_STATUS_TRY_OUT_COUNT     = 60
+	COMPANY_STATUS_TRY_OUT_COUNT_RAI = 30 // 权益试用客户上限
 
 
 	COMPANY_APPROVE_STATUS = "待审批"
 	COMPANY_APPROVE_STATUS = "待审批"
 )
 )