浏览代码

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into crm/crm_16.1

zhangchuanxing 4 月之前
父节点
当前提交
cc978719f2

+ 46 - 44
controllers/company_apply_v2.go

@@ -77,6 +77,49 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 		br.ErrMsg = "客户类型为:" + req.CompanyType
 		return
 	}
+
+	//添加缓存,避免多次点击提交
+	{
+		deleteCache := true
+		cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
+		defer func() {
+			if deleteCache {
+				utils.Rc.Delete(cacheKey)
+			}
+		}()
+		if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
+			deleteCache = false
+			br.Msg = "系统处理中,请勿重复操作"
+			br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+			return
+		}
+	}
+
+	approveRoleTypeCode := ""
+	if productId == 1 {
+		approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
+	} else {
+		approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
+	}
+	companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
+	if err != nil {
+		br.Msg = "获取客户信息失败"
+		br.ErrMsg = "获取客户信息失败"
+		return
+	}
+	if companyProduct.Status != utils.COMPANY_STATUS_FORMAL && companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
+		br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
+		br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
+		return
+	}
+
+	//客户归属判断-当前销售/咨询组共享销售
+	if companyProduct.SellerId != sysUser.AdminId && companyProduct.ShareSellerId != sysUser.AdminId {
+		br.Msg = "客户信息异常"
+		br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
+		return
+	}
+
 	mapPermissionIdUpgrade := make(map[int]int, 0)
 	mapPermissionIdExpensive := make(map[int]int, 0)
 	var raicontractType string
@@ -100,7 +143,7 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 
 		//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
 		raicontractType = req.ContractType
-		if raicontractType != "新签合同" {
+		if raicontractType != "新签合同" && companyProduct.Status != utils.COMPANY_STATUS_FOREVER {
 			//startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
 			//startDateTime = startDateTime.AddDate(-1, 0, 0)
 			totalLastYear, err := contractService.GetCompanyContractCountRaiByLastYear(req.CompanyId, req.StartDate)
@@ -124,47 +167,6 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 		req.PermissionIds = permissionStr
 	}
 
-	//添加缓存,避免多次点击提交
-	{
-		deleteCache := true
-		cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
-		defer func() {
-			if deleteCache {
-				utils.Rc.Delete(cacheKey)
-			}
-		}()
-		if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
-			deleteCache = false
-			br.Msg = "系统处理中,请勿重复操作"
-			br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
-			return
-		}
-	}
-
-	approveRoleTypeCode := ""
-	if productId == 1 {
-		approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
-	} else {
-		approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
-	}
-	companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
-	if err != nil {
-		br.Msg = "获取客户信息失败"
-		br.ErrMsg = "获取客户信息失败"
-		return
-	}
-	if companyProduct.Status != utils.COMPANY_STATUS_FORMAL && companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
-		br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
-		br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
-		return
-	}
-
-	//客户归属判断-当前销售/咨询组共享销售
-	if companyProduct.SellerId != sysUser.AdminId && companyProduct.ShareSellerId != sysUser.AdminId {
-		br.Msg = "客户信息异常"
-		br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
-		return
-	}
 	var approveUserId int
 	var approveUserRealName string
 	applyMethod := 5 //续约服务
@@ -620,7 +622,7 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 		if productId == 2 {
 			//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
 			raicontractType = contractType
-			if raicontractType != "新签合同" {
+			if raicontractType != "新签合同" && companyProduct.Status != utils.COMPANY_STATUS_FOREVER {
 				//startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
 				//startDateTime = startDateTime.AddDate(-1, 0, 0)
 				totalLastYear, err := contractService.GetCompanyContractCountRaiByLastYear(req.CompanyId, req.StartDate)
@@ -1149,7 +1151,7 @@ func (this *CompanyApplyController) ApplyBySystemContract() {
 	if productId == 2 {
 		//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
 		raicontractType = contractType
-		if raicontractType != "新签合同" {
+		if raicontractType != "新签合同" && companyProduct.Status != utils.COMPANY_STATUS_FOREVER {
 			//startDateTime := contractDetail.StartDate.AddDate(-1, 0, 0)
 			totalLastYear, err := contractService.GetCompanyContractCountRaiByLastYear(req.CompanyId, contractDetail.StartDate.Format(utils.FormatDate))
 			if err != nil {

+ 1958 - 1
controllers/company_seller.go

@@ -191,7 +191,7 @@ func (this *CompanySellerController) CheckListV2() {
 	getAllUser, _ := this.GetBool("AllUser", false)
 	status, _ := this.GetInt("Status", 0)
 	getAllEnabled, _ := this.GetBool("AllEnabled", false)
-	enabled := 1       //默认只获取正常状态的用户
+	enabled := -1       //默认只获取正常状态的用户
 	if getAllEnabled { //获取所有状态的用户
 		enabled = -1
 	}
@@ -5529,3 +5529,1960 @@ func (this *CompanySellerController) RaiServeSellerList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// CheckListV2
+// @Title 获取组长/组员下销售(根据部门、分组)-开票到款统计用 有特殊处理
+// @Description 获取组长/组员下销售(根据部门、分组)接口
+// @Param   AllSeller   query   bool  true       "是否获取部门所有的销售信息"
+// @Param   Status   query   int  true       "客户状态 1:流失 0:非流失"
+// @Param   AllEnabled   query   bool  true       "是否获取包含禁用的用户"
+// @Success 200 {object} company.DepartmentGroupSellersResp
+// @router /seller/check/invoice_payment/list [get]
+func (this *CompanySellerController) InvoicePaymentCheckList() {
+	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
+	}
+	roleCodeTypeStr := ``
+	productId := services.GetProductId(sysUser.RoleTypeCode)
+	switch productId {
+	case 1:
+		roleCodeTypeStr = `"` + utils.ROLE_TYPE_CODE_FICC_SELLER + `","` + utils.ROLE_TYPE_CODE_FICC_GROUP + `","` + utils.ROLE_TYPE_CODE_FICC_TEAM + `"`
+	case 2:
+		roleCodeTypeStr = `"` + utils.ROLE_TYPE_CODE_RAI_SELLER + `","` + utils.ROLE_TYPE_CODE_RAI_GROUP + `"`
+	}
+
+	// ficc管理员,不要只查销售
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
+		roleCodeTypeStr = ``
+	} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
+		// 权益管理员,查看所有权益的账号
+		roleCodeTypeStr = `"` + utils.ROLE_TYPE_CODE_RAI_SELLER + `","` + utils.ROLE_TYPE_CODE_RAI_GROUP + `","` + utils.ROLE_TYPE_CODE_RAI_RESEARCHR + `","` + utils.ROLE_TYPE_CODE_RAI_ADMIN + `"`
+	}
+
+	getAllSeller, _ := this.GetBool("AllSeller", false)
+	getAllUser, _ := this.GetBool("AllUser", false)
+	status, _ := this.GetInt("Status", 0)
+	//getAllEnabled, _ := this.GetBool("AllEnabled", false)
+	enabled := -1       //默认只获取正常状态的用户
+	//if getAllEnabled { //获取所有状态的用户
+	//	enabled = -1
+	//}
+	list := make([]company.DepartmentGroupSellers, 0)
+	if getAllUser {
+		departmentList, err := system.GetDepartmentList()
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取部门失败,Err:" + err.Error()
+			return
+		}
+		for _, department := range departmentList {
+			departmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+			item := company.DepartmentGroupSellers{
+				AdminId: fmt.Sprint("department_", department.DepartmentId),
+				//AdminName string `description:"系统用户名称"`
+				RealName:     department.DepartmentName,
+				ChildrenList: departmentGroupSellerList,
+			}
+
+			groupList, err := system.GetSysGroupByDepartmentId(department.DepartmentId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分组失败,Err:" + err.Error()
+				return
+			}
+			for _, group := range groupList {
+				groupSellerList := make([]company.DepartmentGroupSellers, 0)
+				groupItem := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("group_", group.DepartmentId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     group.GroupName,
+					ChildrenList: groupSellerList,
+				}
+				teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+				if err != nil {
+					br.Msg = "获取小组失败"
+					br.ErrMsg = "获取小组失败,Err:" + err.Error()
+					return
+				}
+				for _, team := range teamList {
+					teamSellerList := make([]company.DepartmentGroupSellers, 0)
+					teamItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("team_", team.GroupId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     team.GroupName,
+						ChildrenList: teamSellerList,
+					}
+					sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					for _, seller := range sellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						//fmt.Println("seller.RealName:", seller.RealName)
+						teamSellerList = append(teamSellerList, sellerItem)
+					}
+					teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+					teamItem.ChildrenList = teamSellerList
+					if len(teamSellerList) > 0 {
+						groupSellerList = append(groupSellerList, teamItem)
+					}
+				}
+				//分组为0的销售(直属分组)
+				groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(groupTeamSellerList) > 0 {
+					tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range groupTeamSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+					}
+					//排个序
+					tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+					groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+				}
+
+				//groupItem.ChildrenList = groupSellerList
+				//if len(groupSellerList) > 0 {
+				//	list = append(list, item)
+				//}
+
+				//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//for _, seller := range sellerList {
+				//	sellerItem := company.DepartmentGroupSellers{
+				//		AdminId: fmt.Sprint(seller.AdminId),
+				//		//AdminName string `description:"系统用户名称"`
+				//		RealName:     seller.RealName,
+				//		Authority:    seller.Authority,
+				//		RoleTypeCode: seller.RoleTypeCode,
+				//	}
+				//	groupSellerList = append(groupSellerList, sellerItem)
+				//}
+				//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+				groupItem.ChildrenList = groupSellerList
+				if len(groupSellerList) > 0 {
+					departmentGroupSellerList = append(departmentGroupSellerList, groupItem)
+				}
+			}
+
+			//分组为0的销售(直属部门)
+			departmentSellerList, err := system.GetDepartmentGroupSysUserList(department.DepartmentId, 0, roleCodeTypeStr)
+			if err != nil {
+				br.Msg = "获取销售失败"
+				br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				return
+			}
+			if len(departmentSellerList) > 0 {
+				tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+				for _, seller := range departmentSellerList {
+					sellerItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint(seller.AdminId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     seller.RealName,
+						Authority:    seller.Authority,
+						RoleTypeCode: seller.RoleTypeCode,
+					}
+					tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+				}
+				//排个序
+				tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+				departmentGroupSellerList = append(departmentGroupSellerList, tmpDepartmentGroupSellersList...)
+			}
+
+			item.ChildrenList = departmentGroupSellerList
+			if len(departmentGroupSellerList) > 0 {
+				list = append(list, item)
+			}
+		}
+
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = company.DepartmentGroupSellersResp{
+			List: list,
+		}
+
+		return
+	}
+	if getAllSeller == false {
+		//超管看部门、小组、销售
+		if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
+			departmentList, err := system.GetDepartmentList()
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取部门失败,Err:" + err.Error()
+				return
+			}
+			for _, department := range departmentList {
+				departmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+				item := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("department_", department.DepartmentId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     department.DepartmentName,
+					ChildrenList: departmentGroupSellerList,
+				}
+
+				groupList, err := system.GetSysGroupByDepartmentId(department.DepartmentId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分组失败,Err:" + err.Error()
+					return
+				}
+				for _, group := range groupList {
+					groupSellerList := make([]company.DepartmentGroupSellers, 0)
+					groupItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("group_", group.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     group.GroupName,
+						ChildrenList: groupSellerList,
+					}
+					teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+					if err != nil {
+						br.Msg = "获取小组失败"
+						br.ErrMsg = "获取小组失败,Err:" + err.Error()
+						return
+					}
+					for _, team := range teamList {
+						teamSellerList := make([]company.DepartmentGroupSellers, 0)
+						teamItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("team_", team.GroupId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     team.GroupName,
+							ChildrenList: teamSellerList,
+						}
+						sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						for _, seller := range sellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							//fmt.Println("seller.RealName:", seller.RealName)
+							teamSellerList = append(teamSellerList, sellerItem)
+						}
+						teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+						teamItem.ChildrenList = teamSellerList
+						if len(teamSellerList) > 0 {
+							groupSellerList = append(groupSellerList, teamItem)
+						}
+					}
+					//分组为0的销售(直属分组)
+					groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(groupTeamSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range groupTeamSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					//groupItem.ChildrenList = groupSellerList
+					//if len(groupSellerList) > 0 {
+					//	list = append(list, item)
+					//}
+
+					//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+					//if err != nil {
+					//	br.Msg = "获取销售失败"
+					//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					//	return
+					//}
+					//for _, seller := range sellerList {
+					//	sellerItem := company.DepartmentGroupSellers{
+					//		AdminId: fmt.Sprint(seller.AdminId),
+					//		//AdminName string `description:"系统用户名称"`
+					//		RealName:     seller.RealName,
+					//		Authority:    seller.Authority,
+					//		RoleTypeCode: seller.RoleTypeCode,
+					//	}
+					//	groupSellerList = append(groupSellerList, sellerItem)
+					//}
+					//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+					groupItem.ChildrenList = groupSellerList
+					if len(groupSellerList) > 0 {
+						departmentGroupSellerList = append(departmentGroupSellerList, groupItem)
+					}
+				}
+
+				//分组为0的销售(直属部门)
+				departmentSellerList, err := system.GetDepartmentGroupSysUserList(department.DepartmentId, 0, roleCodeTypeStr)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(departmentSellerList) > 0 {
+					tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range departmentSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+					}
+					//排个序
+					tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+					departmentGroupSellerList = append(departmentGroupSellerList, tmpDepartmentGroupSellersList...)
+				}
+
+				item.ChildrenList = departmentGroupSellerList
+				if len(departmentGroupSellerList) > 0 {
+					list = append(list, item)
+				}
+			}
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_TEAM || sysUser.Authority == 4 {
+			//销售组长看销售
+			if status == 0 {
+				directorId := sysUser.GroupId
+				fmt.Println("directorId:", directorId)
+				groupList, err := system.GetSysGroupByDirectorId(directorId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分组失败,Err:" + err.Error()
+					return
+				}
+				for _, group := range groupList {
+					groupSellerList := make([]company.DepartmentGroupSellers, 0)
+					groupItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("group_", group.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     group.GroupName,
+						ChildrenList: groupSellerList,
+					}
+					teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+					if err != nil {
+						br.Msg = "获取小组失败"
+						br.ErrMsg = "获取小组失败,Err:" + err.Error()
+						return
+					}
+					for _, team := range teamList {
+						teamSellerList := make([]company.DepartmentGroupSellers, 0)
+						teamItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("team_", team.GroupId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     team.GroupName,
+							ChildrenList: teamSellerList,
+						}
+						sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						for _, seller := range sellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							//fmt.Println("seller.RealName:", seller.RealName)
+							teamSellerList = append(teamSellerList, sellerItem)
+						}
+						teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+						teamItem.ChildrenList = teamSellerList
+						if len(teamSellerList) > 0 {
+							groupSellerList = append(groupSellerList, teamItem)
+						}
+					}
+					//分组为0的销售(直属分组)
+					groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(groupTeamSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range groupTeamSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					groupItem.ChildrenList = groupSellerList
+					if len(groupSellerList) > 0 {
+						list = append(list, groupItem)
+					}
+				}
+			} else {
+				departmentStr := `1,2`
+				departmentList, err := system.GetDepartmentListByIds(departmentStr)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取部门失败,Err:" + err.Error()
+					return
+				}
+				for _, department := range departmentList {
+					departmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+					item := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("department_", department.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     department.DepartmentName,
+						ChildrenList: departmentGroupSellerList,
+					}
+
+					groupList, err := system.GetSysGroupByDepartmentId(department.DepartmentId)
+					if err != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取分组失败,Err:" + err.Error()
+						return
+					}
+					for _, group := range groupList {
+						groupSellerList := make([]company.DepartmentGroupSellers, 0)
+						groupItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("group_", group.DepartmentId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     group.GroupName,
+							ChildrenList: groupSellerList,
+						}
+						teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+						if err != nil {
+							br.Msg = "获取小组失败"
+							br.ErrMsg = "获取小组失败,Err:" + err.Error()
+							return
+						}
+						for _, team := range teamList {
+							teamSellerList := make([]company.DepartmentGroupSellers, 0)
+							teamItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint("team_", team.GroupId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     team.GroupName,
+								ChildrenList: teamSellerList,
+							}
+							sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+							if err != nil {
+								br.Msg = "获取销售失败"
+								br.ErrMsg = "获取销售失败,Err:" + err.Error()
+								return
+							}
+							for _, seller := range sellerList {
+								sellerItem := company.DepartmentGroupSellers{
+									AdminId: fmt.Sprint(seller.AdminId),
+									//AdminName string `description:"系统用户名称"`
+									RealName:     seller.RealName,
+									Authority:    seller.Authority,
+									RoleTypeCode: seller.RoleTypeCode,
+								}
+								//fmt.Println("seller.RealName:", seller.RealName)
+								teamSellerList = append(teamSellerList, sellerItem)
+							}
+							teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+							teamItem.ChildrenList = teamSellerList
+							if len(teamSellerList) > 0 {
+								groupSellerList = append(groupSellerList, teamItem)
+							}
+						}
+						//分组为0的人,不光是销售(直属分组)
+						groupTeamSellerList, err := system.GetGroupSysUserList(group.GroupId)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						if len(groupTeamSellerList) > 0 {
+							tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+							for _, seller := range groupTeamSellerList {
+								sellerItem := company.DepartmentGroupSellers{
+									AdminId: fmt.Sprint(seller.AdminId),
+									//AdminName string `description:"系统用户名称"`
+									RealName:     seller.RealName,
+									Authority:    seller.Authority,
+									RoleTypeCode: seller.RoleTypeCode,
+								}
+								tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+							}
+							//排个序
+							tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+							groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+						}
+
+						//groupItem.ChildrenList = groupSellerList
+						//if len(groupSellerList) > 0 {
+						//	list = append(list, item)
+						//}
+
+						//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+						//if err != nil {
+						//	br.Msg = "获取销售失败"
+						//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						//	return
+						//}
+						//for _, seller := range sellerList {
+						//	sellerItem := company.DepartmentGroupSellers{
+						//		AdminId: fmt.Sprint(seller.AdminId),
+						//		//AdminName string `description:"系统用户名称"`
+						//		RealName:     seller.RealName,
+						//		Authority:    seller.Authority,
+						//		RoleTypeCode: seller.RoleTypeCode,
+						//	}
+						//	groupSellerList = append(groupSellerList, sellerItem)
+						//}
+						//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+						groupItem.ChildrenList = groupSellerList
+						if len(groupSellerList) > 0 {
+							departmentGroupSellerList = append(departmentGroupSellerList, groupItem)
+						}
+					}
+
+					//分组为0的人,不光是销售(直属部门)
+					departmentSellerList, err := system.GetDepartmentGroupSysUserList(department.DepartmentId, 0, "")
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(departmentSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range departmentSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						departmentGroupSellerList = append(departmentGroupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					item.ChildrenList = departmentGroupSellerList
+					if len(departmentGroupSellerList) > 0 {
+						list = append(list, item)
+					}
+				}
+			}
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FINANCE || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN { //合规或财务或ficc管理员
+			departmentStr := `2,5,7` //合规
+			switch sysUser.RoleTypeCode {
+			case utils.ROLE_TYPE_CODE_FINANCE: //财务
+				departmentStr = `2,5,8`
+			case utils.ROLE_TYPE_CODE_FICC_ADMIN: //ficc管理员
+				departmentStr = utils.GetFiccAdminDepartmentIds()
+			}
+			departmentList, err := system.GetDepartmentListByIds(departmentStr)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取部门失败,Err:" + err.Error()
+				return
+			}
+			for _, department := range departmentList {
+				fmt.Println(department)
+				departmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+				item := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("department_", department.DepartmentId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     department.DepartmentName,
+					ChildrenList: departmentGroupSellerList,
+				}
+
+				groupList, err := system.GetSysGroupByDepartmentId(department.DepartmentId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分组失败,Err:" + err.Error()
+					return
+				}
+				for _, group := range groupList {
+					groupSellerList := make([]company.DepartmentGroupSellers, 0)
+					groupItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("group_", group.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     group.GroupName,
+						ChildrenList: groupSellerList,
+					}
+					teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+					if err != nil {
+						br.Msg = "获取小组失败"
+						br.ErrMsg = "获取小组失败,Err:" + err.Error()
+						return
+					}
+					for _, team := range teamList {
+						teamSellerList := make([]company.DepartmentGroupSellers, 0)
+						teamItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("team_", team.GroupId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     team.GroupName,
+							ChildrenList: teamSellerList,
+						}
+						sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						for _, seller := range sellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							//fmt.Println("seller.RealName:", seller.RealName)
+							teamSellerList = append(teamSellerList, sellerItem)
+						}
+						teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+						teamItem.ChildrenList = teamSellerList
+						if len(teamSellerList) > 0 {
+							groupSellerList = append(groupSellerList, teamItem)
+						}
+					}
+					//分组为0的销售(直属分组)
+					groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(groupTeamSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range groupTeamSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					//groupItem.ChildrenList = groupSellerList
+					//if len(groupSellerList) > 0 {
+					//	list = append(list, item)
+					//}
+
+					//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+					//if err != nil {
+					//	br.Msg = "获取销售失败"
+					//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					//	return
+					//}
+					//for _, seller := range sellerList {
+					//	sellerItem := company.DepartmentGroupSellers{
+					//		AdminId: fmt.Sprint(seller.AdminId),
+					//		//AdminName string `description:"系统用户名称"`
+					//		RealName:     seller.RealName,
+					//		Authority:    seller.Authority,
+					//		RoleTypeCode: seller.RoleTypeCode,
+					//	}
+					//	groupSellerList = append(groupSellerList, sellerItem)
+					//}
+					//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+					groupItem.ChildrenList = groupSellerList
+					if len(groupSellerList) > 0 {
+						departmentGroupSellerList = append(departmentGroupSellerList, groupItem)
+					}
+				}
+
+				//分组为0的销售(直属部门)
+				departmentSellerList, err := system.GetDepartmentGroupSysUserList(department.DepartmentId, 0, roleCodeTypeStr)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(departmentSellerList) > 0 {
+					tmpDepartmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range departmentSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSellerList = append(tmpDepartmentGroupSellerList, sellerItem)
+					}
+					//排个序
+					tmpDepartmentGroupSellerList = sortDepartmentGroupSellers(tmpDepartmentGroupSellerList)
+					departmentGroupSellerList = append(departmentGroupSellerList, tmpDepartmentGroupSellerList...)
+				}
+
+				item.ChildrenList = departmentGroupSellerList
+				if len(departmentGroupSellerList) > 0 {
+					list = append(list, item)
+				}
+			}
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN || sysUser.Authority == 1 {
+			//部门管理员看小组、销售
+			departmentId := sysUser.DepartmentId
+			switch sysUser.RoleTypeCode {
+			case utils.ROLE_TYPE_CODE_RAI_ADMIN: //权益管理员
+				departmentId = 5
+			case utils.ROLE_TYPE_CODE_FICC_ADMIN: //ficc管理员
+				departmentId = 2
+			}
+			groupList, err := system.GetSysGroupByDepartmentId(departmentId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分组失败,Err:" + err.Error()
+				return
+			}
+			for _, group := range groupList {
+				groupSellerList := make([]company.DepartmentGroupSellers, 0)
+				groupItem := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("group_", group.DepartmentId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     group.GroupName,
+					ChildrenList: groupSellerList,
+				}
+				teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+				if err != nil {
+					br.Msg = "获取小组失败"
+					br.ErrMsg = "获取小组失败,Err:" + err.Error()
+					return
+				}
+				for _, team := range teamList {
+					teamSellerList := make([]company.DepartmentGroupSellers, 0)
+					teamItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("team_", team.GroupId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     team.GroupName,
+						ChildrenList: teamSellerList,
+					}
+					sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					for _, seller := range sellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						//fmt.Println("seller.RealName:", seller.RealName)
+						teamSellerList = append(teamSellerList, sellerItem)
+					}
+					teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+					teamItem.ChildrenList = teamSellerList
+					if len(teamSellerList) > 0 {
+						groupSellerList = append(groupSellerList, teamItem)
+					}
+				}
+				//分组为0的销售(直属分组)
+				groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(groupTeamSellerList) > 0 {
+					tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range groupTeamSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+					}
+					//排个序
+					tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+					groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+				}
+
+				//groupItem.ChildrenList = groupSellerList
+				//if len(groupSellerList) > 0 {
+				//	list = append(list, item)
+				//}
+
+				//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//for _, seller := range sellerList {
+				//	sellerItem := company.DepartmentGroupSellers{
+				//		AdminId: fmt.Sprint(seller.AdminId),
+				//		//AdminName string `description:"系统用户名称"`
+				//		RealName:     seller.RealName,
+				//		Authority:    seller.Authority,
+				//		RoleTypeCode: seller.RoleTypeCode,
+				//	}
+				//	groupSellerList = append(groupSellerList, sellerItem)
+				//}
+				//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+				groupItem.ChildrenList = groupSellerList
+				if len(groupSellerList) > 0 {
+					list = append(list, groupItem)
+				}
+			}
+
+			//分组为0的销售(直属部门)
+			departmentSellerList, err := system.GetDepartmentGroupSysUserList(departmentId, 0, roleCodeTypeStr)
+			if err != nil {
+				br.Msg = "获取销售失败"
+				br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				return
+			}
+			if len(departmentSellerList) > 0 {
+				tmpDepartmentGroupSeller := make([]company.DepartmentGroupSellers, 0)
+				for _, seller := range departmentSellerList {
+					sellerItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint(seller.AdminId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     seller.RealName,
+						Authority:    seller.Authority,
+						RoleTypeCode: seller.RoleTypeCode,
+					}
+					tmpDepartmentGroupSeller = append(tmpDepartmentGroupSeller, sellerItem)
+				}
+				tmpDepartmentGroupSeller = sortDepartmentGroupSellers(tmpDepartmentGroupSeller)
+				list = append(list, tmpDepartmentGroupSeller...)
+			}
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || (sysUser.Authority == 2 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_GROUP) {
+			// 权益组长看小组
+			if status == 0 {
+				sellerList, err := system.GetTeamSysUserList(sysUser.GroupId, enabled)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				for _, seller := range sellerList {
+					sellerItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint(seller.AdminId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     seller.RealName,
+						Authority:    seller.Authority,
+						RoleTypeCode: seller.RoleTypeCode,
+					}
+					//fmt.Println("seller.RealName:", seller.RealName)
+					list = append(list, sellerItem)
+				}
+				list = sortDepartmentGroupSellers(list)
+
+				//正常来说没有所有人都应该在某个小组下,要不就是小组名为 无 的小组
+				//分组为0的销售(直属分组)
+				//groupTeamSellerList, err := system.GetGrooupsysUserList(sysUser.GroupId, 0, roleCodeTypeStr)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//if len(groupTeamSellerList) > 0 {
+				//	tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+				//	for _, seller := range groupTeamSellerList {
+				//		sellerItem := company.DepartmentGroupSellers{
+				//			AdminId: fmt.Sprint(seller.AdminId),
+				//			//AdminName string `description:"系统用户名称"`
+				//			RealName:     seller.RealName,
+				//			Authority:    seller.Authority,
+				//			RoleTypeCode: seller.RoleTypeCode,
+				//		}
+				//		tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+				//	}
+				//	//排个序
+				//	tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+				//	list = append(list, tmpDepartmentGroupSellersList...)
+				//}
+				//sellerList, err := system.GetDepartmentGroupSysUserList(sysUser.DepartmentId, sysUser.GroupId, roleCodeTypeStr)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//for _, seller := range sellerList {
+				//	sellerItem := company.DepartmentGroupSellers{
+				//		AdminId: fmt.Sprint(seller.AdminId),
+				//		//AdminName string `description:"系统用户名称"`
+				//		RealName:     seller.RealName,
+				//		Authority:    seller.Authority,
+				//		RoleTypeCode: seller.RoleTypeCode,
+				//	}
+				//	list = append(list, sellerItem)
+				//	list = sortDepartmentGroupSellers(list)
+				//}
+			} else {
+				departmentId := 5
+				groupList, err := system.GetSysGroupByDepartmentId(departmentId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分组失败,Err:" + err.Error()
+					return
+				}
+				for _, group := range groupList {
+					groupSellerList := make([]company.DepartmentGroupSellers, 0)
+					groupItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("group_", group.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     group.GroupName,
+						ChildrenList: groupSellerList,
+					}
+					teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+					if err != nil {
+						br.Msg = "获取小组失败"
+						br.ErrMsg = "获取小组失败,Err:" + err.Error()
+						return
+					}
+					for _, team := range teamList {
+						teamSellerList := make([]company.DepartmentGroupSellers, 0)
+						teamItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("team_", team.GroupId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     team.GroupName,
+							ChildrenList: teamSellerList,
+						}
+						sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						for _, seller := range sellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							//fmt.Println("seller.RealName:", seller.RealName)
+							teamSellerList = append(teamSellerList, sellerItem)
+						}
+						teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+						teamItem.ChildrenList = teamSellerList
+						if len(teamSellerList) > 0 {
+							groupSellerList = append(groupSellerList, teamItem)
+						}
+					}
+					//分组为0的销售(直属分组)
+					groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(groupTeamSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range groupTeamSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					//groupItem.ChildrenList = groupSellerList
+					//if len(groupSellerList) > 0 {
+					//	list = append(list, item)
+					//}
+
+					//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+					//if err != nil {
+					//	br.Msg = "获取销售失败"
+					//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					//	return
+					//}
+					//for _, seller := range sellerList {
+					//	sellerItem := company.DepartmentGroupSellers{
+					//		AdminId: fmt.Sprint(seller.AdminId),
+					//		//AdminName string `description:"系统用户名称"`
+					//		RealName:     seller.RealName,
+					//		Authority:    seller.Authority,
+					//		RoleTypeCode: seller.RoleTypeCode,
+					//	}
+					//	groupSellerList = append(groupSellerList, sellerItem)
+					//}
+					//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+					groupItem.ChildrenList = groupSellerList
+					if len(groupSellerList) > 0 {
+						list = append(list, groupItem)
+					}
+				}
+
+				//分组为0的销售(直属部门)
+				departmentSellerList, err := system.GetDepartmentGroupSysUserList(departmentId, 0, roleCodeTypeStr)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(departmentSellerList) > 0 {
+					tmpDepartmentGroupSeller := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range departmentSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSeller = append(tmpDepartmentGroupSeller, sellerItem)
+					}
+					tmpDepartmentGroupSeller = sortDepartmentGroupSellers(tmpDepartmentGroupSeller)
+					list = append(list, tmpDepartmentGroupSeller...)
+				}
+			}
+
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP || sysUser.Authority == 2 {
+			// 销售主管看小组
+			if status == 0 {
+				pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "查询父级id异常" + err.Error()
+					return
+				}
+				var realGroupId int
+				if pid != nil && *pid > 0 {
+					//主管角色放在了三级分组下
+					realGroupId = *pid
+				} else {
+					//主管角色放在了二级分组下
+					realGroupId = sysUser.GroupId
+				}
+				groupList, err := system.GetSysGroupByGroupId(realGroupId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分组失败,Err:" + err.Error()
+					return
+				}
+				for _, group := range groupList {
+					groupSellerList := make([]company.DepartmentGroupSellers, 0)
+					//groupItem := company.DepartmentGroupSellers{
+					//	AdminId: fmt.Sprint("group_", group.DepartmentId),
+					//	//AdminName string `description:"系统用户名称"`
+					//	RealName:     group.GroupName,
+					//	ChildrenList: groupSellerList,
+					//}
+					teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+					if err != nil {
+						br.Msg = "获取小组失败"
+						br.ErrMsg = "获取小组失败,Err:" + err.Error()
+						return
+					}
+					for _, team := range teamList {
+						teamSellerList := make([]company.DepartmentGroupSellers, 0)
+						teamItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("team_", team.GroupId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     team.GroupName,
+							ChildrenList: teamSellerList,
+						}
+						sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						for _, seller := range sellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							//fmt.Println("seller.RealName:", seller.RealName)
+							teamSellerList = append(teamSellerList, sellerItem)
+						}
+						teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+						teamItem.ChildrenList = teamSellerList
+						if len(teamSellerList) > 0 {
+							groupSellerList = append(groupSellerList, teamItem)
+						}
+					}
+					//分组为0的销售(直属分组)
+					groupTeamSellerList, err := system.GetGrooupsysUserList(realGroupId, roleCodeTypeStr, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(groupTeamSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range groupTeamSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+					}
+					list = groupSellerList
+					//groupItem.ChildrenList = groupSellerList
+					//if len(groupSellerList) > 0 {
+					//	list = append(list, item)
+					//}
+
+					//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+					//if err != nil {
+					//	br.Msg = "获取销售失败"
+					//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					//	return
+					//}
+					//for _, seller := range sellerList {
+					//	sellerItem := company.DepartmentGroupSellers{
+					//		AdminId: fmt.Sprint(seller.AdminId),
+					//		//AdminName string `description:"系统用户名称"`
+					//		RealName:     seller.RealName,
+					//		Authority:    seller.Authority,
+					//		RoleTypeCode: seller.RoleTypeCode,
+					//	}
+					//	groupSellerList = append(groupSellerList, sellerItem)
+					//}
+					//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+
+					//groupItem.ChildrenList = groupSellerList
+					//if len(groupSellerList) > 0 {
+					//	list = append(list, groupItem)
+					//}
+
+				}
+
+				//分组为0的销售(直属二级分组)
+				//departmentSellerList, err := system.GetDepartmentGroupSysUserList(2, realGroupId, roleCodeTypeStr)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//if len(departmentSellerList) > 0 {
+				//	tmpDepartmentGroupSeller := make([]company.DepartmentGroupSellers, 0)
+				//	for _, seller := range departmentSellerList {
+				//		sellerItem := company.DepartmentGroupSellers{
+				//			AdminId: fmt.Sprint(seller.AdminId),
+				//			//AdminName string `description:"系统用户名称"`
+				//			RealName:     seller.RealName,
+				//			Authority:    seller.Authority,
+				//			RoleTypeCode: seller.RoleTypeCode,
+				//		}
+				//		tmpDepartmentGroupSeller = append(tmpDepartmentGroupSeller, sellerItem)
+				//	}
+				//	tmpDepartmentGroupSeller = sortDepartmentGroupSellers(tmpDepartmentGroupSeller)
+				//	list = append(list, tmpDepartmentGroupSeller...)
+				//}
+				//pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
+				//if err != nil {
+				//	br.Msg = "获取失败"
+				//	br.ErrMsg = "查询父级id异常" + err.Error()
+				//	return
+				//}
+				//if pid != nil && *pid > 0 {
+				//	//主管角色放在了三级分组下
+				//	//
+				//
+				//
+				//} else {
+				//	//主管角色放在了二级分组下
+				//
+				//}
+				//ids, err := company.GetGroupIdsByParentId(*pid)
+				//if err != nil {
+				//	br.Msg = "获取失败"
+				//	br.ErrMsg = "查询父级id异常" + err.Error()
+				//	return
+				//}
+				//var idSlice []string
+				//var sid string
+				//for _, id := range ids {
+				//	idSlice = append(idSlice, *id)
+				//}
+				//sid = strings.Join(idSlice, ",")
+				//sellerList, err := system.GetTeamSysUserListByIds(sid)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//for _, seller := range sellerList {
+				//	sellerItem := company.DepartmentGroupSellers{
+				//		AdminId: fmt.Sprint(seller.AdminId),
+				//		//AdminName string `description:"系统用户名称"`
+				//		RealName:     seller.RealName,
+				//		Authority:    seller.Authority,
+				//		RoleTypeCode: seller.RoleTypeCode,
+				//	}
+				//	fmt.Println("seller.RealName:", seller.RealName)
+				//	list = append(list, sellerItem)
+				//}
+				//list = sortDepartmentGroupSellers(list)
+				//
+				////分组为0的销售(直属分组)
+				//groupTeamSellerList, err := system.GetGrooupsysUserList(sysUser.GroupId, roleCodeTypeStr)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//if len(groupTeamSellerList) > 0 {
+				//	tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+				//	for _, seller := range groupTeamSellerList {
+				//		sellerItem := company.DepartmentGroupSellers{
+				//			AdminId: fmt.Sprint(seller.AdminId),
+				//			//AdminName string `description:"系统用户名称"`
+				//			RealName:     seller.RealName,
+				//			Authority:    seller.Authority,
+				//			RoleTypeCode: seller.RoleTypeCode,
+				//		}
+				//		tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+				//	}
+				//	//排个序
+				//	tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+				//	list = append(list, tmpDepartmentGroupSellersList...)
+				//}
+				//sellerList, err := system.GetDepartmentGroupSysUserList(sysUser.DepartmentId, sysUser.GroupId, roleCodeTypeStr)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//for _, seller := range sellerList {
+				//	sellerItem := company.DepartmentGroupSellers{
+				//		AdminId: fmt.Sprint(seller.AdminId),
+				//		//AdminName string `description:"系统用户名称"`
+				//		RealName:     seller.RealName,
+				//		Authority:    seller.Authority,
+				//		RoleTypeCode: seller.RoleTypeCode,
+				//	}
+				//	list = append(list, sellerItem)
+				//	list = sortDepartmentGroupSellers(list)
+				//}
+
+				//正常来说没有所有人都应该在某个小组下,要不就是小组名为 无 的小组
+			} else {
+				//var departmentStr string
+				//if utils.RunMode == "release" {
+				//	departmentStr = `1,2`
+				//} else {
+				//	departmentStr = `1,2`
+				//}
+				departmentStr := `1,2`
+				departmentList, err := system.GetDepartmentListByIds(departmentStr)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取部门失败,Err:" + err.Error()
+					return
+				}
+				for _, department := range departmentList {
+					departmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+					item := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("department_", department.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     department.DepartmentName,
+						ChildrenList: departmentGroupSellerList,
+					}
+
+					groupList, err := system.GetSysGroupByDepartmentId(department.DepartmentId)
+					if err != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取分组失败,Err:" + err.Error()
+						return
+					}
+					for _, group := range groupList {
+						groupSellerList := make([]company.DepartmentGroupSellers, 0)
+						groupItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("group_", group.DepartmentId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     group.GroupName,
+							ChildrenList: groupSellerList,
+						}
+						teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+						if err != nil {
+							br.Msg = "获取小组失败"
+							br.ErrMsg = "获取小组失败,Err:" + err.Error()
+							return
+						}
+						for _, team := range teamList {
+							teamSellerList := make([]company.DepartmentGroupSellers, 0)
+							teamItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint("team_", team.GroupId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     team.GroupName,
+								ChildrenList: teamSellerList,
+							}
+							sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+							if err != nil {
+								br.Msg = "获取销售失败"
+								br.ErrMsg = "获取销售失败,Err:" + err.Error()
+								return
+							}
+							for _, seller := range sellerList {
+								sellerItem := company.DepartmentGroupSellers{
+									AdminId: fmt.Sprint(seller.AdminId),
+									//AdminName string `description:"系统用户名称"`
+									RealName:     seller.RealName,
+									Authority:    seller.Authority,
+									RoleTypeCode: seller.RoleTypeCode,
+								}
+								//fmt.Println("seller.RealName:", seller.RealName)
+								teamSellerList = append(teamSellerList, sellerItem)
+							}
+							teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+							teamItem.ChildrenList = teamSellerList
+							if len(teamSellerList) > 0 {
+								groupSellerList = append(groupSellerList, teamItem)
+							}
+						}
+						//分组为0的人,不光是销售(直属分组)
+						groupTeamSellerList, err := system.GetGroupSysUserList(group.GroupId)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						if len(groupTeamSellerList) > 0 {
+							tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+							for _, seller := range groupTeamSellerList {
+								sellerItem := company.DepartmentGroupSellers{
+									AdminId: fmt.Sprint(seller.AdminId),
+									//AdminName string `description:"系统用户名称"`
+									RealName:     seller.RealName,
+									Authority:    seller.Authority,
+									RoleTypeCode: seller.RoleTypeCode,
+								}
+								tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+							}
+							//排个序
+							tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+							groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+						}
+
+						//groupItem.ChildrenList = groupSellerList
+						//if len(groupSellerList) > 0 {
+						//	list = append(list, item)
+						//}
+
+						//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+						//if err != nil {
+						//	br.Msg = "获取销售失败"
+						//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						//	return
+						//}
+						//for _, seller := range sellerList {
+						//	sellerItem := company.DepartmentGroupSellers{
+						//		AdminId: fmt.Sprint(seller.AdminId),
+						//		//AdminName string `description:"系统用户名称"`
+						//		RealName:     seller.RealName,
+						//		Authority:    seller.Authority,
+						//		RoleTypeCode: seller.RoleTypeCode,
+						//	}
+						//	groupSellerList = append(groupSellerList, sellerItem)
+						//}
+						//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+						groupItem.ChildrenList = groupSellerList
+						if len(groupSellerList) > 0 {
+							departmentGroupSellerList = append(departmentGroupSellerList, groupItem)
+						}
+					}
+
+					//分组为0的人,不光是销售(直属部门)
+					departmentSellerList, err := system.GetDepartmentGroupSysUserList(department.DepartmentId, 0, "")
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(departmentSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range departmentSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						departmentGroupSellerList = append(departmentGroupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					item.ChildrenList = departmentGroupSellerList
+					if len(departmentGroupSellerList) > 0 {
+						list = append(list, item)
+					}
+				}
+			}
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER && status == 1 {
+			//var departmentStr string
+			//if utils.RunMode == "release" {
+			//	departmentStr = `1,2`
+			//} else {
+			//	departmentStr = `1,2`
+			//}
+			departmentStr := `1,2`
+			departmentList, err := system.GetDepartmentListByIds(departmentStr)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取部门失败,Err:" + err.Error()
+				return
+			}
+			for _, department := range departmentList {
+				departmentGroupSellerList := make([]company.DepartmentGroupSellers, 0)
+				item := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("department_", department.DepartmentId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     department.DepartmentName,
+					ChildrenList: departmentGroupSellerList,
+				}
+
+				groupList, err := system.GetSysGroupByDepartmentId(department.DepartmentId)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分组失败,Err:" + err.Error()
+					return
+				}
+				for _, group := range groupList {
+					groupSellerList := make([]company.DepartmentGroupSellers, 0)
+					groupItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("group_", group.DepartmentId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     group.GroupName,
+						ChildrenList: groupSellerList,
+					}
+					teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+					if err != nil {
+						br.Msg = "获取小组失败"
+						br.ErrMsg = "获取小组失败,Err:" + err.Error()
+						return
+					}
+					for _, team := range teamList {
+						teamSellerList := make([]company.DepartmentGroupSellers, 0)
+						teamItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint("team_", team.GroupId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     team.GroupName,
+							ChildrenList: teamSellerList,
+						}
+						sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+						if err != nil {
+							br.Msg = "获取销售失败"
+							br.ErrMsg = "获取销售失败,Err:" + err.Error()
+							return
+						}
+						for _, seller := range sellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							//fmt.Println("seller.RealName:", seller.RealName)
+							teamSellerList = append(teamSellerList, sellerItem)
+						}
+						teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+						teamItem.ChildrenList = teamSellerList
+						if len(teamSellerList) > 0 {
+							groupSellerList = append(groupSellerList, teamItem)
+						}
+					}
+					//分组为0的人,不光是销售(直属分组)
+					groupTeamSellerList, err := system.GetGroupSysUserList(group.GroupId)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					if len(groupTeamSellerList) > 0 {
+						tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+						for _, seller := range groupTeamSellerList {
+							sellerItem := company.DepartmentGroupSellers{
+								AdminId: fmt.Sprint(seller.AdminId),
+								//AdminName string `description:"系统用户名称"`
+								RealName:     seller.RealName,
+								Authority:    seller.Authority,
+								RoleTypeCode: seller.RoleTypeCode,
+							}
+							tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+						}
+						//排个序
+						tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+						groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+					}
+
+					//groupItem.ChildrenList = groupSellerList
+					//if len(groupSellerList) > 0 {
+					//	list = append(list, item)
+					//}
+
+					//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+					//if err != nil {
+					//	br.Msg = "获取销售失败"
+					//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					//	return
+					//}
+					//for _, seller := range sellerList {
+					//	sellerItem := company.DepartmentGroupSellers{
+					//		AdminId: fmt.Sprint(seller.AdminId),
+					//		//AdminName string `description:"系统用户名称"`
+					//		RealName:     seller.RealName,
+					//		Authority:    seller.Authority,
+					//		RoleTypeCode: seller.RoleTypeCode,
+					//	}
+					//	groupSellerList = append(groupSellerList, sellerItem)
+					//}
+					//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+					groupItem.ChildrenList = groupSellerList
+					if len(groupSellerList) > 0 {
+						departmentGroupSellerList = append(departmentGroupSellerList, groupItem)
+					}
+				}
+
+				//分组为0的人,不光是销售(直属部门)
+				departmentSellerList, err := system.GetDepartmentGroupSysUserList(department.DepartmentId, 0, "")
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(departmentSellerList) > 0 {
+					tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range departmentSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+					}
+					//排个序
+					tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+					departmentGroupSellerList = append(departmentGroupSellerList, tmpDepartmentGroupSellersList...)
+				}
+
+				item.ChildrenList = departmentGroupSellerList
+				if len(departmentGroupSellerList) > 0 {
+					list = append(list, item)
+				}
+			}
+		} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER && status == 1 {
+			// 权益销售可以看到权益销售部的所有人
+			departmentId := 5
+			groupList, err := system.GetSysGroupByDepartmentId(departmentId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分组失败,Err:" + err.Error()
+				return
+			}
+			for _, group := range groupList {
+				groupSellerList := make([]company.DepartmentGroupSellers, 0)
+				groupItem := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("group_", group.DepartmentId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     group.GroupName,
+					ChildrenList: groupSellerList,
+				}
+				teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+				if err != nil {
+					br.Msg = "获取小组失败"
+					br.ErrMsg = "获取小组失败,Err:" + err.Error()
+					return
+				}
+				for _, team := range teamList {
+					teamSellerList := make([]company.DepartmentGroupSellers, 0)
+					teamItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint("team_", team.GroupId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     team.GroupName,
+						ChildrenList: teamSellerList,
+					}
+					sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+					if err != nil {
+						br.Msg = "获取销售失败"
+						br.ErrMsg = "获取销售失败,Err:" + err.Error()
+						return
+					}
+					for _, seller := range sellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						//fmt.Println("seller.RealName:", seller.RealName)
+						teamSellerList = append(teamSellerList, sellerItem)
+					}
+					teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+					teamItem.ChildrenList = teamSellerList
+					if len(teamSellerList) > 0 {
+						groupSellerList = append(groupSellerList, teamItem)
+					}
+				}
+				//分组为0的销售(直属分组)
+				groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				if len(groupTeamSellerList) > 0 {
+					tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+					for _, seller := range groupTeamSellerList {
+						sellerItem := company.DepartmentGroupSellers{
+							AdminId: fmt.Sprint(seller.AdminId),
+							//AdminName string `description:"系统用户名称"`
+							RealName:     seller.RealName,
+							Authority:    seller.Authority,
+							RoleTypeCode: seller.RoleTypeCode,
+						}
+						tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+					}
+					//排个序
+					tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+					groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+				}
+
+				//groupItem.ChildrenList = groupSellerList
+				//if len(groupSellerList) > 0 {
+				//	list = append(list, item)
+				//}
+
+				//sellerList, err := system.GetGroupSysUserList(group.DepartmentId)
+				//if err != nil {
+				//	br.Msg = "获取销售失败"
+				//	br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				//	return
+				//}
+				//for _, seller := range sellerList {
+				//	sellerItem := company.DepartmentGroupSellers{
+				//		AdminId: fmt.Sprint(seller.AdminId),
+				//		//AdminName string `description:"系统用户名称"`
+				//		RealName:     seller.RealName,
+				//		Authority:    seller.Authority,
+				//		RoleTypeCode: seller.RoleTypeCode,
+				//	}
+				//	groupSellerList = append(groupSellerList, sellerItem)
+				//}
+				//groupSellerList = sortDepartmentGroupSellers(groupSellerList)
+				groupItem.ChildrenList = groupSellerList
+				if len(groupSellerList) > 0 {
+					list = append(list, groupItem)
+				}
+			}
+
+			//分组为0的销售(直属部门)
+			departmentSellerList, err := system.GetDepartmentGroupSysUserList(departmentId, 0, roleCodeTypeStr)
+			if err != nil {
+				br.Msg = "获取销售失败"
+				br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				return
+			}
+			if len(departmentSellerList) > 0 {
+				tmpDepartmentGroupSeller := make([]company.DepartmentGroupSellers, 0)
+				for _, seller := range departmentSellerList {
+					sellerItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint(seller.AdminId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     seller.RealName,
+						Authority:    seller.Authority,
+						RoleTypeCode: seller.RoleTypeCode,
+					}
+					tmpDepartmentGroupSeller = append(tmpDepartmentGroupSeller, sellerItem)
+				}
+				tmpDepartmentGroupSeller = sortDepartmentGroupSellers(tmpDepartmentGroupSeller)
+				list = append(list, tmpDepartmentGroupSeller...)
+			}
+		} else {
+			//看自己
+			sellerItem := company.DepartmentGroupSellers{
+				AdminId: fmt.Sprint(sysUser.AdminId),
+				//AdminName string `description:"系统用户名称"`
+				RealName: sysUser.RealName,
+			}
+			list = append(list, sellerItem)
+		}
+	} else {
+		departmentId := sysUser.DepartmentId
+		switch productId {
+		case 1:
+			departmentId = 2
+		case 5:
+			departmentId = 5
+		}
+		//查询整个部门的小组、销售
+		groupList, err := system.GetSysGroupByDepartmentId(departmentId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取分组失败,Err:" + err.Error()
+			return
+		}
+		for _, group := range groupList {
+			groupSellerList := make([]company.DepartmentGroupSellers, 0)
+			groupItem := company.DepartmentGroupSellers{
+				AdminId: fmt.Sprint("group_", group.DepartmentId),
+				//AdminName string `description:"系统用户名称"`
+				RealName:     group.GroupName,
+				ChildrenList: groupSellerList,
+			}
+			teamList, err := system.GetSysTeamByDepartmentId(group.GroupId)
+			if err != nil {
+				br.Msg = "获取小组失败"
+				br.ErrMsg = "获取小组失败,Err:" + err.Error()
+				return
+			}
+			for _, team := range teamList {
+				teamSellerList := make([]company.DepartmentGroupSellers, 0)
+				teamItem := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint("team_", team.GroupId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     team.GroupName,
+					ChildrenList: teamSellerList,
+				}
+				sellerList, err := system.GetTeamSysUserList(team.GroupId, enabled)
+				if err != nil {
+					br.Msg = "获取销售失败"
+					br.ErrMsg = "获取销售失败,Err:" + err.Error()
+					return
+				}
+				for _, seller := range sellerList {
+					sellerItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint(seller.AdminId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     seller.RealName,
+						Authority:    seller.Authority,
+						RoleTypeCode: seller.RoleTypeCode,
+					}
+					//fmt.Println("seller.RealName:", seller.RealName)
+					teamSellerList = append(teamSellerList, sellerItem)
+				}
+				teamSellerList = sortDepartmentGroupSellers(teamSellerList)
+				teamItem.ChildrenList = teamSellerList
+				if len(teamSellerList) > 0 {
+					groupSellerList = append(groupSellerList, teamItem)
+				}
+			}
+			//分组为0的销售(直属分组)
+			groupTeamSellerList, err := system.GetGrooupsysUserList(group.GroupId, roleCodeTypeStr, enabled)
+			if err != nil {
+				br.Msg = "获取销售失败"
+				br.ErrMsg = "获取销售失败,Err:" + err.Error()
+				return
+			}
+			if len(groupTeamSellerList) > 0 {
+				tmpDepartmentGroupSellersList := make([]company.DepartmentGroupSellers, 0)
+				for _, seller := range groupTeamSellerList {
+					sellerItem := company.DepartmentGroupSellers{
+						AdminId: fmt.Sprint(seller.AdminId),
+						//AdminName string `description:"系统用户名称"`
+						RealName:     seller.RealName,
+						Authority:    seller.Authority,
+						RoleTypeCode: seller.RoleTypeCode,
+					}
+					tmpDepartmentGroupSellersList = append(tmpDepartmentGroupSellersList, sellerItem)
+				}
+				//排个序
+				tmpDepartmentGroupSellersList = sortDepartmentGroupSellers(tmpDepartmentGroupSellersList)
+				groupSellerList = append(groupSellerList, tmpDepartmentGroupSellersList...)
+			}
+
+			groupItem.ChildrenList = groupSellerList
+			if len(groupSellerList) > 0 {
+				list = append(list, groupItem)
+			}
+		}
+
+		//分组为0的销售(直属部门)
+		departmentSellerList, err := system.GetDepartmentGroupSysUserList(departmentId, 0, roleCodeTypeStr)
+		if err != nil {
+			br.Msg = "获取销售失败"
+			br.ErrMsg = "获取销售失败,Err:" + err.Error()
+			return
+		}
+		if len(departmentSellerList) > 0 {
+			tmpDepartmentGroupSeller := make([]company.DepartmentGroupSellers, 0)
+			for _, seller := range departmentSellerList {
+				sellerItem := company.DepartmentGroupSellers{
+					AdminId: fmt.Sprint(seller.AdminId),
+					//AdminName string `description:"系统用户名称"`
+					RealName:     seller.RealName,
+					Authority:    seller.Authority,
+					RoleTypeCode: seller.RoleTypeCode,
+				}
+				tmpDepartmentGroupSeller = append(tmpDepartmentGroupSeller, sellerItem)
+			}
+			//排个序
+			tmpDepartmentGroupSeller = sortDepartmentGroupSellers(tmpDepartmentGroupSeller)
+			list = append(list, tmpDepartmentGroupSeller...)
+		}
+	}
+
+	//// 海外销售部-目前无权限, 均可见
+	//seaDepartment, e := system.GetSysDepartmentByName("海外销售部")
+	//if e != nil && e.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取海外销售部失败, Err: " + e.Error()
+	//	return
+	//}
+	//if e == nil {
+	//	// 获取部门下的销售人员
+	//	seaSellers, e := system.GetDepartmentGroupSysUserList(seaDepartment.DepartmentId, 0, "")
+	//	if e != nil {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取海外销售失败, Err: " + e.Error()
+	//		return
+	//	}
+	//	// 获取分组
+	//	seaGroups, e := system.GetSysGroupListByDepartmentId(seaDepartment.DepartmentId)
+	//	if e != nil {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取海外销售部分组失败, Err: " + e.Error()
+	//		return
+	//	}
+	//
+	//	var d company.DepartmentGroupSellers
+	//	d.AdminId = fmt.Sprintf("department_%d", seaDepartment.DepartmentId)
+	//	d.RealName = seaDepartment.DepartmentName
+	//	children := make([]company.DepartmentGroupSellers, 0)
+	//	// 无分组
+	//	if len(seaGroups) == 0 {
+	//		for _, s := range seaSellers {
+	//			children = append(children, company.DepartmentGroupSellers{
+	//				AdminId:      strconv.Itoa(s.AdminId),
+	//				RealName:     s.RealName,
+	//				RoleTypeCode: s.RoleTypeCode,
+	//				Authority:    s.Authority,
+	//			})
+	//		}
+	//	}
+	//	// 有分组
+	//	if len(seaGroups) > 0 {
+	//		// 销售map
+	//		sellerMap := make(map[int][]company.DepartmentGroupSellers)
+	//		for _, s := range seaSellers {
+	//			sellerMap[s.GroupId] = append(sellerMap[s.GroupId], company.DepartmentGroupSellers{
+	//				AdminId:      strconv.Itoa(s.AdminId),
+	//				RealName:     s.RealName,
+	//				RoleTypeCode: s.RoleTypeCode,
+	//				Authority:    s.Authority,
+	//			})
+	//		}
+	//		// 小组map
+	//		childrenMap := make(map[int][]company.DepartmentGroupSellers)
+	//		for _, g := range seaGroups {
+	//			if g.ParentId == 0 {
+	//				continue
+	//			}
+	//			childrenMap[g.ParentId] = append(childrenMap[g.ParentId], company.DepartmentGroupSellers{
+	//				AdminId:      fmt.Sprintf("team_%d", g.GroupId),
+	//				RealName:     g.GroupName,
+	//				ChildrenList: sellerMap[g.GroupId],
+	//			})
+	//		}
+	//		// 大组
+	//		for _, g := range seaGroups {
+	//			if g.ParentId > 0 {
+	//				continue
+	//			}
+	//			c := childrenMap[g.GroupId]
+	//			if len(sellerMap[g.GroupId]) > 0 {
+	//				c = append(c, sellerMap[g.GroupId]...)
+	//			}
+	//			children = append(children, company.DepartmentGroupSellers{
+	//				AdminId:      fmt.Sprintf("group_%d", g.GroupId),
+	//				RealName:     g.GroupName,
+	//				ChildrenList: c,
+	//			})
+	//		}
+	//	}
+	//	d.ChildrenList = children
+	//	list = append(list, d)
+	//}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = company.DepartmentGroupSellersResp{
+		List: list,
+	}
+}

+ 62 - 2
controllers/company_user.go

@@ -1107,7 +1107,7 @@ func (this *CompanyUserController) List() {
 		for _, v := range ybViewsList {
 			userYbViewsMap[v.UserId] = v.VisitCount
 		}
-
+		userHaveMoveMap := services.GetWxUserHaveMoveMap(mobilesSlice) // 处理用户是否移动过按钮回显
 		for i := 0; i < lenList; i++ {
 			item := list[i]
 			//企业名称
@@ -1261,6 +1261,10 @@ func (this *CompanyUserController) List() {
 			// 分产品阅读统计
 			list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
 			//list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
+
+			if item.Mobile != "" {
+				list[i].HaveMoveButton = userHaveMoveMap[item.Mobile]
+			}
 		}
 
 		isUserYanXuanButtonShow, err := services.CheckCompanyUserYanXuanButton(sysUser.RoleTypeCode, sysUser.Mobile)
@@ -1317,6 +1321,7 @@ func (this *CompanyUserController) List() {
 					}
 				}
 			}
+
 			for i := 0; i < lenList; i++ {
 				item := list[i]
 				// 分产品阅读统计
@@ -2740,6 +2745,7 @@ func (this *CompanyController) PotentialUserMove() {
 		OpUserName:             sysUser.RealName,
 		CreateTime:             time.Now(),
 	})
+	go services.AddWxUserMoveLog(wxUser, sysUser, req.CompanyId) // 添加用户移动日志记录
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "移动成功"
@@ -2852,6 +2858,8 @@ func (this *CompanyController) UserMove() {
 		CreateTime:             time.Now(),
 	})
 
+	go services.AddWxUserMoveLog(wxUser, sysUser, req.CompanyId) // 添加用户移动日志记录
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "移动成功"
@@ -3297,7 +3305,7 @@ func (this *CompanyUserController) ViewReportList() {
 			secondCondition += `AND create_time <  ?`
 			secondPars = append(secondPars, lastViewTime)
 
-			_, items, err = obj.GetViewReportList(lastViewTimeT.Year(), secondCondition, secondPars, int(total)-pageSize)
+			_, items, err = obj.GetViewReportList(lastViewTimeT.Year()-1, secondCondition, secondPars, pageSize-int(total))
 			if err != nil {
 				br.Msg = "获取失败"
 				br.Msg = "获取失败,Err:" + err.Error()
@@ -6418,3 +6426,55 @@ func (this *CompanyUserController) ListByReport() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// listMoveLog
+// @Title 联系人移动记录列表
+// @Description 联系人移动记录列表接口
+// @Param   Mobile   query   string  true       "手机号"
+// @Success 200 {object} company.CompanyUserListResp
+// @router /user/listMoveLog [get]
+func (this *CompanyUserController) ListMoveLog() {
+	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
+	}
+	mobile := this.GetString("Mobile")
+	if mobile == "" {
+		br.Msg = "手机号不能为空"
+		return
+	}
+	list, err := company.GetWxUserMoveLogListmByMobile(mobile)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	respList := make([]*company.WxUserMoveLogResp, 0)
+	for _, v := range list {
+		item := new(company.WxUserMoveLogResp)
+		item.UserName = v.RealName
+		item.Mobile = v.Mobile
+		item.Email = v.Email
+		item.CompanyId = v.CompanyId
+		item.CompanyName = v.CompanyName
+		item.CompanyIdMove = v.CompanyIdMove
+		item.CompanyNameMove = v.CompanyNameMove
+		item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
+		respList = append(respList, item)
+	}
+	resp := &company.WxUserMoveLogListResp{
+		List: respList,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 150 - 82
controllers/cygx/activity_meet.go

@@ -1610,6 +1610,7 @@ func (this *ActivityMeetCoAntroller) AttendanceDetail() {
 // @Title 线上活动进门财经关联匹配列表
 // @Description 获取线上活动进门财经关联匹配列表接口
 // @Param   KeyWord   query   string  false       "搜索关键词"
+// @Param   ActivityId   query   int  false       "搜索关键词"
 // @Success 200 {object} cygx.RoadshowDataTitleList
 // @router /activityMeet/matchingList [get]
 func (this *ActivityMeetCoAntroller) MatchingList() {
@@ -1629,7 +1630,19 @@ func (this *ActivityMeetCoAntroller) MatchingList() {
 		br.Msg = "请输入搜索内容"
 		return
 	}
-	list, err := cygx.GetRoadshowDataTitleList(keyWord)
+	activityId, _ := this.GetInt("ActivityId")
+
+	detail, err := cygx.GetAddActivityInfoById(activityId)
+	if err != nil {
+		br.Msg = "活动不存在"
+		br.ErrMsg = "活动ID错误,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	dateTime := detail.ActivityTime
+	dateTime = utils.TimeRemoveHms2(dateTime)
+	startTime := dateTime + " 00:00:00'"
+	endTime := dateTime + " 23:59:59'"
+	list, err := cygx.GetRoadshowDataTitleList(startTime, endTime, keyWord)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "获取信息失败,Err:" + err.Error()
@@ -1648,6 +1661,21 @@ func (this *ActivityMeetCoAntroller) MatchingList() {
 			list[k].RoadshowTitle = activityName
 		}
 	}
+
+	param := new(cygxService.GetYiDongActivityByApiReq)
+	param.MeetingStatus = "2"
+	param.ConveneStartStr = dateTime
+	param.ConveneEndStr = dateTime
+	actList := cygxService.GetYiDongActivityListByApi(param)
+	for _, v := range actList {
+		if strings.Contains(v.Title, keyWord) {
+			item := new(cygx.RoadshowDataTitle)
+			item.RoadshowTitle = v.Title
+			item.ActivityTime = dateTime
+			list = append(list, item)
+		}
+	}
+
 	resplist.List = list
 	br.Ret = 200
 	br.Success = true
@@ -1703,103 +1731,143 @@ func (this *ActivityMeetCoAntroller) MatchingByHand() {
 	}
 	var condition string
 	dateTime := detail.ActivityTime
-	dateTime = utils.TimeRemoveHms(dateTime)
-	condition += ` AND roadshow_begin_time >= ` + "'" + dateTime + " 00:00:00'"
-	condition += ` AND roadshow_begin_time  <= ` + "'" + dateTime + " 23:59:59'"
-	if len(slice) > 0 {
-		keyWord = slice[0]
-	}
-	if keyWord != "" {
-		list, err := cygx.GetRoadshowDataList(keyWord, condition)
-		if err != nil {
-			br.Msg = "手动归类失败"
-			br.ErrMsg = "获取进门财经数据失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
-			return
-		}
-		var roadshowId string
-		for _, v := range list {
-			if v.RoadshowId != "" {
-				roadshowId = v.RoadshowId
+	dateTime = utils.TimeRemoveHms2(dateTime)
+
+	param := new(cygxService.GetYiDongActivityByApiReq)
+	param.MeetingStatus = "2"
+	param.ConveneStartStr = dateTime
+	param.ConveneEndStr = dateTime
+	actList := cygxService.GetYiDongActivityListByApi(param)
+
+	var ismatch bool // 是否匹配
+
+	//优先匹配易董的活动
+	if len(actList) > 0 {
+		for _, v := range actList {
+			var newActivityName string
+			titleSlice := strings.Split(v.Title, "】")
+
+			for _, vt := range titleSlice {
+				newActivityName = strings.Replace(vt, "-", "", -1)
+				newActivityName = strings.Replace(newActivityName, "-", "", -1)
+				newActivityName = strings.Replace(newActivityName, "—", "", -1)
+				newActivityName = strings.Replace(newActivityName, " ", "", -1)
+				newActivityName = strings.Replace(newActivityName, ":", "", -1)
+			}
+			//如果活动时间一致,而且标题还还包含关键词就建立匹配关系
+			if strings.Contains(detail.ActivityNameTask, newActivityName) && detail.ActivityTime == v.Start {
+				err = cygx.UpdateCygxActivityyidongActivityId(v.ID, activityId)
+				if err != nil {
+					br.Msg = "手动归类失败"
+					br.ErrMsg = "建立易董活动匹配关系失败,UpdateCygxActivityyidongActivityId Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+					return
+				}
+				ismatch = true
+				go cygxService.GetYiDongActivityMeeting(v.ID, activityId)
 				break
 			}
+
+		}
+	}
+
+	if !ismatch {
+		condition += ` AND roadshow_begin_time >= ` + "'" + dateTime + " 00:00:00'"
+		condition += ` AND roadshow_begin_time  <= ` + "'" + dateTime + " 23:59:59'"
+		if len(slice) > 0 {
+			keyWord = slice[0]
 		}
-		needAddAttendanc := make([]*cygx.CygxActivityAttendanceDetail, 0)
-		if len(list) > 0 {
-			err = cygx.UpdateActivityRoadshowTitle(activityId, keyWord, roadshowId)
+		if keyWord != "" {
+			list, err := cygx.GetRoadshowDataList(keyWord, condition)
 			if err != nil {
 				br.Msg = "手动归类失败"
-				br.ErrMsg = "关联匹配类型失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				br.ErrMsg = "获取进门财经数据失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
 				return
 			}
+			var roadshowId string
 			for _, v := range list {
-				if v.UserPhone != "" {
-					item := new(cygx.CygxActivityAttendanceDetail)
-					item.ActivityId = activityId
-					item.RealName = v.UserName
-					item.Mobile = v.UserPhone
-					item.CompanyName = v.Company
-					//item.SellerName = sellerName
-					item.FirstMeetingTime = v.FirstWatchTime
-					item.LastMeetingTime = v.LastWatchTime
-					item.Duration = utils.GetAttendanceDetailSeconds(v.JoinTime)
-					if v.JoinType == 1 {
-						item.MeetingTypeStr = "网络"
-					} else {
-						item.MeetingTypeStr = "电话"
-					}
-					item.MeetingAuthentication = v.AuthInfo
-					if v.DataType == 1 {
-						item.MeetingStatusStr = "直播"
-					} else {
-						item.MeetingStatusStr = "回放"
-					}
-					item.Position = v.Occupation
-					item.UseridEntity = v.UseridEntity
-					item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
-					item.CreateTime = time.Now()
-					mobileStr += "'" + v.UserPhone + "'" + ","
-
-					needAddAttendanc = append(needAddAttendanc, item)
+				if v.RoadshowId != "" {
+					roadshowId = v.RoadshowId
+					break
 				}
 			}
-			mobileStr = strings.TrimRight(mobileStr, ",")
-			if mobileStr == "" {
-				mobileStr = "1"
-			}
-			listUser, err := cygx.GetWxUserOutboundMobile(mobileStr)
-			if err != nil {
-				br.Msg = "手动归类失败!"
-				br.ErrMsg = "获取用户列表失败,Err:" + err.Error()
-				return
-			}
-			for _, v := range listUser {
-				userIdArr = append(userIdArr, v.UserId)
-			}
+			needAddAttendanc := make([]*cygx.CygxActivityAttendanceDetail, 0)
+			if len(list) > 0 {
+				err = cygx.UpdateActivityRoadshowTitle(activityId, keyWord, roadshowId)
+				if err != nil {
+					br.Msg = "手动归类失败"
+					br.ErrMsg = "关联匹配类型失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+					return
+				}
+				for _, v := range list {
+					if v.UserPhone != "" {
+						item := new(cygx.CygxActivityAttendanceDetail)
+						item.ActivityId = activityId
+						item.RealName = v.UserName
+						item.Mobile = v.UserPhone
+						item.CompanyName = v.Company
+						//item.SellerName = sellerName
+						item.FirstMeetingTime = v.FirstWatchTime
+						item.LastMeetingTime = v.LastWatchTime
+						item.Duration = utils.GetAttendanceDetailSeconds(v.JoinTime)
+						if v.JoinType == 1 {
+							item.MeetingTypeStr = "网络"
+						} else {
+							item.MeetingTypeStr = "电话"
+						}
+						item.MeetingAuthentication = v.AuthInfo
+						if v.DataType == 1 {
+							item.MeetingStatusStr = "直播"
+						} else {
+							item.MeetingStatusStr = "回放"
+						}
+						item.Position = v.Occupation
+						item.UseridEntity = v.UseridEntity
+						item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
+						item.CreateTime = time.Now()
+						mobileStr += "'" + v.UserPhone + "'" + ","
+
+						needAddAttendanc = append(needAddAttendanc, item)
+					}
+				}
+				mobileStr = strings.TrimRight(mobileStr, ",")
+				if mobileStr == "" {
+					mobileStr = "1"
+				}
+				listUser, err := cygx.GetWxUserOutboundMobile(mobileStr)
+				if err != nil {
+					br.Msg = "手动归类失败!"
+					br.ErrMsg = "获取用户列表失败,Err:" + err.Error()
+					return
+				}
+				for _, v := range listUser {
+					userIdArr = append(userIdArr, v.UserId)
+				}
 
-			for k, v := range needAddAttendanc {
-				for _, v2 := range listUser {
-					if v2.OutboundMobile == v.Mobile {
-						needAddAttendanc[k].CompanyId = v2.CompanyId
-						needAddAttendanc[k].SellerName = v2.SellerName
-						needAddAttendanc[k].CompanyName = v2.CompanyName
-						needAddAttendanc[k].IsMeetingStr = 1
+				for k, v := range needAddAttendanc {
+					for _, v2 := range listUser {
+						if v2.OutboundMobile == v.Mobile {
+							needAddAttendanc[k].CompanyId = v2.CompanyId
+							needAddAttendanc[k].SellerName = v2.SellerName
+							needAddAttendanc[k].CompanyName = v2.CompanyName
+							needAddAttendanc[k].IsMeetingStr = 1
+						}
 					}
 				}
-			}
-			err = cygx.AddAttendancDetail(needAddAttendanc, activityId, mobileStr)
-			if err != nil {
+				err = cygx.AddAttendancDetail(needAddAttendanc, activityId, mobileStr)
+				if err != nil {
+					br.Msg = "手动归类失败"
+					br.ErrMsg = "手动归类失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+					return
+				}
+				go cygxService.AddCygxActivityRestrictSignupByAdmin(activityId)
+				go cygx.AddCygxActivityMeetDetailLogOnline(needAddAttendanc, activityId)
+				go cygxService.ActivityUserLabelLogAdd(activityId, userIdArr)                 //添加用户活动到会标签到Redis
+				go cygxService.AddctivitySignupDetailListByHand(needAddAttendanc, activityId) //手动匹配进门财经信息
+			} else {
 				br.Msg = "手动归类失败"
-				br.ErrMsg = "手动归类失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				br.ErrMsg = "暂未找到匹配数据!"
 				return
 			}
-			go cygxService.AddCygxActivityRestrictSignupByAdmin(activityId)
-			go cygx.AddCygxActivityMeetDetailLogOnline(needAddAttendanc, activityId)
-			go cygxService.ActivityUserLabelLogAdd(activityId, userIdArr)                 //添加用户活动到会标签到Redis
-			go cygxService.AddctivitySignupDetailListByHand(needAddAttendanc, activityId) //手动匹配进门财经信息
-		} else {
-			br.Msg = "手动归类失败"
-			br.ErrMsg = "暂未找到匹配数据!"
-			return
 		}
 	}
 	//添加操作日志记录

+ 61 - 0
controllers/cygx/industrial_subject.go

@@ -628,3 +628,64 @@ func (this *IndustrialSubjectController) CountDetail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 通过行业获取关联标的列表
+// @Description 通过行业获取关联标的列表接口
+// @Param   KeyWord   query   string  false       "搜索关键词"
+// @Param   ChartPermissionId   query   int  true       "分类ID"
+// @Success Ret=200  {object} cygx.CygxIndustrialSubjectList
+// @router /industrialAndSubject/search [get]
+func (this *IndustrialSubjectController) IndustrialAndSubjectSearch() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var condition string
+	keyWord := this.GetString("KeyWord")
+	chartPermissionId, _ := this.GetInt("ChartPermissionId")
+	if keyWord != "" {
+		condition = ` AND s.subject_name LIKE '%` + keyWord + `%'  `
+	}
+	if chartPermissionId > 0 {
+		condition += ` AND m.chart_permission_id = ` + strconv.Itoa(chartPermissionId)
+	}
+	listSubject, err := cygx.GetIndustrialSubjectListNameByChartId(condition)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	condition = ` AND industry_name LIKE '%` + keyWord + `%'  AND  chart_permission_id = ` + strconv.Itoa(chartPermissionId)
+	listIndustrial, err := cygx.GetIndustrialManagement(condition)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	listResp := make([]*cygx.CygxIndustrialSubjectListRep, 0)
+	for _, v := range listIndustrial {
+		item := new(cygx.CygxIndustrialSubjectListRep)
+		item.IndustryName = v.IndustryName
+		item.IndustrialManagementId = v.IndustrialManagementId
+		item.ShowName = v.IndustryName
+		listResp = append(listResp, item)
+	}
+	for _, v := range listSubject {
+		v.ShowName = v.SubjectName
+		listResp = append(listResp, v)
+	}
+	resp := new(cygx.CygxIndustrialSubjectList)
+	resp.List = listResp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 1 - 0
controllers/cygx/report_article.go

@@ -375,6 +375,7 @@ func (this *ReportArticleController) ReportArticleList() {
 			list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
 		} else {
 			list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
+			list[k].ReportId = v.Id
 		}
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)

+ 66 - 42
controllers/cygx/report_selection.go

@@ -123,6 +123,10 @@ func (this *ReportSelectionController) PreserveAndPublish() {
 		item.IndustrialSubjectId = v.IndustrialSubjectId
 		item.SubjectName = v.IndustrialSubjectName
 		item.IndustrialManagementId = v.IndustrialManagementId
+		item.IndustrialManagementNames = v.IndustrialManagementName
+		if v.IndustrialManagementNames != "" {
+			item.IndustrialManagementNames = v.IndustrialManagementNames
+		}
 		item.OverviewArticleId = v.OverviewArticleId
 		item.IsNew = v.IsNew
 		item.IsShowOverviewArticle = v.IsShowOverviewArticle
@@ -394,23 +398,35 @@ func (this *ReportSelectionController) Detail() {
 			return
 		}
 		for kIndustrial, vIndustrial := range listSon {
+			var industrialNames string
 			//如果报告精选关联的产业被删除了 则做以下处理
-			//if vIndustrial.IndustrialManagementName == "" {
-			industrialNames, err := cygx.GetindustrialManagementNamesBySubjectName(vIndustrial.IndustrialSubjectName, vIndustrial.ChartPermissionId)
-			if err != nil {
-				br.Msg = "获取失败!"
-				br.ErrMsg = "获取删除删除之后的产业失败,Err:" + err.Error() + vIndustrial.IndustrialSubjectId
-				return
+			if vIndustrial.IndustrialSubjectName == "" {
+				industrialNames = vIndustrial.IndustrialManagementNames
+			} else {
+				industrialNames, err = cygx.GetindustrialManagementNamesBySubjectName(vIndustrial.IndustrialSubjectName, vIndustrial.ChartPermissionId)
+				if err != nil {
+					br.Msg = "获取失败!"
+					br.ErrMsg = "获取删除删除之后的产业失败,Err:" + err.Error() + vIndustrial.IndustrialSubjectId
+					return
+				}
 			}
+
 			if vIndustrial.Label != "" {
 				vIndustrial.CompanyLabel = strings.Split(vIndustrial.Label, "{|}")
 			}
 			listSon[kIndustrial].IndustrialManagementName = industrialNames
+			listSon[kIndustrial].IndustrialManagementNames = industrialNames
 			listSon[kIndustrial].OverviewArticleId = articleStockMap[vIndustrial.IndustrialSubjectName]
 			listSon[kIndustrial].OverviewArticleTitle = mapArticle[listSon[kIndustrial].OverviewArticleId]
 			if periods != "" {
 				listSon[kIndustrial].IsNew = 0
 			}
+
+			if vIndustrial.SubjectName == "" {
+				listSon[kIndustrial].ShowName = vIndustrial.IndustrialManagementNames
+			} else {
+				listSon[kIndustrial].ShowName = vIndustrial.SubjectName
+			}
 		}
 		list[k].List = listSon
 		list[k].BodyChartSummary = mapChartLog[v.ChartPermissionName]
@@ -849,41 +865,40 @@ func (this *ReportSelectionController) GetArticle() {
 		br.ErrMsg = "请登录,SysUser Is Empty"
 		return
 	}
-	industrialSubjectId, _ := this.GetInt("IndustrialSubjectId")
-	if industrialSubjectId < 1 {
-		br.Msg = "请输入标的ID"
-		return
-	}
-	detailSubjecj, err := cygx.GetIndustrialSubjectDetailById(industrialSubjectId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-		return
-	}
 	resp := new(cygx.OverviewArticle)
-	if detailSubjecj != nil {
-		var pars []interface{}
-		conditionArticle := `  AND type_name = '综述报告'  AND  stock LIKE ? `
-		subjectName := "%" + detailSubjecj.SubjectName + "%"
-		pars = append(pars, subjectName)
-		articleList, err := cygx.GetCygxArticleList(conditionArticle, pars, 0, 10)
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "GetCygxArticleList,Err:" + err.Error()
+	industrialSubjectId, _ := this.GetInt("IndustrialSubjectId")
+	if industrialSubjectId > 0 {
+		detailSubjecj, err := cygx.GetIndustrialSubjectDetailById(industrialSubjectId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
 			return
 		}
-		//一对一精准匹配
-		for _, v := range articleList {
-			sliceSubjects := strings.Split(v.Stock, "/")
-			if len(sliceSubjects) > 0 {
-				for _, vSubject := range sliceSubjects {
-					sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
-					sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
-					subject := sliceXiahuaxian[0]
-					if subject == detailSubjecj.SubjectName {
-						resp.ArticleId = v.ArticleId
-						resp.Title = v.Title
-						continue
+
+		if detailSubjecj != nil {
+			var pars []interface{}
+			conditionArticle := `  AND type_name = '综述报告'  AND  stock LIKE ? `
+			subjectName := "%" + detailSubjecj.SubjectName + "%"
+			pars = append(pars, subjectName)
+			articleList, err := cygx.GetCygxArticleList(conditionArticle, pars, 0, 10)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "GetCygxArticleList,Err:" + err.Error()
+				return
+			}
+			//一对一精准匹配
+			for _, v := range articleList {
+				sliceSubjects := strings.Split(v.Stock, "/")
+				if len(sliceSubjects) > 0 {
+					for _, vSubject := range sliceSubjects {
+						sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+						sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+						subject := sliceXiahuaxian[0]
+						if subject == detailSubjecj.SubjectName {
+							resp.ArticleId = v.ArticleId
+							resp.Title = v.Title
+							continue
+						}
 					}
 				}
 			}
@@ -1009,9 +1024,13 @@ func (this *ReportSelectionController) History() {
 		br.ErrMsg = "GetCygxReportSelectionSubjectHistoryList,Err:" + err.Error()
 		return
 	}
-	mapSubjectHistory := make(map[string]int)
+	mapSubjectHistory := make(map[string]int)    // 标的点击数量
+	mapIndustrialHistory := make(map[string]int) // 产业点击数量
 	for _, v := range listSelectionSubjectHistory {
 		mapSubjectHistory[v.IndustrialSubjectId]++
+		if v.IndustrialSubjectId == "0" && v.IndustrialManagementId > 0 {
+			mapIndustrialHistory[strconv.Itoa(v.IndustrialManagementId)]++
+		}
 	}
 
 	//排序方式修改
@@ -1021,10 +1040,15 @@ func (this *ReportSelectionController) History() {
 		for _, v2 := range listSelectionLog {
 			if v.ChartPermissionName == v2.PermissionName {
 				item := new(cygx.HistoryReportSelectionLogResp)
-				item.SubjectName = v2.SubjectName
-				item.IndustrialSubjectId = v2.IndustrialSubjectId
+				if (v2.IndustrialSubjectId == "" || v2.IndustrialSubjectId == "0") && v2.IndustrialManagementId != "" {
+					item.SubjectName = v2.IndustrialManagementNames
+					item.Count = mapIndustrialHistory[v2.IndustrialManagementId]
+				} else {
+					item.SubjectName = v2.SubjectName
+					item.IndustrialSubjectId = v2.IndustrialSubjectId
+					item.Count = mapSubjectHistory[v2.IndustrialSubjectId]
+				}
 				item.IsNew = v2.IsNew
-				item.Count = mapSubjectHistory[v2.IndustrialSubjectId]
 				resp.Count += item.Count
 				v.List = append(v.List, item)
 			}

+ 10 - 1
controllers/cygx/user.go

@@ -248,6 +248,7 @@ func (this *UserController) List() {
 	var userIds string
 	var userIdArr []int
 	var companyIds []int
+	var mobilesSlice []string
 	if list != nil {
 		for k, v := range list {
 			if v.RegisterTime != "" {
@@ -286,6 +287,10 @@ func (this *UserController) List() {
 				list[k].CompanyInteractionNum = v.CompanyInteractionNumSeller
 			}
 			companyIds = append(companyIds, v.CompanyId)
+
+			if v.Mobile != "" {
+				mobilesSlice = append(mobilesSlice, v.Mobile)
+			}
 		}
 		userIds = strings.TrimRight(userIds, ",")
 		splitList, err := cygx.GetCygxCompanyUserListSplit(userIds)
@@ -310,6 +315,7 @@ func (this *UserController) List() {
 
 		UserRemindListMap := cygxService.GetCygxUserRemindListMap(userIdArr)
 		mapIsUserMaker := cygxService.GetCompanyProductIsUserMakerByCompanyIds(companyIds) //根据公司ID获取近四周之内有决策人互动的客户
+		userHaveMoveMap := services.GetWxUserHaveMoveMap(mobilesSlice)                     // 处理用户是否移动过按钮回显
 		for k, v := range list {
 			for _, vsplit := range splitList {
 				if vsplit.UserId == v.UserId {
@@ -333,6 +339,9 @@ func (this *UserController) List() {
 			}
 			list[k].IsRemind = UserRemindListMap[int(v.UserId)]
 			list[k].IsUserMaker = mapIsUserMaker[v.CompanyId]
+			if v.Mobile != "" {
+				v.HaveMoveButton = userHaveMoveMap[v.Mobile]
+			}
 		}
 		for k := range list {
 			list[k].InteractionNum = list[k].HistoryNum + list[k].CountNum + list[k].IndustryFllowNum + list[k].DepartmentFollowNum + list[k].KeyWordNum + list[k].OnLineNum + list[k].OfficeNum + list[k].ChartNum + list[k].TripNum + list[k].RoadshowVideoNum + list[k].ActivityVideoNum + list[k].ActivityVoiceNum + list[k].YanxuanspecialNum
@@ -851,7 +860,7 @@ func (this *UserController) TableDetail() {
 	} else if source == 5 {
 
 		if classType == 1 {
-			condition += "  AND a.chart_permission_id  = 31 "
+			condition += "  AND a.chart_permission_id  != 31 "
 		} else {
 			condition += "  AND a.chart_permission_id  = 31 "
 		}

+ 69 - 38
controllers/roadshow/calendar.go

@@ -575,54 +575,73 @@ func (this *CalendarController) Edit() {
 
 	calendarWhereParams["rs_calendar_id"] = req.RsCalendarId
 
-	if req.ActivityType != "" {
-		calendarUpdateParams["activity_type"] = req.ActivityType
-	}
+	//if req.ActivityType != "" {
+	calendarUpdateParams["activity_type"] = req.ActivityType
+	//}
 
-	if req.RoadshowType != "" {
-		calendarUpdateParams["roadshow_type"] = req.RoadshowType
-	}
+	//if req.RoadshowType != "" {
+	calendarUpdateParams["roadshow_type"] = req.RoadshowType
+	//	}
 
-	if req.RoadshowPlatform != "" {
-		calendarUpdateParams["roadshow_platform"] = req.RoadshowPlatform
-	}
+	//if req.RoadshowPlatform != "" {
+	calendarUpdateParams["roadshow_platform"] = req.RoadshowPlatform
+	//}
 
-	if req.CompanyId > 0 {
-		calendarUpdateParams["company_id"] = req.CompanyId
-	}
+	//if req.CompanyId > 0 {
+	calendarUpdateParams["company_id"] = req.CompanyId
+	//}
 
-	if req.CompanyName != "" {
-		calendarUpdateParams["company_name"] = req.CompanyName
-	}
+	//if req.CompanyName != "" {
+	calendarUpdateParams["company_name"] = req.CompanyName
+	//}
 
-	if req.ActivityCategory != "" {
-		calendarUpdateParams["activity_category"] = req.ActivityCategory
-	}
+	//if req.ActivityCategory != "" {
+	calendarUpdateParams["activity_category"] = req.ActivityCategory
+	//	}
 
-	if req.Theme != "" {
-		calendarUpdateParams["theme"] = req.Theme
-	}
+	//if req.Theme != "" {
+	calendarUpdateParams["theme"] = req.Theme
+	//}
 
-	if req.CooperationName != "" {
-		calendarUpdateParams["cooperation_name"] = req.CooperationName
-	}
+	//if req.CooperationName != "" {
+	calendarUpdateParams["cooperation_name"] = req.CooperationName
+	//}
 
-	if req.Province != "" {
-		calendarUpdateParams["province"] = req.Province
-	}
+	//if req.Province != "" {
+	calendarUpdateParams["province"] = req.Province
+	//}
 
-	if req.City != "" {
-		calendarUpdateParams["city"] = req.City
-	}
+	//if req.City != "" {
+	calendarUpdateParams["city"] = req.City
+	//	}
 
-	if req.District != "" {
-		calendarUpdateParams["district"] = req.District
-	}
+	//if req.District != "" {
+	calendarUpdateParams["district"] = req.District
+	//}
 
 	calendarUpdateParams["english_company"] = req.EnglishCompany
 
 	calendarUpdateParams["modify_time"] = time.Now()
 	calendarUpdateParams["title"] = getTitle(req.ActivityType, req.RoadshowType, req.ActivityCategory, req.RoadshowPlatform, req.Province, req.City)
+
+	//如果是权益客户,添加销售跟共享销售的信息
+	roleTypeCode := sysUser.RoleTypeCode
+	//如果是权益销售、权益销售组长、权益管理员 添加的路演信息,做销售与共享销售信息关联查看
+	if req.CompanyId > 0 && req.ActivityType == "路演" && (roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
+		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN) {
+		var productItemRai *company.CompanyProduct
+		productItemRai, err = company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "客户信息有误"
+			br.ErrMsg = "获取客户信息失败, Err: " + err.Error()
+			return
+		}
+		if productItemRai != nil {
+			calendarUpdateParams["seller_id"] = productItemRai.SellerId
+			calendarUpdateParams["share_seller_id"] = productItemRai.ShareSellerId
+		}
+	}
+
 	err = roadshow.UpdateRsCalendar(calendarWhereParams, calendarUpdateParams)
 	if err != nil {
 		br.Msg = "保存失败!"
@@ -719,6 +738,7 @@ func (this *CalendarController) Edit() {
 			calendar := roadshow.RsCalendar{
 				RsCalendarId: req.RsCalendarId,
 				SysUserId:    this.SysUser.AdminId,
+				CompanyName:  req.CompanyName,
 				Title:        getTitle(req.ActivityType, req.RoadshowType, req.ActivityCategory, req.RoadshowPlatform, req.Province, req.City),
 			}
 			researcher := *rsCalendarResearcherItem
@@ -728,6 +748,7 @@ func (this *CalendarController) Edit() {
 			researcher.EndTime = v.EndTime
 			researcher.StartWeek = v.StartWeek
 			researcher.EndWeek = v.EndWeek
+			roadshowService.DeleteSHCalendar(req.RsCalendarResearcherId) //删除老的
 			go roadshowService.CalendarToSH(calendar, researcher)
 
 			if req.EditType == 2 {
@@ -1775,7 +1796,17 @@ func (this *CalendarController) Delete() {
 			br.ErrMsg = "删除失败!UpdateCalendarResearcher:" + err.Error()
 			return
 		}
+
 	}
+	itemApiLog := new(roadshow.RsCalendarApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Remark = "CRM手动删除"
+	itemApiLog.Url = sysUser.RealName
+	itemApiLog.Body = ""
+	itemApiLog.Result = ""
+	itemApiLog.RsCalendarResearcherId = req.RsCalendarResearcherId
+	itemApiLog.RsCalendarId = req.RsCalendarId
+	go roadshow.AddRsCalendarApiLog(itemApiLog)
 	//`status` int(11) DEFAULT '0' COMMENT '1:待接受,2:已接受,3:已拒绝,4:已删除,5:已撤回,6:已结束',
 	//待接受、已接受的情况,需要同步删除上海那边的日程
 	for _, rsCalendarResearcherItem := range rsCalendarResearcherItemList {
@@ -2098,11 +2129,11 @@ func (this *CalendarController) MattersUpdate() {
 		updateParams["matter_content"] = req.MatterContent
 	}
 	req.EditReason = strings.TrimSpace(req.EditReason)
-	if req.EditReason == "" {
-		br.Msg = "请填写修改原因"
-		return
-	}
-	updateParams["edit_reason"] = req.EditReason
+	//if req.EditReason == "" {
+	//	br.Msg = "请填写修改原因"
+	//	return
+	//}
+	//updateParams["edit_reason"] = req.EditReason
 
 	startDateTime := req.StartDate + " " + req.StartTime
 	endDateTime := req.EndDate + " " + req.EndTime

+ 312 - 7
controllers/seal/seal_approval.go

@@ -2,14 +2,24 @@ package seal
 
 import (
 	"encoding/json"
+	"errors"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"github.com/tealeg/xlsx"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/models/contract"
+	sealModels "hongze/hz_crm_api/models/seal"
 	"hongze/hz_crm_api/models/seal/request"
 	"hongze/hz_crm_api/models/seal/response"
 	"hongze/hz_crm_api/services/seal"
 	"hongze/hz_crm_api/utils"
+	"os"
+	"path/filepath"
+	"strconv"
 	"strings"
+	"time"
 )
 
 // 用印审批管理
@@ -28,6 +38,8 @@ type SealApprovalController struct {
 // @Param   StartTime   	query   string  false	"提交开始时间"
 // @Param   EndTime   		query   string  false	"提交结束时间"
 // @Param   Keyword   		query   string  false	"搜索关键词(客户名称/社会信用码)"
+// @Param   IsExport   		query   bool  	false   "是否导出excel,默认是false"
+// @Param   AffiliatedCompany   query   string  	false   "归属公司"
 // @Success 200 {object} response.SealApprovalListResp
 // @router /getApprovalPageList [get]
 func (this *SealApprovalController) List() {
@@ -55,7 +67,7 @@ func (this *SealApprovalController) List() {
 		currentIndex = 1
 	}
 	startSize = paging.StartIndex(currentIndex, pageSize)
-
+	isExport, _ := this.GetBool("IsExport", false)
 	// 筛选条件
 	condition := ""
 	joinCondition := " AND a.curr_node_id = d.node_id" // contract_approval和contract_approval_record的join条件
@@ -158,6 +170,19 @@ func (this *SealApprovalController) List() {
 		pars = append(pars, keywords, keywords, keywords)
 	}
 
+	// 归属公司
+	affiliatedCompany := this.GetString("AffiliatedCompany")
+	if affiliatedCompany != "" {
+		condition += ` AND c.affiliated_company = ?`
+		pars = append(pars, affiliatedCompany)
+	}
+
+	//导出excel
+	if isExport {
+		ApprovalListExport(this, condition, joinCondition, pars, br)
+		return
+	}
+
 	// 列表
 	listData, listTotal, err := seal.GetSealApprovalPageList(condition, joinCondition, pars, startSize, pageSize, sysUser)
 	if err != nil {
@@ -176,6 +201,242 @@ func (this *SealApprovalController) List() {
 	}
 }
 
+// ApprovalListExport 审批列表导出
+func ApprovalListExport(this *SealApprovalController, condition, joinCondition string, pars []interface{}, br *models.BaseResponse) {
+	list, err := sealModels.GetSealApprovalList(condition, joinCondition, pars)
+	if err != nil {
+		br.Msg = "审批列表获取失败!"
+		br.ErrMsg = "审批列表获取失败!" + err.Error()
+		return
+	}
+	////超级管理员和权益管理员、权益研究员可以下载所有客户,销售组长能下载本组客户,销售只能下载本人名下客户
+	//resp := new(cygx.CanDownload)
+	//adminInfo, errAdmin := system.GetSysUserById(sysUser.AdminId)
+	//if errAdmin != nil {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
+	//	return
+	//}
+	//if adminInfo.Role == "admin" || adminInfo.Role == "researcher" {
+	//	resp.IsCanDownload = true
+	//}
+
+	if len(list) > 0 {
+		// 取出所有列表的关联合同id
+		contractIdSlice := make([]string, 0)
+		contractApprovalIdSlice := make([]string, 0)
+		for i := 0; i < len(list); i++ {
+			contractIdSlice = append(contractIdSlice, strconv.Itoa(list[i].ContractId))
+			contractApprovalIdSlice = append(contractApprovalIdSlice, strconv.Itoa(list[i].ContractApprovalId))
+		}
+
+		// 获取所有关联的合同列表
+		selfContractMap := make(map[int]*contract.ContractList)
+		{
+			if len(contractIdSlice) > 0 {
+				contractIdStr := strings.Join(contractIdSlice, ",")
+				contractList, tempErr := contract.GetContractListByContractIds(contractIdStr)
+				if tempErr != nil {
+					err = errors.New(fmt.Sprint("获取合同失败,Err:"+tempErr.Error(), err))
+					return
+				}
+				for i := 0; i < len(contractList); i++ {
+					selfContractMap[contractList[i].ContractId] = contractList[i]
+				}
+			}
+		}
+
+		selfContractApprovalRecordMap := make(map[int][]*contract.ContractApprovalRecord)
+		{
+			if len(contractApprovalIdSlice) > 0 {
+				contractApprovalIdStr := strings.Join(contractApprovalIdSlice, ",")
+				contractApprovalList, tempErr := contract.GetContractApprovalRecordListByContractApprovalIds(contractApprovalIdStr)
+				if tempErr != nil {
+					err = errors.New(fmt.Sprint("获取合同审批记录失败,Err:"+tempErr.Error(), err))
+					return
+				}
+				for i := 0; i < len(contractApprovalList); i++ {
+					selfContractApprovalRecordMap[contractApprovalList[i].ContractApprovalId] = append(selfContractApprovalRecordMap[contractApprovalList[i].ContractApprovalId], contractApprovalList[i])
+				}
+			}
+		}
+
+		for i, v := range list {
+			// 合同编码
+			if selfContract, has := selfContractMap[v.ContractId]; has {
+				list[i].ContractCode = selfContract.ContractCode
+			}
+
+			// 审批人和抄送人
+			if recordList, ok := selfContractApprovalRecordMap[v.ContractApprovalId]; ok {
+				keySort := make([]int, 0)
+				flowNodeMap := make(map[int][]contract.ContractApprovalRecord, 0)
+				for _, approvalRecord := range recordList {
+					if tmpFlowNodeList, ok := flowNodeMap[approvalRecord.NodeId]; ok {
+						flowNodeMap[approvalRecord.NodeId] = append(tmpFlowNodeList, *approvalRecord)
+					} else {
+						tmpFlowNodeList := make([]contract.ContractApprovalRecord, 1)
+						tmpFlowNodeList[0] = *approvalRecord
+						flowNodeMap[approvalRecord.NodeId] = tmpFlowNodeList
+
+						keySort = append(keySort, approvalRecord.NodeId)
+					}
+				}
+				approversList := make([][]string, 0)
+				ccList := make([][]string, 0)
+				for _, key := range keySort {
+					approver := make([]string, 0)
+					cc := make([]string, 0)
+					if node, ok := flowNodeMap[key]; ok {
+						for _, vv := range node {
+							if vv.NodeType == "check" {
+								approver = append(approver, vv.ApproveUserName)
+							} else if vv.NodeType == "cc" {
+								cc = append(cc, vv.ApproveUserName)
+							}
+						}
+						if len(approver) > 0 {
+							approversList = append(approversList, approver)
+						}
+						if len(cc) > 0 {
+							ccList = append(ccList, cc)
+						}
+					}
+				}
+				if len(approversList) > 0 {
+					list[i].FirstLevelApprovers = strings.Join(approversList[0], ",")
+				}
+				if len(ccList) > 0 {
+					list[i].FirstLevelCC = strings.Join(ccList[0], ",")
+				}
+				if len(approversList) > 1 {
+					list[i].SecondLevelApprovers = strings.Join(approversList[1], ",")
+				}
+				if len(ccList) > 1 {
+					list[i].SecondLevelCC = strings.Join(ccList[1], ",")
+				}
+				if len(approversList) > 2 {
+					list[i].ThirdLevelApprovers = strings.Join(approversList[2], ",")
+				}
+				if len(ccList) > 2 {
+					list[i].ThirdLevelCC = strings.Join(ccList[2], ",")
+				}
+			}
+		}
+	}
+	//创建excel
+	dir, err := os.Executable()
+	exPath := filepath.Dir(dir)
+	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	xlsxFile := xlsx.NewFile()
+	if err != nil {
+		br.Msg = "生成文件失败"
+		br.ErrMsg = "生成文件失败"
+		return
+	}
+	style := xlsx.NewStyle()
+	alignment := xlsx.Alignment{
+		Horizontal: "center",
+		Vertical:   "center",
+		WrapText:   true,
+	}
+	style.Alignment = alignment
+	style.ApplyAlignment = true
+
+	sheetName := "审批列表"
+	sheet, err := xlsxFile.AddSheet(sheetName)
+	if err != nil {
+		br.Msg = "新增Sheet失败"
+		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+		return
+	}
+	//标头
+	rowTitle := sheet.AddRow()
+	cellA := rowTitle.AddCell()
+	cellA.Value = "归属公司"
+	cellB := rowTitle.AddCell()
+	cellB.Value = "客户名称"
+	cellC := rowTitle.AddCell()
+	cellC.Value = "社会信用码"
+	cellD := rowTitle.AddCell()
+	cellD.Value = "用印用途"
+	cellE := rowTitle.AddCell()
+	cellE.Value = "合同编号"
+	cellF := rowTitle.AddCell()
+	cellF.Value = "合同类型"
+	cellG := rowTitle.AddCell()
+	cellG.Value = "加盖印章"
+	cellH := rowTitle.AddCell()
+	cellH.Value = "所属销售"
+	cellI := rowTitle.AddCell()
+	cellI.Value = "提交时间"
+	cellJ := rowTitle.AddCell()
+	cellJ.Value = "用印状态"
+	cellK := rowTitle.AddCell()
+	cellK.Value = "一级审批人"
+	cellL := rowTitle.AddCell()
+	cellL.Value = "一级抄送人"
+	cellM := rowTitle.AddCell()
+	cellM.Value = "二级审批人"
+	cellN := rowTitle.AddCell()
+	cellN.Value = "二级抄送人"
+	cellO := rowTitle.AddCell()
+	cellO.Value = "三级审批人"
+	cellP := rowTitle.AddCell()
+	cellP.Value = "三级抄送人"
+
+	for _, v := range list {
+		row := sheet.AddRow()
+		cellA := row.AddCell()
+		cellA.Value = v.AffiliatedCompany
+		cellB := row.AddCell()
+		cellB.Value = v.CompanyName
+		cellC := row.AddCell()
+		cellC.Value = v.CreditCode
+		cellD := row.AddCell()
+		cellD.Value = v.Use
+		cellE := row.AddCell()
+		cellE.Value = v.ContractCode
+		cellF := row.AddCell()
+		cellF.Value = v.ContractType
+		cellG := row.AddCell()
+		cellG.Value = v.SealType
+		cellH := row.AddCell()
+		cellH.Value = v.ApplyUserName
+		cellI := row.AddCell()
+		cellI.Value = v.CreateTime.Format(utils.FormatDateTime)
+		cellJ := row.AddCell()
+		cellJ.Value = v.Status
+		cellK := row.AddCell()
+		cellK.Value = v.FirstLevelApprovers
+		cellL := row.AddCell()
+		cellL.Value = v.FirstLevelCC
+		cellM := row.AddCell()
+		cellM.Value = v.SecondLevelApprovers
+		cellN := row.AddCell()
+		cellN.Value = v.SecondLevelCC
+		cellO := row.AddCell()
+		cellO.Value = v.ThirdLevelApprovers
+		cellP := row.AddCell()
+		cellP.Value = v.ThirdLevelCC
+	}
+
+	err = xlsxFile.Save(downLoadnFilePath)
+	if err != nil {
+		br.Msg = "保存文件失败"
+		br.ErrMsg = "保存文件失败"
+		return
+	}
+	downloadFileName := "用印审批列表" + time.Now().Format("2006.01.02")+ ".xlsx"
+	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
+	defer func() {
+		os.Remove(downLoadnFilePath)
+	}()
+	br.Success = true
+	br.Ret = 200
+	br.IsAddLog = true
+}
+
 // 用印申请
 // @Title 用印申请
 // @Description 用印申请
@@ -204,12 +465,13 @@ func (this *SealApprovalController) Apply() {
 		return
 	}
 	reqVerify := utils.Rules{
-		"Use":         {utils.NotEmpty()},
-		"CompanyName": {utils.NotEmpty()},
-		"CreditCode":  {utils.NotEmpty()},
-		"ServiceType": {utils.NotEmpty()},
-		"SealType":    {utils.NotEmpty()},
-		"FileUrls":    {utils.NotEmpty()},
+		"Use":               {utils.NotEmpty()},
+		"CompanyName":       {utils.NotEmpty()},
+		"CreditCode":        {utils.NotEmpty()},
+		"ServiceType":       {utils.NotEmpty()},
+		"SealType":          {utils.NotEmpty()},
+		"FileUrls":          {utils.NotEmpty()},
+		"AffiliatedCompany": {utils.NotEmpty()},
 	}
 
 	err = utils.Verify(req, reqVerify, utils.LANG_CN)
@@ -294,6 +556,11 @@ func (this *SealApprovalController) Edit() {
 		br.ErrMsg = "合同附件不能为空"
 		return
 	}
+	if req.AffiliatedCompany == "" {
+		br.Msg = "归属公司不能为空"
+		br.ErrMsg = "归属公司不能为空"
+		return
+	}
 
 	// 编辑用印
 	err = seal.EditApply(this.SysUser, req)
@@ -370,6 +637,11 @@ func (this *SealApprovalController) VerifierEdit() {
 		br.ErrMsg = "合同附件不能为空"
 		return
 	}
+	if req.AffiliatedCompany == "" {
+		br.Msg = "归属公司不能为空"
+		br.ErrMsg = "归属公司不能为空"
+		return
+	}
 
 	// 审批者编辑
 	err = seal.VerifierEditApply(this.SysUser, req)
@@ -693,3 +965,36 @@ func (this *SealApprovalController) OperationList() {
 		List: list,
 	}
 }
+
+// 关联公司列表
+// @Title 关联公司列表
+// @Description 关联公司列表
+// @Success 200 {object} response.SealApprovalListResp
+// @router /getAffiliatedCompany [get]
+func (this *SealApprovalController) AffiliatedCompanyList() {
+	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
+	}
+	crmConfig, err := company.GetConfigDetailByCode("affiliated_company")
+	if err != nil {
+		br.Msg = "获取配置失败"
+		br.ErrMsg = "获取配置失败"
+		br.IsSendEmail = false
+		return
+	}
+	list := strings.Split(crmConfig.ConfigValue, ",")
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+}

+ 22 - 3
controllers/statistic_report.go

@@ -5737,9 +5737,9 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		pars = append(pars, kw)
 	}
 	if sellerIdstr != "" {
-		sellerIds := strings.Split(sellerIdstr, ",")
-		cond += ` AND (c.seller_id in ? OR d.seller_id in ?)`
-		pars = append(pars, sellerIds, sellerIds)
+		//sellerIds := strings.Split(sellerIdstr, ",")
+		cond += ` AND (c.seller_id in (` +sellerIdstr+ `) OR d.seller_id in  (` +sellerIdstr+ `))`
+		//pars = append(pars, sellerIds, sellerIds)
 	}
 	// 套餐筛选
 	if serviceType != "" {
@@ -5765,6 +5765,10 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		depId = 5
 	}
 
+	dshiAdminId := 13
+	if utils.RunMode == "debug" {
+		dshiAdminId = 233
+	}
 	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
 		sellerIdsList, err := system.GetSellerIdsByDepId(depId)
 		if err != nil {
@@ -5773,6 +5777,21 @@ func (this *StatisticReportController) InvoicePaymentList() {
 			return
 		}
 		cond += ` AND (c.seller_id IN (` + strings.Join(sellerIdsList, ",") + `) OR d.seller_id IN (` + strings.Join(sellerIdsList, ",") + `))`
+	} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP && sysUser.AdminId == dshiAdminId {
+		groupTeamSellerList, err := system.GetSysUserByParentIdGroupId(5)
+		if err != nil {
+			br.Msg = "获取销售失败"
+			br.ErrMsg = "获取销售失败,Err:" + err.Error()
+			return
+		}
+		sellerIdsList := ""
+		for _, v := range groupTeamSellerList {
+			sellerIdsList += strconv.Itoa(v.AdminId) + ","
+		}
+		sellerIdsList = strings.TrimRight(sellerIdsList, ",")
+
+		cond += ` AND (c.seller_id IN (` + sellerIdsList + `) OR d.seller_id IN (` + sellerIdsList + `))`
+		pars = append(pars)
 	} else if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
 		cond += ` AND (c.seller_id=? OR d.seller_id=?)`
 		pars = append(pars, sysUser.AdminId, sysUser.AdminId)

+ 1 - 0
models/company/company_user.go

@@ -75,6 +75,7 @@ type CompanyUser struct {
 	MfyxInteractionNum       int       `description:"互动量"`
 	MfyxIsBinding            bool      `description:"买方研选是否绑定"`
 	MfyxBindingTime          string    `description:"买方研选绑定时间"`
+	HaveMoveButton           bool      `description:"是否移动过"`
 }
 
 type CompanyUserListResp struct {

+ 65 - 0
models/company/wx_user_move_log.go

@@ -0,0 +1,65 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
+	"time"
+)
+
+// WxUserOpLog 联系人操作日志表
+type WxUserMoveLog struct {
+	Id              int       `orm:"column(id);pk"`
+	UserId          int       `description:"联系人id"`
+	RealName        string    `description:"联系人姓名"`
+	Mobile          string    `description:"当前手机号"`
+	Email           string    `description:"当前邮箱"`
+	CompanyId       int       `description:"当前客户id"`
+	CompanyName     string    `description:"当前客户名称"`
+	SysUserId       int       `description:"操作人ID"`
+	SysUserRealName string    `description:"操作人姓名"`
+	CompanyIdMove   int       `description:"移动后客户id"`
+	CompanyNameMove string    `description:"移动后客户名称"`
+	CreateTime      time.Time `description:"日志创建时间"`
+}
+
+// AddWxUserOpLog 联系人移动日志记录
+func AddWxUserMoveLog(item *WxUserMoveLog) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// 列表
+func GetWxUserMoveLogListmByMobiles(mobiles []string) (items []*WxUserMoveLog, err error) {
+	lenarr := len(mobiles)
+	if lenarr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT mobile FROM wx_user_move_log   WHERE  mobile	 IN (` + utils.GetOrmInReplace(lenarr) + `)  GROUP BY mobile   `
+	_, err = o.Raw(sql, mobiles).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetWxUserMoveLogListmByMobile(mobile string) (items []*WxUserMoveLog, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM wx_user_move_log   WHERE  mobile	 = ?  ORDER BY   id  ASC    `
+	_, err = o.Raw(sql, mobile).QueryRows(&items)
+	return
+}
+
+type WxUserMoveLogResp struct {
+	UserName        string `description:"联系人姓名"`
+	Mobile          string `description:"手机号"`
+	Email           string `description:"邮箱地址"`
+	CompanyId       int    `description:"当前客户id"`
+	CompanyName     string `description:"当前客户名称"`
+	CompanyIdMove   int    `description:"移动后客户id"`
+	CompanyNameMove string `description:"移动后客户名称"`
+	CreateTime      string `description:"日志创建时间"`
+}
+
+type WxUserMoveLogListResp struct {
+	List []*WxUserMoveLogResp
+}

+ 28 - 0
models/cygx/activity.go

@@ -130,6 +130,7 @@ type ActivityDetail struct {
 	Theme                     string `description:"主题"`
 	Expert                    string `description:"专家"`
 	ActivityName              string `description:"活动名称"`
+	ActivityNameTask          string `description:"活动名称定时任务同步的时候使用"`
 	OnlineParticipation       string `description:"网络参会"`
 	ReportLink                string `description:"报告链接"`
 	City                      string `description:"城市"`
@@ -732,3 +733,30 @@ func UpdateCygxActivityMomentsImg(momentsImg string, activityId int) (err error)
 	_, err = o.Raw(sql, momentsImg, activityId).Exec()
 	return
 }
+
+// UpdateCygxActivityyidongActivityId  ,建立与易董的活动关联
+func UpdateCygxActivityyidongActivityId(yidongActivityId string, activityId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` UPDATE cygx_activity SET yidong_activity_id_by_cygx = ?  WHERE activity_id=?   `
+	_, err = o.Raw(sql, yidongActivityId, activityId).Exec()
+	return
+}
+
+// UpdateCygxActivitySubmitMeetingByYidong  ,跟易董返回的用户状态修改活动以提交到会状态
+func UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId string) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE yidong_activity_id=? OR  yidong_activity_id_by_cygx = ? `
+	_, err = o.Raw(sql, yidongActivityId, yidongActivityId).Exec()
+	return
+}
+
+// UpdateCygxActivitySignupisMeetList 批量修改易董的活动,用户已到会
+func UpdateCygxActivitySignupisMeetList(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `UPDATE cygx_activity_signup SET is_meeting=1 WHERE  1= 1 ` + condition
+	_, err = o.Raw(sql, pars).Exec()
+	return
+}

+ 13 - 8
models/cygx/activity_attendance_detail.go

@@ -97,11 +97,16 @@ func AddAttendancDetail(items []*CygxActivityAttendanceDetail, activityId int, m
 		return
 	}
 	//插入提交信息
-	for _, v := range items {
-		_, err = to.Insert(v)
-		if err != nil {
-			return
-		}
+	//for _, v := range items {
+	//	_, err = to.Insert(v)
+	//	if err != nil {
+	//		return
+	//	}
+	//}
+
+	_, err = o.InsertMulti(len(items), items)
+	if err != nil {
+		return err
 	}
 	return
 }
@@ -246,10 +251,10 @@ type RoadshowDataTitleResp struct {
 	ActivityId int    `description:"活动ID"`
 }
 
-func GetRoadshowDataTitleList(title string) (list []*RoadshowDataTitle, err error) {
+func GetRoadshowDataTitleList(startTime, endTime, title string) (list []*RoadshowDataTitle, err error) {
 	o := orm.NewOrmUsingDB("comein_data")
-	sql := `SELECT roadshow_title, roadshow_begin_time as activity_time  FROM roadshow_data WHERE roadshow_title LIKE '%` + title + `%'  GROUP BY  roadshow_id `
-	_, err = o.Raw(sql).QueryRows(&list)
+	sql := `SELECT roadshow_title, roadshow_begin_time as activity_time  FROM roadshow_data WHERE  roadshow_begin_time > ? AND  roadshow_end_time < ?   AND roadshow_title LIKE '%` + title + `%'  GROUP BY  roadshow_id `
+	_, err = o.Raw(sql, startTime, endTime).QueryRows(&list)
 	return
 }
 

+ 35 - 0
models/cygx/activity_signup_detail.go

@@ -121,3 +121,38 @@ func UpdateActivitySignupDetailMulti(items []*CygxActivitySignupDetail) (err err
 	}
 	return
 }
+
+// UpdateActivitySignupDetailMultiByYiDong 易董批量修改用户报名信息且报名的人
+func UpdateActivitySignupDetailMultiByYiDong(items []*CygxActivitySignupDetail) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	p, err := o.Raw(` UPDATE cygx_activity_signup_detail SET 
+							first_meeting_time = ?,
+							last_meeting_time = ?,
+							meeting_status_str = ?,
+							position = ?,
+							real_name = ?,
+							duration = ?,
+							is_meeting = ?
+							WHERE mobile = ? AND activity_id = ? `).Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+	for _, v := range items {
+		_, err = p.Exec(
+			v.FirstMeetingTime,
+			v.LastMeetingTime,
+			v.MeetingStatusStr,
+			v.Position,
+			v.RealName,
+			v.Duration,
+			v.IsMeeting,
+			v.Mobile, v.ActivityId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 1 - 0
models/cygx/cygx_user.go

@@ -52,6 +52,7 @@ type CygxCompanyUser struct {
 	IsRemind                    bool   `description:"是否添加互动提醒"`
 	IsSubscribeCygx             int    `description:"是否关注了查研观向微信公众号: 0-未关注; 1-已关注"`
 	IsUserMaker                 int    `description:"近四周之内是否包含决策人互动过 ,0否,1是"`
+	HaveMoveButton              bool   `description:"是否移动过"`
 }
 
 type CompanyUserListResp struct {

+ 1 - 23
models/cygx/cygx_user_company.go

@@ -840,7 +840,7 @@ func GetCygxRoadshowByCompanyList(condition string, startSize, pageSize int) (it
 func GetCompanyInteractionTableCountBytime(companyId int, startDate, endDate string) (item *GetUserInteractionTableCountResp, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = ? AND h.is_del = 0  	AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS history_num,
+			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = ? AND h.is_del = 0  	AND h.create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS history_num,
 			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.company_id = ?  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS count_num,
 			( SELECT COUNT( 1 ) FROM cygx_chart_collect AS h WHERE h.company_id = ?  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS chart_num,
 			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.company_id = ? AND h.type = 1  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS industry_fllow_num,
@@ -856,28 +856,6 @@ func GetCompanyInteractionTableCountBytime(companyId int, startDate, endDate str
 	return
 }
 
-// 根据时间获取机构互动总数统计
-func GetCompanyInteractionTableCountBytimeold(companyId int, startDate, endDate string) (item *GetUserInteractionTableCountResp, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = u.company_id AND h.is_del = 0  	AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS history_num,
-			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.company_id = u.company_id  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS count_num,
-			( SELECT COUNT( 1 ) FROM cygx_chart_collect AS h WHERE h.company_id = u.company_id  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS chart_num,
-			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.company_id = u.company_id AND h.type = 1  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS industry_fllow_num,
-			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.company_id = u.company_id  AND h.type = 1 AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS department_follow_num,
-			( SELECT COUNT( 1 ) FROM cygx_search_key_word AS h WHERE h.company_id = u.company_id AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS key_word_num,
-			( SELECT 	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.company_id = u.company_id  
-					 AND t.activity_type=1 AND h.do_fail_type = 0 AND a.activity_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS on_line_num,
-			( SELECT  	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.company_id = u.company_id  
-					 AND t.activity_type = 0 AND h.do_fail_type = 0  AND a.activity_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS office_num
-		FROM
-			company  as u
-		WHERE
-			u.company_id = ?`
-	err = o.Raw(sql, companyId).QueryRow(&item)
-	return
-}
-
 // 机构阅读记录列表
 func GetCygxArticleHistoryRecordByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")

+ 1 - 0
models/cygx/industrial_subject.go

@@ -230,6 +230,7 @@ type CygxIndustrialSubjectListRep struct {
 	IndustrialManagementId int    `description:"产业id"`
 	SubjectName            string `description:"标的名称"`
 	IndustryName           string `description:"分析师名称"`
+	ShowName               string `description:"产业与标的展示名称"`
 }
 
 type CygxIndustrialSubjectList struct {

+ 12 - 1
models/cygx/report_article.go

@@ -32,6 +32,7 @@ type CygxReportArticleID struct {
 }
 
 type CygxReportArticle struct {
+	Id                int    `description:"主键ID"`
 	ReportId          int    `description:"报告id"`
 	ArticleId         int    `description:"文章id"`
 	Title             string `description:"标题"`
@@ -1045,7 +1046,17 @@ WHERE
 // 列表
 func GetArticleRoadshowEssenceList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResearchSummaryRep, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
-	sql := `SELECT *,
+	sql := `SELECT 
+    			article_id,
+				title,
+				department,
+				abstract,
+				publish_status,
+				publish_date,
+				last_updated_time,
+				periods,
+				have_publish,
+				visible_range,
 				(SELECT COUNT(1) FROM cygx_article_history_record AS h WHERE h.article_id=art.article_id) AS pv,
         		(SELECT COUNT(DISTINCT user_id) FROM cygx_article_history_record AS h WHERE h.article_id=art.article_id) AS uv
 				FROM cygx_article as art WHERE 1= 1 `

+ 55 - 51
models/cygx/report_selection_log.go

@@ -6,18 +6,19 @@ import (
 )
 
 type CygxReportSelectionLog struct {
-	ArticleSunId           int       `orm:"column(article_sun_id);pk"description:"子级报告id"`
-	ArticleId              int       `description:"父级报告Id"`
-	ChartPermissionId      int       `description:"行业ID"`
-	CreateTime             time.Time `description:"创建时间"`
-	Body                   string    `description:"内容"`
-	IndustrialSubjectId    string    `description:"标的ID"`
-	SubjectName            string    `description:"标的名称"`
-	IndustrialManagementId string    `description:"产业资源包Id  多个用 , 隔开"`
-	CompanyLabel           string    `description:"公司标签多个用{|}隔开"`
-	OverviewArticleId      int       `description:"关联的综述报告ID"`
-	IsNew                  int       `description:"是否为New标签"`
-	IsShowOverviewArticle  int       `description:"是否展示综述报告 1展示,0隐藏"`
+	ArticleSunId              int       `orm:"column(article_sun_id);pk"description:"子级报告id"`
+	ArticleId                 int       `description:"父级报告Id"`
+	ChartPermissionId         int       `description:"行业ID"`
+	CreateTime                time.Time `description:"创建时间"`
+	Body                      string    `description:"内容"`
+	IndustrialSubjectId       string    `description:"标的ID"`
+	SubjectName               string    `description:"标的名称"`
+	IndustrialManagementId    string    `description:"产业资源包Id  多个用 , 隔开"`
+	IndustrialManagementNames string    `description:"产业资源包名称  多个用 , 隔开"`
+	CompanyLabel              string    `description:"公司标签多个用{|}隔开"`
+	OverviewArticleId         int       `description:"关联的综述报告ID"`
+	IsNew                     int       `description:"是否为New标签"`
+	IsShowOverviewArticle     int       `description:"是否展示综述报告 1展示,0隐藏"`
 }
 
 type CygxReportSelectionLogRep struct {
@@ -31,35 +32,38 @@ type CygxReportSelectionLogRep struct {
 }
 
 type AddCygxReportSelectionLog struct {
-	ChartPermissionId        int      `description:"行业ID"`
-	IndustrialSubjectId      string   `description:"标的ID"`
-	SubjectName              string   `description:"标的名称"`
-	IndustrialSubjectName    string   `description:"标的ID"`
-	Body                     string   `description:"内容"`
-	IndustrialManagementId   string   `description:"产业资源包Id  多个用 , 隔开"`
-	IndustrialManagementName string   `description:"产业资源包Id  多个用 , 隔开"`
-	CompanyLabel             []string `description:"公司标签"`
-	Label                    string   `description:"公司标签"`
-	OverviewArticleId        int      `description:"综述报告Id"`
-	IsNew                    int      `description:"是否为New标签"`
-	IsShowOverviewArticle    int      `description:"是否展示综述报告 1展示,0隐藏"`
+	ChartPermissionId         int      `description:"行业ID"`
+	IndustrialSubjectId       string   `description:"标的ID"`
+	SubjectName               string   `description:"标的名称"`
+	IndustrialSubjectName     string   `description:"标的ID"`
+	Body                      string   `description:"内容"`
+	IndustrialManagementId    string   `description:"产业资源包Id  多个用 , 隔开"`
+	IndustrialManagementName  string   `description:"产业资源包Id  多个用 , 隔开"`
+	IndustrialManagementNames string   `description:"产业资源包Id  多个用 , 隔开"`
+	CompanyLabel              []string `description:"公司标签"`
+	Label                     string   `description:"公司标签"`
+	OverviewArticleId         int      `description:"综述报告Id"`
+	IsNew                     int      `description:"是否为New标签"`
+	IsShowOverviewArticle     int      `description:"是否展示综述报告 1展示,0隐藏"`
 }
 
 type CygxReportSelectionLogResp struct {
-	ChartPermissionId        int      `description:"行业ID"`
-	IndustrialSubjectId      string   `description:"标的ID"`
-	SubjectName              string   `description:"标的名称"`
-	IndustrialSubjectName    string   `description:"标的ID"`
-	Body                     string   `description:"内容"`
-	IndustrialManagementId   string   `description:"产业资源包Id  多个用 , 隔开"`
-	IndustrialManagementName string   `description:"产业资源包Id  多个用 , 隔开"`
-	CompanyLabel             []string `description:"公司标签"`
-	Label                    string   `description:"公司标签"`
-	OverviewArticleId        int      `description:"综述报告Id"`
-	OverviewArticleTitle     string   `description:"综述报告标题"`
-	IsNew                    int      `description:"是否为New标签"`
-	IsShowOverviewArticle    int      `description:"是否展示综述报告 1展示,0隐藏"`
-	ChartPermissionSort      int      `description:"品种排序"`
+	ChartPermissionId         int      `description:"行业ID"`
+	IndustrialSubjectId       string   `description:"标的ID"`
+	SubjectName               string   `description:"标的名称"`
+	ShowName                  string   `description:"产业与标的展示名称"`
+	IndustrialSubjectName     string   `description:"标的ID"`
+	Body                      string   `description:"内容"`
+	IndustrialManagementId    string   `description:"产业资源包Id  多个用 , 隔开"`
+	IndustrialManagementName  string   `description:"产业资源包Id  多个用 , 隔开"`
+	IndustrialManagementNames string   `description:"产业资源包Id  多个用 , 隔开"`
+	CompanyLabel              []string `description:"公司标签"`
+	Label                     string   `description:"公司标签"`
+	OverviewArticleId         int      `description:"综述报告Id"`
+	OverviewArticleTitle      string   `description:"综述报告标题"`
+	IsNew                     int      `description:"是否为New标签"`
+	IsShowOverviewArticle     int      `description:"是否展示综述报告 1展示,0隐藏"`
+	ChartPermissionSort       int      `description:"品种排序"`
 }
 
 type CygxReportSelectionChart struct {
@@ -92,18 +96,19 @@ func GetCygxReportSelectionSjdpList(articleId int, typeStr string) (items []*Cyg
 }
 
 type CygxReportSelectionLoglist struct {
-	ArticleSunId           int       `description:"子级报告id"`
-	ArticleId              int       `description:"父级报告Id"`
-	ChartPermissionId      int       `description:"行业ID"`
-	PermissionName         string    `description:"行业ID"`
-	CreateTime             time.Time `description:"创建时间"`
-	Body                   string    `description:"内容"`
-	IndustrialSubjectId    string    `description:"标的ID"`
-	IndustrialManagementId string    `description:"产业资源包Id  多个用 , 隔开"`
-	SubjectName            string    `description:"标的名称"`
-	IcoLink                string    `orm:"column(image_url)"description:"图标链接"`
-	OverviewArticleId      int       `description:"关联的综述报告ID"`
-	IsNew                  int       `description:"是否为New标签"`
+	ArticleSunId              int       `description:"子级报告id"`
+	ArticleId                 int       `description:"父级报告Id"`
+	ChartPermissionId         int       `description:"行业ID"`
+	PermissionName            string    `description:"行业ID"`
+	CreateTime                time.Time `description:"创建时间"`
+	Body                      string    `description:"内容"`
+	IndustrialSubjectId       string    `description:"标的ID"`
+	IndustrialManagementId    string    `description:"产业资源包Id  多个用 , 隔开"`
+	IndustrialManagementNames string    `description:"产业资源包名称  多个用 , 隔开"`
+	SubjectName               string    `description:"标的名称"`
+	IcoLink                   string    `orm:"column(image_url)"description:"图标链接"`
+	OverviewArticleId         int       `description:"关联的综述报告ID"`
+	IsNew                     int       `description:"是否为New标签"`
 }
 
 // 列表
@@ -112,7 +117,6 @@ func GetReportSelectionlogListAll(articleId int) (items []*CygxReportSelectionLo
 	sql := `SELECT  l.* 
 			FROM
 			cygx_report_selection_log AS l
-			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = l.industrial_subject_id 
 			WHERE l.article_id = ? `
 	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return

+ 11 - 10
models/cygx/report_selection_subject_history.go

@@ -6,16 +6,17 @@ import (
 )
 
 type CygxReportSelectionSubjectHistory struct {
-	Id                  int       `orm:"column(id);pk"`
-	ArticleId           int       `description:"文章ID"`
-	UserId              int       `description:"用户ID"`
-	CreateTime          time.Time `description:"创建时间"`
-	ModifyTime          time.Time `description:"修改时间"`
-	Mobile              string    `description:"手机号"`
-	Email               string    `description:"邮箱"`
-	CompanyId           int       `description:"公司id"`
-	CompanyName         string    `description:"公司名称"`
-	IndustrialSubjectId string    `description:"标的ID"`
+	Id                     int       `orm:"column(id);pk"`
+	ArticleId              int       `description:"文章ID"`
+	UserId                 int       `description:"用户ID"`
+	CreateTime             time.Time `description:"创建时间"`
+	ModifyTime             time.Time `description:"修改时间"`
+	Mobile                 string    `description:"手机号"`
+	Email                  string    `description:"邮箱"`
+	CompanyId              int       `description:"公司id"`
+	CompanyName            string    `description:"公司名称"`
+	IndustrialSubjectId    string    `description:"标的ID"`
+	IndustrialManagementId int       `description:"产业ID"`
 }
 
 // 列表

+ 2 - 0
models/db.go

@@ -269,6 +269,7 @@ func initCompany() {
 		new(company.CrmConfig),                               // 管理后台基本配置表
 		new(company.CompanyRenewalRecord),                    // 客户续约状态记录表
 		new(company.CompanyHistoryRemark),                    // 客户记录历史记录表
+		new(company.WxUserMoveLog),                           // 客户联系人移动记录日志表
 	)
 }
 
@@ -386,6 +387,7 @@ func initRoadShow() {
 		new(roadshow.RsReportRecord),              //路演统计表
 		new(roadshow.RsCalendarMeetingUser),       //路演参会名单表
 		new(roadshow.RsCalendarMeetingLabelGroup), //路演参会名单关联的标签表
+		new(roadshow.RsCalendarApiLog),            //上海路演三方接口请求记录日志表
 	)
 }
 

+ 35 - 0
models/roadshow/rs_calendar_api_log.go

@@ -0,0 +1,35 @@
+package roadshow
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type RsCalendarApiLog struct {
+	Id                     int       `orm:"column(id);pk"`
+	Url                    string    `description:"链接"`
+	Body                   string    `description:"请求参数"`
+	Result                 string    `description:"返回参数"`
+	CreateTime             time.Time `description:"创建时间"`
+	Remark                 string    `description:"备注说明"`
+	RsCalendarResearcherId int       `description:"表rs_calendar_researcher 主键ID"`
+	RsCalendarId           int       `description:"日历活动id"`
+}
+
+// 添加日志记录
+func AddRsCalendarApiLog(item *RsCalendarApiLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 批量添加
+func AddRsCalendarApiLogList(items []*RsCalendarApiLog) (lastId int64, err error) {
+	lenitems := len(items)
+	if lenitems == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(lenitems, items)
+	return
+}

+ 31 - 29
models/seal/request/seal_approval.go

@@ -2,56 +2,58 @@ package request
 
 // 用印审批申请请求
 type SealApprovalApplyReq struct {
-	ContractId     int      `description:"系统合同id"`
-	Use            string   `description:"用印用途,枚举值:'销售合同','渠道合同','付款通知函','招投标','战略合作协议','代付合同','总对总协议';默认:销售合同"`
-	CompanyName    string   `description:"客户名称,甲方名称,长度32位"`
-	UseCompanyName string   `description:"实际适用方客户名称,长度32位"`
-	CreditCode     string   `description:"社会统一信用代码,长度64位"`
-	ServiceType    string   `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
-	SealType       string   `description:"加盖印章类型,多选,逗号拼接,值:'合同章','公章','法人章'"`
-	Remark         string   `description:"备注,长度255位"`
-	FileUrls       []string `description:"多个文件附件地址"`
-	FileNum        int      `description:"文件份数"`
+	ContractId        int      `description:"系统合同id"`
+	Use               string   `description:"用印用途,枚举值:'销售合同','渠道合同','付款通知函','招投标','战略合作协议','代付合同','总对总协议';默认:销售合同"`
+	CompanyName       string   `description:"客户名称,甲方名称,长度32位"`
+	UseCompanyName    string   `description:"实际适用方客户名称,长度32位"`
+	CreditCode        string   `description:"社会统一信用代码,长度64位"`
+	ServiceType       string   `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
+	SealType          string   `description:"加盖印章类型,多选,逗号拼接,值:'合同章','公章','法人章'"`
+	Remark            string   `description:"备注,长度255位"`
+	FileUrls          []string `description:"多个文件附件地址"`
+	FileNum           int      `description:"文件份数"`
+	AffiliatedCompany string   `description:"归属公司"`
 }
 
 // 用印审批编辑请求
 type SealApprovalEditReq struct {
-	SealId         int      `description:"用印id"`
-	ContractId     int      `description:"系统合同id"`
-	Use            string   `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
-	CompanyName    string   `description:"客户名称,甲方名称,长度32位"`
-	UseCompanyName string   `description:"实际适用方客户名称,长度32位"`
-	CreditCode     string   `description:"社会统一信用代码,长度64位"`
-	ServiceType    string   `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
-	SealType       string   `description:"加盖印章类型,多选,逗号拼接,值:'合同章','公章','法人章'"`
-	Remark         string   `description:"备注,长度255位"`
-	FileUrls       []string `description:"多个文件附件地址"`
-	FileNum        int      `description:"文件份数"`
+	SealId            int      `description:"用印id"`
+	ContractId        int      `description:"系统合同id"`
+	Use               string   `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
+	CompanyName       string   `description:"客户名称,甲方名称,长度32位"`
+	UseCompanyName    string   `description:"实际适用方客户名称,长度32位"`
+	CreditCode        string   `description:"社会统一信用代码,长度64位"`
+	ServiceType       string   `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
+	SealType          string   `description:"加盖印章类型,多选,逗号拼接,值:'合同章','公章','法人章'"`
+	Remark            string   `description:"备注,长度255位"`
+	FileUrls          []string `description:"多个文件附件地址"`
+	FileNum           int      `description:"文件份数"`
+	AffiliatedCompany string   `description:"归属公司"`
 }
 
 // 用印审批撤回请求
 type SealApprovalCancelReq struct {
-	SealId		int		`description:"用印ID"`
+	SealId int `description:"用印ID"`
 }
 
 // 用印审批删除请求
 type SealApprovalDelReq struct {
-	SealId		int		`description:"用印ID"`
+	SealId int `description:"用印ID"`
 }
 
 // 用印审批作废请求
 type SealApprovalInvalidReq struct {
-	SealId		int		`description:"用印ID"`
+	SealId int `description:"用印ID"`
 }
 
 // 用印审批通过请求
 type SealApplyApprovedReq struct {
-	SealId	int		`description:"用印id"`
-	Remark	string 	`description:"备注字段"`
+	SealId int    `description:"用印id"`
+	Remark string `description:"备注字段"`
 }
 
 // 用印审批驳回请求
 type SealApplyRejectReq struct {
-	SealId	int		`description:"用印id"`
-	Remark	string 	`description:"驳回理由"`
-}
+	SealId int    `description:"用印id"`
+	Remark string `description:"驳回理由"`
+}

+ 65 - 1
models/seal/seal.go

@@ -33,6 +33,7 @@ type Seal struct {
 	ModifyTime        time.Time `description:"最近一次修改时间"`
 	CreateTime        time.Time `description:"添加时间"`
 	CheckBackFileTime time.Time `description:"签回用印附件时间"`
+	AffiliatedCompany string    `description:"归属公司"`
 }
 
 var EnumUse = []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议", "代付合同", "总对总协议"}
@@ -193,13 +194,14 @@ type SealApprovalItem struct {
 	InvalidTimeStr       string    `description:"作废时间(字符串)"`
 	CheckBackFileTimeStr string    `description:"签回用印附件时间(字符串)"`
 	ContractCode         string    `description:"合同编码"`
+	AffiliatedCompany    string    `description:"归属公司"`
 }
 
 // GetSealApprovalListByWhere 获取用印审批列表-分页
 func GetSealApprovalListByWhere(condition, joinCondition string, pars []interface{}, startSize, pageSize int) (list []*SealApprovalItem, total int, err error) {
 	o := orm.NewOrm()
 	fields := `a.contract_approval_id,c.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,c.create_time,a.modify_time,a.status approval_status,
-			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url`
+			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url,c.affiliated_company `
 	sql := `SELECT ` + fields + ` from contract_approval a JOIN ( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 and approval_type = "seal" `
 	sql += ` GROUP BY contract_id ) b on a.contract_approval_id=b.max_id
 	JOIN seal c ON c.seal_id = a.contract_id 
@@ -217,3 +219,65 @@ WHERE c.is_delete = 0 AND a.approval_type="seal" `
 
 	return
 }
+
+type SealApprovaExportlItem struct {
+	ContractApprovalId       int `description:"审批单ID"`
+	ContractId               int `description:"合同ID"`
+	ContractApprovalRecordId int `description:"审批流ID"`
+	//ContractCode             string                  `description:"合同编号"`
+	Use            string                  `description:"用印用途,枚举值:'销售合同','渠道合同','付款通知函','招投标','战略合作协议'"`
+	ContractType   string                  `description:"合同类型,枚举值:'新签合同','续约合同','补充协议','代付合同'"`
+	Status         string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回','已签回',默认待审批"`
+	ApproveStatus  string                  `json:"-" description:"审批单状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
+	ApplyContent   string                  `description:"申请内容"`
+	ApplyUserId    int                     `description:"申请人ID"`
+	ApplyUserName  string                  `description:"申请人名称"`
+	ContractDetail string                  `json:"-" description:"提交审批时的合同信息;用印快照"`
+	ContractInfo   contract.ContractDetail `json:"-" description:"提交审批时的合同信息;用印快照"`
+	ApproveRemark  string                  `description:"审核备注"`
+	SealType       string                  `description:"用印类型"`
+	CompanyName    string                  `description:"客户名称"`
+	FileUrl        string                  `description:"合同下载地址"`
+	CurrNodeId     int                     `description:"当前审批节点id"`
+	StartNodeId    int                     `description:"开始审批节点id"`
+	//UserId                   int                     `description:"申请人id"`
+	//UserName                 string                  `description:"申请人名称"`
+	SealId               int       `description:"用印审批ID"`
+	CreateTime           time.Time `description:"发起审批的时间"`
+	ModifyTime           time.Time `description:"最后一次修改的时间"`
+	ApproveTime          time.Time `description:"审批时间"`
+	InvalidTime          time.Time `description:"作废时间"`
+	CheckBackFileUrl     string    `description:"签回附件地址"`
+	CheckBackFileTime    time.Time `description:"签回用印附件时间"`
+	CreditCode           string    `description:"社会信用码"`
+	CreateTimeStr        string    `description:"发起审批的时间(字符串)"`
+	ModifyTimeStr        string    `description:"最后一次修改的时间(字符串)"`
+	ApproveTimeStr       string    `description:"审批时间(字符串)"`
+	InvalidTimeStr       string    `description:"作废时间(字符串)"`
+	CheckBackFileTimeStr string    `description:"签回用印附件时间(字符串)"`
+	ContractCode         string    `description:"合同编码"`
+	AffiliatedCompany    string    `description:"归属公司"`
+	FirstLevelApprovers  string    `description:"一级审批人"`
+	SecondLevelApprovers string    `description:"二级审批人"`
+	ThirdLevelApprovers  string    `description:"三级审批人"`
+	FirstLevelCC         string    `description:"一级抄送人"`
+	SecondLevelCC        string    `description:"二级抄送人"`
+	ThirdLevelCC         string    `description:"三级抄送人"`
+}
+
+// GetSealApprovalList 获取用印审批列表
+func GetSealApprovalList(condition, joinCondition string, pars []interface{}) (list []*SealApprovaExportlItem, err error) {
+	o := orm.NewOrm()
+	fields := `a.contract_approval_id,c.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,c.create_time,a.modify_time,a.status approval_status,
+			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url,c.affiliated_company `
+	sql := `SELECT ` + fields + ` from contract_approval a JOIN ( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 and approval_type = "seal" `
+	sql += ` GROUP BY contract_id ) b on a.contract_approval_id=b.max_id
+	JOIN seal c ON c.seal_id = a.contract_id 
+	JOIN contract_approval_record d on a.contract_approval_id=d.contract_approval_id ` + joinCondition + `
+WHERE c.is_delete = 0 AND a.approval_type="seal" `
+	sql += condition
+	sql += ` group by c.seal_id order by c.create_time desc`
+	_, err = o.Raw(sql, pars).QueryRows(&list)
+
+	return
+}

+ 7 - 0
models/system/sys_group.go

@@ -238,3 +238,10 @@ type RoadshowGroupSellers struct {
 	AdminId   int    `description:"销售ID"`
 	AdminName string `description:"销售名称"`
 }
+
+func GetAllSysGroupByGroupId(groupId int) (items []*SysGroup, err error) {
+	sql := `SELECT * FROM sys_group WHERE parent_id=? OR parent_id = ? ORDER BY sort ASC, create_time ASC`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, groupId, groupId).QueryRows(&items)
+	return
+}

+ 36 - 0
routers/commentsRouter.go

@@ -1708,6 +1708,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialSubjectController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialSubjectController"],
+        beego.ControllerComments{
+            Method: "IndustrialAndSubjectSearch",
+            Router: `/industrialAndSubject/search`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialSubjectController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialSubjectController"],
         beego.ControllerComments{
             Method: "IndustrialSubjectAdd",
@@ -7900,6 +7909,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
+        beego.ControllerComments{
+            Method: "AffiliatedCompanyList",
+            Router: `/getAffiliatedCompany`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
         beego.ControllerComments{
             Method: "List",
@@ -9988,6 +10006,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanySellerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanySellerController"],
+        beego.ControllerComments{
+            Method: "InvoicePaymentCheckList",
+            Router: `/seller/check/invoice_payment/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanySellerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanySellerController"],
         beego.ControllerComments{
             Method: "CheckList",
@@ -10348,6 +10375,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanyUserController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanyUserController"],
+        beego.ControllerComments{
+            Method: "ListMoveLog",
+            Router: `/user/listMoveLog`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanyUserController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:CompanyUserController"],
         beego.ControllerComments{
             Method: "GetOtherProduct",

+ 76 - 0
services/company.go

@@ -8,6 +8,7 @@ import (
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/company_user"
+	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
@@ -2518,3 +2519,78 @@ func GetShareCompanyPermissionButton(roleTypeCode, statuses string, productId in
 	}
 	return
 }
+
+// AddWxUserMoveLog 添加用户移动日志记录
+func AddWxUserMoveLog(wxUser *models.WxUser, adminUser *system.Admin, newCompanyId int) (err error) {
+	if wxUser.CompanyId == newCompanyId {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("添加用户移动日志记录失败,AddWxUserMoveLog "+fmt.Sprint("UserId:", wxUser.UserId, ";err:", err), 3)
+		}
+	}()
+	//获取老的客户信息
+	companyInfoOld, e := company.GetCompanyById(wxUser.CompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyById, Old Err: " + e.Error())
+		return
+	}
+
+	//获取老的客户信息
+	companyInfoNew, e := company.GetCompanyById(newCompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyById, New Err: " + e.Error())
+		return
+	}
+
+	item := new(company.WxUserMoveLog)
+	item.UserId = int(wxUser.UserId)
+	item.RealName = wxUser.RealName
+	item.Mobile = wxUser.Mobile
+	item.Email = wxUser.Email
+	item.CompanyId = wxUser.CompanyId
+	item.CompanyName = companyInfoOld.CompanyName
+	item.CompanyIdMove = companyInfoNew.CompanyId
+	item.CompanyNameMove = companyInfoNew.CompanyName
+	item.SysUserId = adminUser.AdminId
+	item.SysUserRealName = adminUser.RealName
+	item.CreateTime = time.Now()
+	e = company.AddWxUserMoveLog(item)
+	if e != nil {
+		err = errors.New("AddWxUserMoveLog, New Err: " + e.Error())
+		return
+	}
+
+	e = cygx.RemoveCygxUserRemind(int(wxUser.UserId)) //取消个人提醒
+	if e != nil {
+		err = errors.New("RemoveCygxUserRemind, New Err: " + e.Error())
+		return
+	}
+	return
+}
+
+// GetWxUserHaveMoveMap 根据手机号,获取用户是否有过移动的记录
+func GetWxUserHaveMoveMap(mobiles []string) (moveMap map[string]bool) {
+	lenArr := len(mobiles)
+	if lenArr == 0 {
+		return
+	}
+	var err error
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("添加用户移动日志记录失败,GetWxUserHaveMoveMap "+fmt.Sprint("mobiles:", mobiles, ";err:", err), 3)
+		}
+	}()
+
+	listMobileMove, e := company.GetWxUserMoveLogListmByMobiles(mobiles)
+	if e != nil {
+		err = errors.New("GetWxUserMoveLogListmByMobiles Err: " + e.Error())
+		return
+	}
+	moveMap = make(map[string]bool)
+	for _, v := range listMobileMove {
+		moveMap[v.Mobile] = true
+	}
+	return
+}

+ 28 - 1
services/contract/contract.go

@@ -86,6 +86,29 @@ func AddContract(req request.AddContractReq, sellerId, productId int, sellerName
 		err = errors.New(fmt.Sprint("合同编号生成异常,Err:", err))
 		return
 	}
+
+	//权益的新签合同重新定义,如果合同起始时间在第一份新签合同起始日期 1年之内的,仍为新签合同。
+	if productId == utils.COMPANY_PRODUCT_RAI_ID && req.ContractType == "" {
+		//根据社会信用码获取客户信息
+		companyInfo, tmpErr := company.GetCompanyByCreditCode(creditCode)
+		//如果查询异常,且并不是在系统中找不到该社会信用码,那么就异常返回
+		if tmpErr != nil {
+			err = errors.New(fmt.Sprint("根据社会信用码获取客户信息,Err:", tmpErr))
+			return
+		}
+		totalLastYear, tmpErr := GetCompanyContractCountRaiByLastYear(companyInfo.CompanyId, req.StartDate)
+		if tmpErr != nil {
+			err = errors.New(fmt.Sprint("获取第一份新签合同起始日期是否1年之内失败,Err:", tmpErr))
+			return
+		}
+		if totalLastYear > 0 {
+			req.ContractType = "新签合同"
+		} else {
+			req.ContractType = "续约合同"
+		}
+
+	}
+
 	contractInfo := &contract.Contract{
 		ContractCode:         contractCode,
 		SellerId:             sellerId,
@@ -1275,6 +1298,7 @@ func GetServicePermissionMap(serviceList []*contract.ContractServiceAndDetail) (
 			}
 		case 4, 5, 6: //权益大套餐
 			permissionFiccClassifyArr := []string{"权益"}
+			permissionFilterrr := []string{"固收", "路演服务", "研选扣点包", "调研", "专家", "研选订阅"} //不在大套餐中展示的权益权限
 			for _, v := range permissionFiccClassifyArr {
 				items, tmpErr := company.GetPermissionLookItems(2, v)
 				if tmpErr != nil {
@@ -1283,7 +1307,10 @@ func GetServicePermissionMap(serviceList []*contract.ContractServiceAndDetail) (
 				}
 				for _, n := range items {
 					//如果是专家行业,那么 结束当前循环,进入下一循环(产品需求:专家行业不在里面)
-					if n.ChartPermissionId == 29 || n.ChartPermissionId == 31 {
+					//if n.ChartPermissionId == 29 || n.ChartPermissionId == 31 {
+					//	continue
+					//}
+					if utils.InArrayByStr(permissionFilterrr, n.PermissionName) {
 						continue
 					}
 					checkPermissionIdMap[n.ChartPermissionId] = n.ChartPermissionId

+ 14 - 17
services/cygx/activity_special.go

@@ -557,13 +557,21 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 
 // 审批通过的时候专项调研次数更新
 func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyName string) (err error) {
-	userType, packageType, _, _, _ := GetUserType(companyId)
+	//userType, packageType, _, _, _ := GetUserType(companyId)
 	// 获取继承点数
 	//inheritList, e := cygx.GetCygxActivitySpecialInheritPointsByCompanyId(companyId)
 	//if e != nil && e.Error() != utils.ErrNoRow() {
 	//	err = errors.New("GetCygxActivitySpecialInheritPointsByCompanyId, Err: " + e.Error())
 	//}
 	//chartNameMap := map[string]int{utils.YI_YAO_NAME: 0, utils.XIAO_FEI_NAME: 0, utils.KE_JI_NAME: 0, utils.ZHI_ZAO_NAME: 0}
+
+	// 获取合同信息-套餐信息
+	companyContract, e := company.GetCompanyContractById(companyContractId)
+	if e != nil {
+		err = errors.New("GetCompanyContractById, Err: " + e.Error())
+		return
+	}
+	packageType := companyContract.RaiPackageType
 	var items []*cygx.CygxActivitySpecialPermissionPoints
 
 	itemBill := new(cygx.CygxActivitySpecialTripBill)
@@ -573,12 +581,12 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 	itemBill.Source = 2
 	itemBill.DoType = 2
 	itemBill.Way = 3
-	if userType == 2 {
-		packageTypeMap := map[int]int{1: 16, 2: 10}
+	if packageType > 0 {
+		packageTypeMap := map[int]int{1: 16, 2: 12}
 		totalTrip := packageTypeMap[packageType]
 		itemBill.BillDetailed = totalTrip
 		itemBill.Total = strconv.Itoa(itemBill.BillDetailed) + "次"
-		if totalTrip == 10 {
+		if packageType == 2 {
 			itemBill.Content = "45w大套餐转正"
 		} else {
 			itemBill.Content = "70w大套餐转正"
@@ -594,13 +602,6 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 		items = append(items, item)
 
 	} else {
-		//list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
-		//if e != nil && e.Error() != utils.ErrNoRow() {
-		//	err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
-		//}
-		//if len(list) == 0 {
-		//	return
-		//}
 
 		var condition string
 		var pars []interface{}
@@ -612,10 +613,6 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 			err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
 			return
 		}
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = errors.New("GetCygxAllocationCompanyContractPermissionListById, Err: " + e.Error())
-			return
-		}
 
 		if len(list) == 0 {
 			return
@@ -649,12 +646,12 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 		itemBill.Content = "行业升级套餐转正"
 	}
 
-	e := cygx.MultiAddCygxActivitySpecialPermissionPoints(items)
+	e = cygx.MultiAddCygxActivitySpecialPermissionPoints(items)
 	if e != nil {
 		err = errors.New("MultiAddCygxActivitySpecialPermissionPoints, Err:" + e.Error())
 		return
 	}
-	if userType != 2 && len(items) > 0 {
+	if packageType == 0 && len(items) > 0 {
 		var condition string
 		var pars []interface{}
 		pars = make([]interface{}, 0)

+ 369 - 0
services/cygx/yidong.go

@@ -83,6 +83,74 @@ type PersonUser struct {
 	CreatePersonName string `description:"创建人姓名:创建时必填" json:"createPersonName"`
 }
 
+type YidongActivityResult struct {
+	ActivityJoinType               string  `json:"activityJoinType"`               // 活动入会类型,01报名审核后可入会 02预约即可入会 03仅定向邀请人员可入会
+	Banner                         string  `json:"banner"`                         // 宣传图
+	BusinessCardOpen               string  `json:"businessCardOpen"`               // 上传名片是否开启,1是 0否
+	BusinessCardRequired           string  `json:"businessCardRequired"`           // 上传名片是否必填,1是 0否
+	CertificateInformationOpen     string  `json:"certificateInformationOpen"`     // 证件信息是否开启,1是 0否
+	CertificateInformationRequired string  `json:"certificateInformationRequired"` // 证件信息是否必填,1是 0否
+	CompanyCodeOpen                string  `json:"companyCodeOpen"`                // 公司代码是否开启,1是 0否
+	CompanyCodeRequired            string  `json:"companyCodeRequired"`            // 公司代码是否必填,1是 0否
+	CompanyInfo                    string  `json:"companyInfo"`                    // 公司名称
+	CompanyShortNameOpen           string  `json:"companyShortNameOpen"`           // 公司名称是否开启,1是 0否
+	CompanyShortNameRequired       string  `json:"companyShortNameRequired"`       // 公司名称是否必填,1是 0否
+	End                            string  `json:"end"`                            // 活动结束时间
+	ID                             string  `json:"id"`                             // 活动主键id
+	IndustrySwName                 string  `json:"industrySwName"`                 // 行业
+	InviteeOpen                    *string `json:"inviteeOpen"`                    // 邀请机构是否开启,1是 0否
+	InviteeRequired                *string `json:"inviteeRequired"`                // 邀请机构是否必填,1是 0否
+	JobNameOpen                    string  `json:"jobNameOpen"`                    // 职务是否开启,1是 0否
+	JobNameRequired                string  `json:"jobNameRequired"`                // 职务是否必填,1是 0否
+	MailOpen                       string  `json:"mailOpen"`                       // 邮箱是否开启,1是 0否
+	MailRequired                   string  `json:"mailRequired"`                   // 邮箱是否必填,1是 0否
+	PersonNameOpen                 string  `json:"personNameOpen"`                 // 姓名是否开启,1是 0否
+	PersonNameRequired             string  `json:"personNameRequired"`             // 姓名是否必填,1是 0否
+	PersonTelephoneOpen            string  `json:"personTelephoneOpen"`            // 手机号是否开启,1是 0否
+	PersonTelephoneRequired        string  `json:"personTelephoneRequired"`        // 手机号是否必填,1是 0否
+	SignUpEnd                      string  `json:"signUpEnd"`                      // 报名结束时间,适应于报名审核后可入会,为空表示不限制报名时间
+	SignUpStart                    string  `json:"signUpStart"`                    // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
+	Start                          string  `json:"start"`                          // 活动开始时间
+	SyncFlag                       string  `json:"syncFlag"`                       // 同步有效性,同步有效性 1有效,0失效
+	Title                          string  `json:"title"`                          // 活动主题
+	Type                           string  `json:"type"`                           // 路演类型
+	URL                            string  `json:"url"`                            // 活动短链接
+}
+
+type YidongApifoxModal struct {
+	ErrorCode interface{}            `json:"errorCode"`
+	ErrorMsg  interface{}            `json:"errorMsg"`
+	Result    []YidongActivityResult `json:"result"`
+	Success   bool                   `json:"success"`
+	Timestamp int64                  `json:"timestamp"`
+}
+
+type YidongResultuser struct {
+	DeviceType        string `json:"deviceType"`       // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序,0-PSTN
+	Duration          string `json:"duration"`         // 云会议参会时长
+	DurationInteract  string `json:"durationInteract"` // 互动交流参会时长
+	DurationLive      string `json:"durationLive"`     // 直播参会时长
+	DurationReview    string `json:"durationReview"`   // 回看参会时长
+	EndTime           string `json:"endTime"`          // 云会议最后退会时间
+	EndTimeInteract   string `json:"endTimeInteract"`  // 互动交流最后退会时间
+	EndTimeLive       string `json:"endTimeLive"`      // 直播最后退会时间
+	EndTimeReview     string `json:"endTimeReview"`    // 回看最后退会时间
+	ID                string `json:"id"`               // 主键id
+	Mail              string `json:"mail" comment:"电子邮件"`
+	CompanyName       string `json:"company_name" comment:"公司名称"`
+	JobName           string `json:"jobName"`           // 职务
+	MobileCountryCode string `json:"mobileCountryCode"` // 手机号国际区号码
+	PersonName        string `json:"personName"`        // 姓名
+	PersonTelephone   string `json:"personTelephone"`   // 用户手机号
+	StartTime         string `json:"startTime"`         // 云会议最早入会时间
+	StartTimeInteract string `json:"startTimeInteract"` // 互动交流最早入会时间
+	StartTimeLive     string `json:"startTimeLive"`     // 直播最早入会时间
+	StartTimeReview   string `json:"startTimeReview"`   // 回看最早入会时间
+	Status            string `json:"status"`            // 状态,D表示被删除
+	UserID            string `json:"userId,omitempty"`  // 用户id
+	SignUpStatus      string `json:"sign_up_status" comment:"报名状态"`
+}
+
 // CheckYidongActivitySignupTime 校验易董的活动是否可以 添加报名
 func CheckYidongActivitySignupTime(activityInfo *cygx.ActivityDetail) (errstr string) {
 	if activityInfo.YidongSignUpEnd == "0000-00-00 00:00:00" {
@@ -752,3 +820,304 @@ func YiDongUpdateActivityStatus(activityId int) {
 	err = cygx.UpdateCygxActivityTencentConferenceNumber(activityInfo)
 	return
 }
+
+// GetLoginAuthCodeReq 获取登录编码请求体
+type GetYiDongActivityByApiReq struct {
+	MeetingStatus   string `json:"meetingStatus" description:"会议状态必需(0未开始1进行中2已结束)多个逗号分隔"`
+	ConveneStartStr string `json:"conveneStartStr" description:"活动日期范围开始"`
+	ConveneEndStr   string `json:"conveneEndStr" description:"活动日期范围结束"`
+	LastUpdateTime  string `json:"lastUpdateTime" description:"上次同步时间(用于筛选更新时间大于同步时间的活动数据)"`
+}
+
+// 根据条件获取易董建会列表信息
+func GetYiDongActivityListByApi(param *GetYiDongActivityByApiReq) (yiDongResult []YidongActivityResult) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg(fmt.Sprint("根据条件获取易董建会列表信息  GetYiDongActivityListByApi"+err.Error(), param), 2)
+		}
+	}()
+	var token string
+	token, _ = GetYidongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
+	method := "POST"
+	data, e := json.Marshal(param)
+	if e != nil {
+		err = errors.New("data json marshal err: " + e.Error())
+		return
+	}
+
+	payload := strings.NewReader(string(data))
+	client := &http.Client{}
+	req, e := http.NewRequest(method, url, payload)
+	if e != nil {
+		err = errors.New(" http.NewRequest err: " + e.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+
+	res, e := client.Do(req)
+	if e != nil {
+		err = errors.New(" client.Do err: " + e.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *YidongApifoxModal
+	body, e := ioutil.ReadAll(res.Body)
+	if e != nil {
+		err = errors.New("  ioutil.ReadAll: " + e.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(cygx.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go cygx.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		return
+	}
+	if len(ApifoxModal.Result) > 0 {
+		yiDongResult = ApifoxModal.Result
+	} else {
+		yiDongResult = make([]YidongActivityResult, 0)
+	}
+	return
+}
+
+type GetYiDongActivityMeetByActivityIdReq struct {
+	ActivityId string `json:"activityId" description:"活动ID"`
+}
+
+type YidongApifoxModaluser struct {
+	ErrorCode interface{}        `json:"errorCode"`
+	ErrorMsg  interface{}        `json:"errorMsg"`
+	Result    []YidongResultuser `json:"result"`
+	Success   bool               `json:"success"`
+	Timestamp int64              `json:"timestamp"`
+}
+
+// 根据条件获取易董活动ID获取到会信息
+func GetYiDongActivityMeetDataByaAtivityId(ativityId string) (yiDongResult []YidongResultuser) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg(fmt.Sprint("根据条件获取易董建会列表信息  GetYiDongActivityListByApi"+err.Error(), ativityId), 2)
+		}
+	}()
+	var token string
+	token, _ = GetYidongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getAttendPersonList?access_token=" + token
+	method := "POST"
+	param := new(GetYiDongActivityMeetByActivityIdReq)
+	param.ActivityId = ativityId
+	data, e := json.Marshal(param)
+	if e != nil {
+		err = errors.New("data json marshal err: " + e.Error())
+		return
+	}
+
+	payload := strings.NewReader(string(data))
+	client := &http.Client{}
+	req, e := http.NewRequest(method, url, payload)
+	if e != nil {
+		err = errors.New(" http.NewRequest err: " + e.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, e := client.Do(req)
+	if e != nil {
+		err = errors.New(" client.Do err: " + e.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *YidongApifoxModaluser
+	body, e := ioutil.ReadAll(res.Body)
+	if e != nil {
+		err = errors.New(" ioutil.ReadAll err: " + e.Error())
+		return
+	}
+	e = json.Unmarshal(body, &ApifoxModal)
+	if e != nil {
+		err = errors.New(" json.Unmarshal  err: " + e.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(cygx.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go cygx.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		return
+	}
+	if len(ApifoxModal.Result) > 0 {
+		yiDongResult = ApifoxModal.Result
+	} else {
+		yiDongResult = make([]YidongResultuser, 0)
+	}
+	return
+}
+
+// 根据条件获取易董活动ID获取到会信息
+func GetYiDongActivityMeeting(yidongActivityId string, cygxActivityId int) (yiDongResult []YidongResultuser) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg(fmt.Sprint("根据条件获取易董建会列表信息  GetYiDongActivityMeeting"+err.Error(), cygxActivityId), 2)
+		}
+	}()
+
+	//跟易董返回的用户状态修改活动以提交到会状态
+	e := cygx.UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySubmitMeetingByYidong err: " + e.Error())
+		return
+	}
+	meetDataList := GetYiDongActivityMeetDataByaAtivityId(yidongActivityId)
+	var mobiles []string
+	var mobileStr string
+	var mobileStrMeet string
+	mapActivityAttendanceDetail := make(map[string]*cygx.CygxActivityAttendanceDetail)
+	if len(meetDataList) > 0 {
+
+		var itemsUpdate []*cygx.CygxActivitySignupDetail
+		needAddAttendanc := make([]*cygx.CygxActivityAttendanceDetail, 0)
+
+		for _, vresult := range meetDataList {
+			if vresult.PersonTelephone == "" {
+				continue
+			}
+			if vresult.Duration != "" || vresult.DurationReview != "" {
+				mobiles = append(mobiles, vresult.PersonTelephone)
+				var itemDetail = new(cygx.CygxActivitySignupDetail)
+				if vresult.Duration != "" {
+					itemDetail.FirstMeetingTime = vresult.StartTime
+					itemDetail.LastMeetingTime = vresult.EndTime
+					itemDetail.Duration = vresult.Duration
+					itemDetail.MeetingStatusStr = "直播"
+				} else if vresult.DurationReview != "" {
+					itemDetail.FirstMeetingTime = vresult.StartTimeReview
+					itemDetail.LastMeetingTime = vresult.EndTimeReview
+					itemDetail.Duration = vresult.DurationReview
+					itemDetail.MeetingStatusStr = "回放"
+				}
+				itemDetail.Position = vresult.JobName
+				itemDetail.RealName = vresult.PersonName
+
+				itemDetail.Mobile = vresult.PersonTelephone
+				itemDetail.OutboundMobile = vresult.PersonTelephone
+				itemDetail.IsMeeting = 1
+				itemDetail.ActivityId = cygxActivityId
+				mapActivityAttendanceDetail[vresult.PersonTelephone] = new(cygx.CygxActivityAttendanceDetail)
+				mapActivityAttendanceDetail[vresult.PersonTelephone].FirstMeetingTime = vresult.StartTime
+				mapActivityAttendanceDetail[vresult.PersonTelephone].LastMeetingTime = vresult.EndTime
+				mapActivityAttendanceDetail[vresult.PersonTelephone].Duration = utils.GetAttendanceDetailSecondsByYiDong(vresult.Duration)
+				itemsUpdate = append(itemsUpdate, itemDetail)
+			}
+
+			item := new(cygx.CygxActivityAttendanceDetail)
+			item.ActivityId = cygxActivityId
+			item.Mobile = vresult.PersonTelephone
+			if vresult.Duration != "" {
+				if vresult.Duration != "" {
+					item.FirstMeetingTime = vresult.StartTime
+					item.LastMeetingTime = vresult.EndTime
+					item.Duration = vresult.Duration
+					item.MeetingStatusStr = "直播"
+				} else if vresult.DurationReview != "" {
+					item.FirstMeetingTime = vresult.StartTimeReview
+					item.LastMeetingTime = vresult.EndTimeReview
+					item.Duration = vresult.DurationReview
+					item.MeetingStatusStr = "回放"
+				}
+				item.Position = vresult.JobName
+				item.RealName = vresult.PersonName
+
+				item.FirstMeetingTime = vresult.StartTime
+				item.LastMeetingTime = vresult.EndTime
+				item.Duration = vresult.Duration
+				item.IsMeetingStr = 1
+				mobileStrMeet += "'" + vresult.PersonTelephone + "'" + ","
+				item.CreateTime = time.Now()
+				needAddAttendanc = append(needAddAttendanc, item)
+			}
+			mobileStr += "'" + vresult.PersonTelephone + "'" + ","
+
+		}
+		lenmobiles := len(mobiles)
+		if lenmobiles > 0 {
+			var parsYd []interface{}
+			var conditionYd string
+			conditionYd = ` AND mobile  IN (` + utils.GetOrmInReplace(lenmobiles) + `) AND  activity_id=?  `
+			parsYd = append(parsYd, mobiles, cygxActivityId)
+			e = cygx.UpdateCygxActivitySignupisMeetList(conditionYd, parsYd)
+			if e != nil {
+				err = errors.New("UpdateCygxActivitySignupisMeetList err: " + e.Error())
+				return
+			}
+			e = cygx.UpdateActivitySignupDetailMultiByYiDong(itemsUpdate)
+			if e != nil {
+				err = errors.New("UpdateActivitySignupDetailMultiByYiDong err: " + e.Error())
+				return
+			}
+		}
+
+		mobileStr = strings.TrimRight(mobileStr, ",")
+		if mobileStr == "" {
+			mobileStr = "1"
+		}
+		mobileStrMeet = strings.TrimRight(mobileStrMeet, ",")
+		if mobileStrMeet == "" {
+			mobileStrMeet = "1"
+		}
+
+		listUser, e := cygx.GetWxUserOutboundMobile(mobileStr)
+		if e != nil {
+			err = errors.New("GetWxUserOutboundMobile err: " + e.Error())
+			return
+		}
+		for kAdd, vAdd := range needAddAttendanc {
+			for _, v2 := range listUser {
+				if v2.OutboundMobile == vAdd.Mobile || v2.Mobile == vAdd.Mobile {
+					if needAddAttendanc[kAdd].CompanyId <= 1 {
+						needAddAttendanc[kAdd].CompanyId = v2.CompanyId
+						needAddAttendanc[kAdd].SellerName = v2.SellerName
+						needAddAttendanc[kAdd].CompanyName = v2.CompanyName
+						//needAddAttendanc[k].IsMeetingStr = 1
+					}
+				}
+			}
+		}
+
+		//参会记录
+		e = cygx.AddAttendancDetail(needAddAttendanc, cygxActivityId, mobileStrMeet)
+		if e != nil {
+			err = errors.New("AddAttendancDetail err: " + e.Error())
+			return
+		}
+		////处理是否限制报名
+		e = AddCygxActivityRestrictSignupByAdmin(cygxActivityId)
+		if e != nil {
+			err = errors.New("AddCygxActivityRestrictSignupByAdmin err: " + e.Error())
+			return
+		}
+		AddctivitySignupDetailListByHand(needAddAttendanc, cygxActivityId)
+	}
+	return
+}

+ 33 - 4
services/roadshow/calendar.go

@@ -294,6 +294,15 @@ func getCurl(urlStr string, params url.Values, num int) (body []byte, err error)
 		err = errors.New(response.Msg)
 		return
 	}
+
+	itemApiLog := new(roadshow.RsCalendarApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Remark = "get请求上海接口"
+	itemApiLog.Url = getUrl
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(params))
+	itemApiLog.Result = string(body)
+	go roadshow.AddRsCalendarApiLog(itemApiLog)
+
 	return
 }
 
@@ -342,7 +351,13 @@ func postCurl(urlStr string, form url.Values, num int) (body []byte, err error,
 		return
 	}
 	utils.FileLog.Info(fmt.Sprint("post request url:", finalUrl, ";params:", form.Encode(), ";response:", string(body)))
-
+	itemApiLog := new(roadshow.RsCalendarApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Remark = "post请求上海接口"
+	itemApiLog.Url = urlStr
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(form))
+	itemApiLog.Result = string(body)
+	go roadshow.AddRsCalendarApiLog(itemApiLog)
 	//如果是token失效,同时只是第一次请求(没有尝试强制刷新token,那么重新请求)
 	if response.Code == 4001 && num <= 0 {
 		//token失效
@@ -405,7 +420,7 @@ func CalendarToSH(rsCalendar roadshow.RsCalendar, researcher roadshow.RsCalendar
 	endTime := eTime.Format("2006-01-02 15:04")
 
 	// 创建上海路演日程
-	err, errMsg = creatSHCalendar(userInfo.Mobile, researcherInfo.Mobile, rsCalendar.Title, startTime, endTime, 1, researcher.RsCalendarResearcherId)
+	err, errMsg = creatSHCalendar(userInfo.Mobile, researcherInfo.Mobile, rsCalendar.CompanyName+rsCalendar.Title, startTime, endTime, 1, researcher.RsCalendarResearcherId)
 	if err != nil {
 		utils.FileLog.Info("CreatSHCalendar err: " + err.Error())
 		fmt.Println(err)
@@ -568,6 +583,7 @@ func UpdateSHCalendarByMatter(req roadshow.UpdateMattersReq) (err error) {
 	if err != nil {
 		err = errors.New("GetRelationByPars err:" + err.Error())
 		fmt.Println(err)
+		return
 	}
 
 	sTime, _ := time.ParseInLocation(utils.FormatDateTime, req.StartDate+" "+req.StartTime, time.Now().Location())
@@ -576,7 +592,7 @@ func UpdateSHCalendarByMatter(req roadshow.UpdateMattersReq) (err error) {
 	endTime := eTime.Format("2006-01-02 15:04")
 	//发送更新请求
 
-	_, err = updateSHCalendar(fmt.Sprintf("%v", relationItem.ThirdCalendarId), relationItem.ResearcherMobile, req.MatterContent, startTime, endTime)
+	_, err = updateSHCalendar(fmt.Sprintf("%v", relationItem.ThirdCalendarId), relationItem.ResearcherMobile, relationItem.CustomerName+req.MatterContent, startTime, endTime)
 	if err == nil {
 		updateParams := make(map[string]interface{})
 		whereParams := make(map[string]interface{})
@@ -930,6 +946,7 @@ func SyncCalendarFromShanghai(userPhone, startDate, endDate string) (err error)
 		}
 	}
 
+	var itemsApiLog []*roadshow.RsCalendarApiLog
 	//上海那边已经删除了路演,这边也要同步删除
 	for _, deleteRsCalendarResearcherList := range deleteRsCalendarResearcherMap {
 		for _, deleteRsCalendarResearcher := range deleteRsCalendarResearcherList {
@@ -945,7 +962,14 @@ func SyncCalendarFromShanghai(userPhone, startDate, endDate string) (err error)
 				errMsgList = append(errMsgList, fmt.Sprint("第三方日历ID:", deleteRsCalendarResearcher.ThirdCalendarId, "删除关联关系失败;err:"+tmpErr.Error(), ";"))
 				continue
 			}
-
+			itemApiLog := new(roadshow.RsCalendarApiLog)
+			itemApiLog.CreateTime = time.Now()
+			itemApiLog.Remark = "对比上海接口之后手动删除"
+			itemApiLog.Url = fmt.Sprint("userPhone", userPhone, "currDay", currDay, "endDate", endDate)
+			itemApiLog.Body = ""
+			itemApiLog.Result = ""
+			itemApiLog.RsCalendarResearcherId = deleteRsCalendarResearcher.RsCalendarResearcherId
+			itemsApiLog = append(itemsApiLog, itemApiLog)
 			// 更新路演的同步字段
 			//calWhereParams := make(map[string]interface{})
 			//calUpdateParams := make(map[string]interface{})
@@ -954,6 +978,11 @@ func SyncCalendarFromShanghai(userPhone, startDate, endDate string) (err error)
 			//err = roadshow.UpdateRsCalendar(calWhereParams, calUpdateParams)
 		}
 	}
+
+	if len(itemsApiLog) > 0 {
+		go roadshow.AddRsCalendarApiLogList(itemsApiLog)
+	}
+
 	return
 }
 

+ 13 - 5
services/seal/seal.go

@@ -123,7 +123,7 @@ func ApplySeal(sysUser *system.Admin, req request.SealApprovalApplyReq) (err err
 	}()
 
 	// 添加用印
-	sealInfo, err := addSeal(sysUser.AdminId, req.ContractId, req.FileNum, sysUser.RealName, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls)
+	sealInfo, err := addSeal(sysUser.AdminId, req.ContractId, req.FileNum, sysUser.RealName, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany)
 	if err != nil {
 		return
 	}
@@ -140,7 +140,7 @@ func ApplySeal(sysUser *system.Admin, req request.SealApprovalApplyReq) (err err
 }
 
 // addSeal 新增用印
-func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string) (sealInfo *seal.Seal, err error) {
+func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany string) (sealInfo *seal.Seal, err error) {
 	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
@@ -177,6 +177,7 @@ func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCom
 		ContractId:     contractId,
 		ModifyTime:     now,
 		CreateTime:     now,
+		AffiliatedCompany:  affiliatedCompany,
 	}
 	err = seal.AddSeal(sealInfo)
 	if err != nil {
@@ -213,7 +214,7 @@ func EditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (err erro
 	}()
 
 	// 编辑用印
-	sealInfo, err := editSeal(req.SealId, sysUser.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls)
+	sealInfo, err := editSeal(req.SealId, sysUser.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany)
 	if err != nil {
 		return
 	}
@@ -230,7 +231,7 @@ func EditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (err erro
 }
 
 // editSeal 编辑用印申请
-func editSeal(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string) (sealInfo *seal.Seal, err error) {
+func editSeal(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany string) (sealInfo *seal.Seal, err error) {
 	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
@@ -276,7 +277,8 @@ func editSeal(sealId, userId, contractId, fileNum int, use, companyName, userCom
 	sealInfo.ModifyTime = now
 	sealInfo.CreateTime = now // 更新提交时间
 	sealInfo.Status = "待提交"
-	err = sealInfo.Update([]string{"Use", "CompanyName", "UseCompanyName", "CreditCode", "ServiceType", "SealType", "Remark", "FileUrl", "FileNum", "ContractId", "ModifyTime", "CreateTime", "Status"})
+	sealInfo.AffiliatedCompany = affiliatedCompany
+	err = sealInfo.Update([]string{"Use", "CompanyName", "UseCompanyName", "CreditCode", "ServiceType", "SealType", "Remark", "FileUrl", "FileNum", "ContractId", "ModifyTime", "CreateTime", "Status", "AffiliatedCompany"})
 	if err != nil {
 		return
 	}
@@ -365,6 +367,10 @@ func VerifierEditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (
 		updateContent = append(updateContent, "文件附件")
 		attachmentFlag = true
 	}
+	if sealInfo.AffiliatedCompany != req.AffiliatedCompany {
+		updateCol = append(updateCol, "AffiliatedCompany")
+		updateContent = append(updateContent, "归属公司")
+	}
 	if len(updateCol) <= 0 {
 		err = errors.New("没有变更信息")
 		return
@@ -393,6 +399,7 @@ func VerifierEditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (
 		sealInfo.FileNum = req.FileNum
 		sealInfo.FileUrl = newFileUrl
 		sealInfo.ModifyTime = time.Now()
+		sealInfo.AffiliatedCompany = req.AffiliatedCompany
 		verifierEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, sysUser, attachmentFlag, req.FileUrls)
 		// 重新获取最新的用印单
 		sealInfo, tmpErr := seal.GetSealInfoById(sealInfo.SealId)
@@ -413,6 +420,7 @@ func VerifierEditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (
 		sealInfo.FileNum = req.FileNum
 		sealInfo.FileUrl = newFileUrl
 		sealInfo.ModifyTime = time.Now()
+		sealInfo.AffiliatedCompany = req.AffiliatedCompany
 		verifierEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, sysUser, attachmentFlag, req.FileUrls)
 		// 审核通过
 		err = ApprovedApproval(sealInfo.SealId, sysUser, "")

+ 8 - 0
utils/common.go

@@ -2353,3 +2353,11 @@ func TruncateActivityNameString(s string) string {
 func GetLikeKeyword(keyword string) string {
 	return `%` + keyword + `%`
 }
+
+// 用户参会时间转换
+func GetAttendanceDetailSecondsByYiDong(str string) string {
+	var timeStr string
+	timeStr = strings.Replace(str, ":", "'", -1)
+	timeStr += "''"
+	return timeStr
+}