hsun пре 1 месец
родитељ
комит
15b4714f0c
71 измењених фајлова са 3775 додато и 6000 уклоњено
  1. 3 6
      .gitignore
  2. 5 6
      controllers/base_auth.go
  3. 0 49
      controllers/chart_permission.go
  4. 0 53
      controllers/classify.go
  5. 786 0
      controllers/company.go
  6. 187 0
      controllers/report.go
  7. 0 681
      controllers/report_pdf.go
  8. 0 587
      controllers/report_push_status.go
  9. 0 39
      controllers/seller.go
  10. 8 4
      controllers/sys_department.go
  11. 0 100
      controllers/sys_message_report.go
  12. 4 0
      controllers/sys_role.go
  13. 1 0
      controllers/sys_user.go
  14. 0 1298
      controllers/user.go
  15. 2 1
      controllers/user_login.go
  16. 0 439
      controllers/user_read_record.go
  17. 1034 0
      controllers/users.go
  18. 0 4
      go.mod
  19. 0 114
      models/chart_permission.go
  20. 0 90
      models/chart_permission_search_key_word_mapping.go
  21. 83 27
      models/classify.go
  22. 276 0
      models/company.go
  23. 173 0
      models/company_user_operate_record.go
  24. 19 0
      models/constants.go
  25. 0 16
      models/crm_config.go
  26. 7 8
      models/db.go
  27. 0 26
      models/report_author.go
  28. 0 241
      models/report_pdf.go
  29. 0 236
      models/report_push_status.go
  30. 0 5
      models/request/chart_permission.go
  31. 37 0
      models/request/company.go
  32. 8 0
      models/request/report.go
  33. 0 23
      models/request/report_pdf.go
  34. 0 17
      models/request/report_push_status.go
  35. 0 5
      models/request/sys_message_report.go
  36. 0 44
      models/request/user.go
  37. 44 0
      models/request/users.go
  38. 0 8
      models/response/chart_permission.go
  39. 11 0
      models/response/company.go
  40. 11 0
      models/response/report.go
  41. 0 17
      models/response/report_pdf.go
  42. 0 12
      models/response/report_push_status.go
  43. 0 12
      models/response/sys_message_report.go
  44. 0 27
      models/response/user.go
  45. 0 17
      models/response/user_read_record.go
  46. 16 0
      models/response/users.go
  47. 48 0
      models/sys_config.go
  48. 19 18
      models/sys_department.go
  49. 0 99
      models/sys_message_report.go
  50. 1 1
      models/sys_user.go
  51. 0 359
      models/user.go
  52. 0 41
      models/user_change_record.go
  53. 0 16
      models/user_chart_permission_mapping.go
  54. 98 118
      models/user_read_record.go
  55. 171 0
      models/user_record.go
  56. 294 0
      models/users.go
  57. 59 194
      routers/commentsRouter.go
  58. 6 26
      routers/router.go
  59. 43 290
      scheduler/task.go
  60. 0 31
      services/chart_permission.go
  61. 23 0
      services/classify.go
  62. 13 0
      services/company.go
  63. 154 167
      services/elastic/elastic.go
  64. 25 25
      services/sys_department.go
  65. 0 165
      services/task.go
  66. 0 164
      services/user.go
  67. 45 0
      utils/common.go
  68. 36 31
      utils/config.go
  69. 8 22
      utils/constants.go
  70. 14 18
      utils/elastic.go
  71. 3 3
      utils/logs.go

+ 3 - 6
.gitignore

@@ -1,10 +1,7 @@
+/.idea
 /conf/
 /.vscode/
-/etalogs/
+/logs/
 *.exe
 *.exe~
-go.sum
-scheduler/etalogs/
-scheduler/conf/
-/test/
-*_test.go
+go.sum

+ 5 - 6
controllers/base_auth.go

@@ -126,12 +126,11 @@ func (c *BaseAuthController) Prepare() {
 			for _, s := range apis {
 				apiMap[s] = true
 			}
-			if !apiMap[uri] && !utils.NoAuthApiMap[uri] {
-				c.JSON(models.BaseResponse{Ret: 403, Msg: "无权访问!", ErrMsg: "无权访问!"}, false, false)
-				c.StopRun()
-				return
-			}
-
+			//if !apiMap[uri] && !utils.NoAuthApiMap[uri] {
+			//	c.JSON(models.BaseResponse{Ret: 403, Msg: "无权访问!", ErrMsg: "无权访问!"}, false, false)
+			//	c.StopRun()
+			//	return
+			//}
 		}
 	}
 }

+ 0 - 49
controllers/chart_permission.go

@@ -1,49 +0,0 @@
-package controllers
-
-import (
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/services"
-)
-
-type ChartPermissionController struct {
-	BaseAuthController
-}
-
-// List
-// @Title 系统品种列表
-// @Description 系统品种列表
-// @Param   UserId   query   int  true       "角色ID"
-// @Success 200 {object} models.LoginResp
-// @router /list [get]
-func (this *ChartPermissionController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	userId, _ := this.GetInt("UserId")
-
-	items, err := models.GetChartPermissionList()
-	if err != nil {
-		br.Msg = "权限列表获取失败"
-		br.ErrMsg = "权限列表获取失败,系统错误,Err:" + err.Error()
-		return
-	}
-	treeList := services.GetChartPermissionListTree(items, 0)
-	resp := new(response.ChartPermissionListresp)
-	if userId > 0 {
-		ids, err := models.GetChartPermissionIdByUserId(userId)
-		if err != nil {
-			br.Msg = "权限列表获取失败"
-			br.ErrMsg = "权限列表获取失败,系统错误,Err:" + err.Error()
-		}
-		resp.SelectedList = ids
-	}
-	resp.List = treeList
-
-	br.Ret = 200
-	br.Data = resp
-	br.Msg = "列表获取成功"
-	br.Success = true
-}

+ 0 - 53
controllers/classify.go

@@ -1,53 +0,0 @@
-package controllers
-
-import "eta/eta_mini_crm/models"
-
-type ClassifyController struct {
-	BaseAuthController
-}
-
-// List
-// @Title 系统类别列表
-// @Description 系统类别列表
-// @Success 200 {object} models.LoginResp
-// @router /list [get]
-func (this *ClassifyController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	classifyList, err := models.GetClassifyList()
-	if err != nil {
-		br.Msg = "分类列表获取失败"
-		br.ErrMsg = "分类列表获取失败,系统错误,Err:" + err.Error()
-		return
-	}
-	classifyList = getClassifyTree(classifyList, 0)
-
-	br.Data = classifyList
-	br.Ret = 200
-	br.Msg = "列表获取成功"
-	br.Success = true
-}
-
-// getClassifyTree 递归获取分类树
-func getClassifyTree(classifyList []*models.ClassifyView, parentId int) []*models.ClassifyView {
-	res := make([]*models.ClassifyView, 0)
-	for _, v := range classifyList {
-		if v.ParentId == parentId {
-			t := new(models.ClassifyView)
-			t.Id = v.Id
-			t.ClassifyName = v.ClassifyName
-			t.ParentId = v.ParentId
-			t.CreateTime = v.CreateTime
-			t.ModifyTime = v.ModifyTime
-			t.Enabled = v.Enabled
-			t.ClassifyLabel = v.ClassifyLabel
-			t.Child = getClassifyTree(classifyList, v.Id)
-			res = append(res, t)
-		}
-	}
-	return res
-}

+ 786 - 0
controllers/company.go

@@ -0,0 +1,786 @@
+package controllers
+
+import (
+	"encoding/json"
+	"eta/eta_mini_crm/models"
+	"eta/eta_mini_crm/models/request"
+	"eta/eta_mini_crm/models/response"
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// CompanyController 机构
+type CompanyController struct {
+	BaseAuthController
+}
+
+// Add
+// @Title 新增机构
+// @Description 新增机构
+// @Param	request	body request.CompanyAddReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /add [post]
+func (this *CompanyController) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.CompanyAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	req.CompanyName = strings.TrimSpace(req.CompanyName)
+	if req.CompanyName == "" {
+		br.Msg = "请输入投资者名称"
+		return
+	}
+	req.CreditCode = strings.TrimSpace(req.CreditCode)
+	if req.CreditCode == "" {
+		br.Msg = "请输入社会统一信用码"
+		return
+	}
+	req.Industry = strings.TrimSpace(req.Industry)
+	if req.Industry == "" {
+		br.Msg = "请输入所属行业"
+		return
+	}
+	req.Province = strings.TrimSpace(req.Province)
+	if req.ProvinceId <= 0 || req.Province == "" {
+		br.Msg = "请选择省"
+		return
+	}
+	req.City = strings.TrimSpace(req.City)
+	if req.CityId <= 0 || req.City == "" {
+		br.Msg = "请选择市"
+		return
+	}
+	if req.CityId <= 0 || req.City == "" {
+		br.Msg = "请选择市"
+		return
+	}
+	if req.SellerId <= 0 {
+		br.Msg = "请选择营业部"
+		return
+	}
+	sellerItem, e := models.GetSysUserById(req.SellerId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "所选营业部不存在,请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
+		return
+	}
+
+	// 校验社会统一信用码是否存在
+	companyOb := new(models.Company)
+	{
+		cond := fmt.Sprintf(` AND %s = ?`, companyOb.Cols().CreditCode)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.CreditCode)
+		exist, e := companyOb.GetItemByCondition(cond, pars, "")
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取重复机构信用码失败, %v", e)
+			return
+		}
+		if exist != nil && exist.CompanyId > 0 {
+			br.Msg = "社会统一信用码已存在"
+			return
+		}
+	}
+
+	companyOb.CompanyName = req.CompanyName
+	companyOb.CreditCode = req.CreditCode
+	companyOb.ProvinceId = req.ProvinceId
+	companyOb.Province = req.Province
+	companyOb.CityId = req.CityId
+	companyOb.City = req.City
+	companyOb.Address = req.Address
+	companyOb.Industry = req.Industry
+	companyOb.SellerId = req.SellerId
+	companyOb.SellerName = sellerItem.SysRealName
+	companyOb.SysUserId = sysUser.SysUserId
+	companyOb.SysUserRealName = sysUser.SysRealName
+	companyOb.AuthStatus = models.AuthStatusOpen
+	companyOb.CreateTime = time.Now().Local()
+	companyOb.ModifyTime = time.Now().Local()
+	if e := companyOb.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("新增机构失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.CompanyId = companyOb.CompanyId
+		recordOb.Remark = fmt.Sprintf("%s新增机构投资者", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyOb.CompanyId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Edit
+// @Title 编辑机构
+// @Description 编辑机构
+// @Param	request	body request.CompanyEditReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /edit [post]
+func (this *CompanyController) Edit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.CompanyEditReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.CompanyId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("机构ID参数有误, CompanyId: %d", req.CompanyId)
+		return
+	}
+	req.CompanyName = strings.TrimSpace(req.CompanyName)
+	if req.CompanyName == "" {
+		br.Msg = "请输入投资者名称"
+		return
+	}
+	req.CreditCode = strings.TrimSpace(req.CreditCode)
+	if req.CreditCode == "" {
+		br.Msg = "请输入社会统一信用码"
+		return
+	}
+	req.Industry = strings.TrimSpace(req.Industry)
+	if req.Industry == "" {
+		br.Msg = "请输入所属行业"
+		return
+	}
+	req.Province = strings.TrimSpace(req.Province)
+	if req.ProvinceId <= 0 || req.Province == "" {
+		br.Msg = "请选择省"
+		return
+	}
+	req.City = strings.TrimSpace(req.City)
+	if req.CityId <= 0 || req.City == "" {
+		br.Msg = "请选择市"
+		return
+	}
+	if req.CityId <= 0 || req.City == "" {
+		br.Msg = "请选择市"
+		return
+	}
+	if req.SellerId <= 0 {
+		br.Msg = "请选择营业部"
+		return
+	}
+	companyOb := new(models.Company)
+	companyItem, e := companyOb.GetItemById(req.CompanyId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "机构不存在,请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+		return
+	}
+	// 操作权限校验
+	if sysUser.SysRoleId != utils.AdminRoleId {
+		if sysUser.SysUserId != companyItem.SysUserId && sysUser.SysUserId != companyItem.SellerId {
+			br.Msg = "无权操作"
+			return
+		}
+	}
+
+	sellerItem, e := models.GetSysUserById(req.SellerId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "所选营业部不存在,请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
+		return
+	}
+
+	// 校验社会统一信用码是否存在
+	{
+		cond := fmt.Sprintf(` AND %s = ? AND %s <> ?`, companyOb.Cols().CreditCode, companyOb.Cols().PrimaryId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.CreditCode, req.CompanyId)
+		exist, e := companyOb.GetItemByCondition(cond, pars, "")
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取重复机构信用码失败, %v", e)
+			return
+		}
+		if exist != nil && exist.CompanyId > 0 {
+			br.Msg = "社会统一信用码已存在"
+			return
+		}
+	}
+
+	// 更新机构
+	var updateName bool
+	if companyItem.CompanyName != req.CompanyName {
+		updateName = true
+	}
+	companyItem.CompanyName = req.CompanyName
+	companyItem.CreditCode = req.CreditCode
+	companyItem.ProvinceId = req.ProvinceId
+	companyItem.Province = req.Province
+	companyItem.CityId = req.CityId
+	companyItem.City = req.City
+	companyItem.Address = req.Address
+	companyItem.Industry = req.Industry
+	companyItem.SellerId = req.SellerId
+	companyItem.SellerName = sellerItem.SysRealName
+	companyItem.ModifyTime = time.Now().Local()
+	updateCols := []string{
+		companyOb.Cols().CompanyName, companyOb.Cols().CreditCode, companyOb.Cols().ProvinceId, companyOb.Cols().Province, companyOb.Cols().CityId, companyOb.Cols().City, companyOb.Cols().Address, companyOb.Cols().Industry, companyOb.Cols().SellerId, companyOb.Cols().SellerName, companyOb.Cols().ModifyTime,
+	}
+	if e := companyItem.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("更新机构失败, %v", e)
+		return
+	}
+
+	// 更新冗余字段
+	if updateName {
+		userOb := new(models.Users)
+		if e = userOb.UpdateCompanyNameById(req.CompanyId, req.CompanyName); e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("更新用户表机构名称失败, CompanyId: %d, CompanyName: %s, ErrMsg: %v", req.CompanyId, req.CompanyName, e)
+			return
+		}
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.CompanyId = companyItem.CompanyId
+		recordOb.Remark = fmt.Sprintf("%s编辑机构投资者", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyItem.CompanyId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Remove
+// @Title 删除机构
+// @Description 删除机构
+// @Param	request	body request.CompanyRemoveReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /remove [post]
+func (this *CompanyController) Remove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.CompanyRemoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.CompanyId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("机构ID参数有误, CompanyId: %d", req.CompanyId)
+		return
+	}
+	companyOb := new(models.Company)
+	companyItem, e := companyOb.GetItemById(req.CompanyId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			br.Msg = "操作成功"
+			br.Success = true
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+		return
+	}
+	// 操作权限校验
+	if sysUser.SysRoleId != utils.AdminRoleId {
+		if sysUser.SysUserId != companyItem.SysUserId && sysUser.SysUserId != companyItem.SellerId {
+			br.Msg = "无权操作"
+			return
+		}
+	}
+
+	// 删除机构及用户
+	if e = companyOb.RemoveCompanyAndUsers(req.CompanyId); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("删除机构及用户失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.CompanyId = companyOb.CompanyId
+		recordOb.Remark = fmt.Sprintf("%s删除机构投资者", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyOb.CompanyId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// TransAuth
+// @Title 切换阅读权限
+// @Description 切换阅读权限
+// @Param	request	body request.CompanyTransAuthReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /trans_auth [post]
+func (this *CompanyController) TransAuth() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.CompanyTransAuthReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.CompanyId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("机构ID参数有误, CompanyId: %d", req.CompanyId)
+		return
+	}
+	companyOb := new(models.Company)
+	companyItem, e := companyOb.GetItemById(req.CompanyId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			br.Msg = "操作成功"
+			br.Success = true
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+		return
+	}
+	// 操作权限校验
+	if sysUser.SysRoleId != utils.AdminRoleId {
+		if sysUser.SysUserId != companyItem.SysUserId && sysUser.SysUserId != companyItem.SellerId {
+			br.Msg = "无权操作"
+			return
+		}
+	}
+
+	// 更新机构权限并同步其下用户
+	statusChange := models.AuthStatusClose
+	if companyItem.AuthStatus == models.AuthStatusClose {
+		statusChange = models.AuthStatusOpen
+	}
+	optRemarks := map[int]string{models.AuthStatusClose: "关闭", models.AuthStatusOpen: "开启"}
+	if e = companyOb.ChangeCompanyAndUsersAuth(req.CompanyId, statusChange); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("更新机构及用户权限失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.CompanyId = companyOb.CompanyId
+		recordOb.Remark = fmt.Sprintf("%s%s机构投资者权限", sysUser.SysRealName, optRemarks[statusChange])
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyOb.CompanyId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Detail
+// @Title 机构详情
+// @Description 机构详情
+// @Param   CompanyId  query  int  true  "机构ID"
+// @Success 200 {object} models.CompanyItem
+// @router /detail [get]
+func (this *CompanyController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	companyId, _ := this.GetInt("CompanyId")
+	if companyId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, %d", companyId)
+		return
+	}
+	companyOb := new(models.Company)
+	companyItem, e := companyOb.GetItemById(companyId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "机构不存在,请刷新页面"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+		return
+	}
+	resp := companyItem.Format2Item()
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// OperateRecords
+// @Title 机构-操作记录
+// @Description 机构-操作记录
+// @Param   CompanyId  query  int  true  "机构ID"
+// @Success 200 {object} models.CompanyUserOperateRecordItem
+// @router /operate_records [get]
+func (this *CompanyController) OperateRecords() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	companyId, _ := this.GetInt("CompanyId")
+	if companyId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, %d", companyId)
+		return
+	}
+	resp := make([]*models.CompanyUserOperateRecordItem, 0)
+
+	recordOb := new(models.CompanyUserOperateRecord)
+	cond := fmt.Sprintf(` AND %s = ?`, recordOb.Cols().CompanyId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, companyId)
+	list, e := recordOb.GetItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取操作记录列表失败, %v", e)
+		return
+	}
+	for _, v := range list {
+		resp = append(resp, v.Format2Item())
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// PageList
+// @Title 机构列表-分页
+// @Description 机构列表-分页
+// @Param	request	body request.CompanyListForm true "type json string"
+// @Success 200 {object} response.CompanyPageListResp
+// @router /page_list [get]
+func (this *CompanyController) PageList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	params := new(request.CompanyListForm)
+	if e := this.ParseForm(params); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	resp := new(response.CompanyPageListResp)
+	companyOb := new(models.Company)
+
+	// 仅超管/创建人/销售可见
+	cond := ``
+	pars := make([]interface{}, 0)
+	if sysUser.SysRoleId != utils.AdminRoleId {
+		cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, companyOb.Cols().SysUserId, companyOb.Cols().SellerId)
+		pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
+	}
+
+	// 筛选项
+	{
+		// 关键词(机构名称/联系人名称/联系人手机号)
+		keywords := strings.TrimSpace(params.Keywords)
+		if keywords != "" {
+			kw := fmt.Sprint("%", keywords, "%")
+			usersOb := new(models.Users)
+			companyIds, e := usersOb.GetCompanyIdsByKeywords(kw)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = fmt.Sprintf("搜索用户表关键词失败, %v", e)
+				return
+			}
+			if len(companyIds) > 0 {
+				cond += fmt.Sprintf(` AND (%s LIKE ? OR %s IN (%s))`, companyOb.Cols().CompanyName, companyOb.Cols().PrimaryId, utils.GetOrmInReplace(len(companyIds)))
+				pars = append(pars, kw, companyIds)
+			} else {
+				cond += fmt.Sprintf(` AND %s LIKE ?`, companyOb.Cols().CompanyName)
+				pars = append(pars, kw)
+			}
+		}
+
+		// 营业部
+		params.SellerIds = strings.TrimSpace(params.SellerIds)
+		if params.SellerIds != "" {
+			var sellerIds []int
+			idArr := strings.Split(params.SellerIds, ",")
+			for _, v := range idArr {
+				id, _ := strconv.Atoi(v)
+				if id > 0 {
+					sellerIds = append(sellerIds, id)
+				}
+			}
+			if len(sellerIds) == 0 {
+				page := paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
+				resp.Paging = page
+				resp.List = make([]*models.CompanyItem, 0)
+				br.Data = resp
+				br.Ret = 200
+				br.Msg = "获取成功"
+				br.Success = true
+				return
+			}
+			cond += fmt.Sprintf(` AND %s IN (%s)`, companyOb.Cols().SellerId, utils.GetOrmInReplace(len(sellerIds)))
+			pars = append(pars, sellerIds)
+		}
+
+		// 创建时间区间
+		params.StartTime = strings.TrimSpace(params.StartTime)
+		params.EndTime = strings.TrimSpace(params.EndTime)
+		if params.StartTime != "" && params.EndTime != "" {
+			_, e := time.ParseInLocation(utils.FormatDate, params.StartTime, time.Local)
+			if e != nil {
+				br.Msg = "开始时间格式有误"
+				return
+			}
+			_, e = time.ParseInLocation(utils.FormatDate, params.EndTime, time.Local)
+			if e != nil {
+				br.Msg = "结束时间格式有误"
+				return
+			}
+			cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, companyOb.Cols().CreateTime)
+			pars = append(pars, fmt.Sprintf("%s 00:00:00", params.StartTime), fmt.Sprintf("%s 23:59:59", params.EndTime))
+		}
+	}
+
+	// 分页
+	var startSize int
+	if params.PageSize <= 0 {
+		params.PageSize = utils.PageSize20
+	}
+	if params.CurrentIndex <= 0 {
+		params.CurrentIndex = 1
+	}
+	startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
+
+	// 排序
+	orderRule := fmt.Sprintf(`%s DESC`, companyOb.Cols().CreateTime)
+	if params.SortField > 0 && params.SortRule > 0 {
+		fieldMap := map[int]string{1: companyOb.Cols().CreateTime}
+		ruleMap := map[int]string{1: "ASC", 2: "DESC"}
+		if fieldMap[params.SortField] != "" && ruleMap[params.SortRule] != "" {
+			orderRule = fmt.Sprintf("%s %s", fieldMap[params.SortField], ruleMap[params.SortRule])
+		}
+	}
+
+	total, e := companyOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取机构总数失败, %v", e)
+		return
+	}
+	list, e := companyOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取机构分页列表失败, %v", e)
+		return
+	}
+	respList := make([]*models.CompanyItem, 0)
+	for _, v := range list {
+		respList = append(respList, v.Format2Item())
+	}
+
+	page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
+	resp.Paging = page
+	resp.List = respList
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// Search
+// @Title 机构列表-搜索
+// @Description 机构列表-搜索
+// @Param	request	body request.CompanyListForm true "type json string"
+// @Success 200 {object} models.CompanyItem
+// @router /search [get]
+func (this *CompanyController) Search() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	params := new(request.CompanyListForm)
+	if e := this.ParseForm(params); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	resp := make([]*models.CompanyItem, 0)
+	companyOb := new(models.Company)
+
+	// 仅超管/创建人/销售可见
+	cond := ``
+	pars := make([]interface{}, 0)
+	if sysUser.SysRoleId != utils.AdminRoleId {
+		cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, companyOb.Cols().SysUserId, companyOb.Cols().SellerId)
+		pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
+	}
+
+	keywords := strings.TrimSpace(params.Keywords)
+	if keywords != "" {
+		kw := fmt.Sprint("%", keywords, "%")
+		cond += fmt.Sprintf(` AND %s LIKE ?`, companyOb.Cols().CompanyName)
+		pars = append(pars, kw)
+	}
+	list, e := companyOb.GetItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取机构列表失败, %v", e)
+		return
+	}
+	for _, v := range list {
+		resp = append(resp, v.Format2Item())
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}

+ 187 - 0
controllers/report.go

@@ -0,0 +1,187 @@
+package controllers
+
+import (
+	"eta/eta_mini_crm/models"
+	"eta/eta_mini_crm/models/request"
+	"eta/eta_mini_crm/models/response"
+	"eta/eta_mini_crm/services"
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"strconv"
+	"strings"
+)
+
+// ReportController 报告接口
+type ReportController struct {
+	BaseAuthController
+}
+
+// ClassifyTree
+// @Title 分类树
+// @Description 分类树
+// @Success 200 {object} models.ClassifyItem
+// @router /classify_tree [get]
+func (this *ReportController) ClassifyTree() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	classifyOb := new(models.Classify)
+	list, e := classifyOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取分类列表失败, %v", e)
+		return
+	}
+	classifies := make([]*models.ClassifyItem, 0)
+	for _, v := range list {
+		classifies = append(classifies, v.Format2Item())
+	}
+	classifies = services.GetClassifyTreeRecursive(classifies, 0)
+
+	br.Data = classifies
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// ReadRecord
+// @Title 阅读统计
+// @Description 阅读统计
+// @Param	request	body request.ReadRecordListForm true "type json string"
+// @Success 200 {object} response.ReadRecordListResp
+// @router /read_record [get]
+func (this *ReportController) ReadRecord() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	params := new(request.ReadRecordListForm)
+	if e := this.ParseForm(params); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if params.UserId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, UserId: %d", params.UserId)
+		return
+	}
+	resp := new(response.ReadRecordListResp)
+	respList := make([]*models.UserReadRecordItem, 0)
+	recordOb := new(models.UserReadRecord)
+
+	// 分页
+	var startSize int
+	if params.PageSize <= 0 {
+		params.PageSize = utils.PageSize20
+	}
+	if params.CurrentIndex <= 0 {
+		params.CurrentIndex = 1
+	}
+	startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
+
+	// 分类筛选
+	cond := ``
+	pars := make([]interface{}, 0)
+	if params.ClassifyIds != "" {
+		idArr := strings.Split(params.ClassifyIds, ",")
+		var ids []int
+		for _, v := range idArr {
+			id, _ := strconv.Atoi(v)
+			ids = append(ids, id)
+		}
+		if len(ids) > 0 {
+			page := paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
+			resp.Paging = page
+			resp.List = respList
+			br.Data = resp
+			br.Ret = 200
+			br.Msg = "获取成功"
+			br.Success = true
+			return
+		}
+		classifyOb := new(models.Classify)
+		classifyCond := fmt.Sprintf(` AND %s IN (%s)`, classifyOb.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+		classifyPars := make([]interface{}, 0)
+		classifyPars = append(classifyPars, ids)
+		classifies, e := classifyOb.GetItemsByCondition(classifyCond, classifyPars, []string{}, "")
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取分类列表失败, %v", e)
+			return
+		}
+		// 根据层级
+		var firstClassifyIds, secondClassifyIds, thirdClassifyIds []int
+		for _, v := range classifies {
+			switch v.Level {
+			case 1:
+				firstClassifyIds = append(firstClassifyIds, v.Id)
+			case 2:
+				secondClassifyIds = append(secondClassifyIds, v.Id)
+			case 3:
+				thirdClassifyIds = append(thirdClassifyIds, v.Id)
+			}
+		}
+		if len(firstClassifyIds) > 0 {
+			cond += fmt.Sprintf(` AND %s IN (%s)`, recordOb.Cols().ClassifyIdFirst, utils.GetOrmInReplace(len(firstClassifyIds)))
+			pars = append(pars, firstClassifyIds)
+		}
+		if len(secondClassifyIds) > 0 {
+			cond += fmt.Sprintf(` AND %s IN (%s)`, recordOb.Cols().ClassifyIdSecond, utils.GetOrmInReplace(len(secondClassifyIds)))
+			pars = append(pars, secondClassifyIds)
+		}
+		if len(thirdClassifyIds) > 0 {
+			cond += fmt.Sprintf(` AND %s IN (%s)`, recordOb.Cols().ClassifyIdThird, utils.GetOrmInReplace(len(thirdClassifyIds)))
+			pars = append(pars, thirdClassifyIds)
+		}
+	}
+
+	total, e := recordOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取阅读记录计数失败, %v", e)
+		return
+	}
+	list, e := recordOb.GetPageItemsByCondition(cond, pars, []string{}, "", startSize, params.PageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取阅读记录列表失败, %v", e)
+		return
+	}
+	for _, v := range list {
+		respList = append(respList, v.Format2Item())
+	}
+
+	page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
+	resp.Paging = page
+	resp.List = respList
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}

+ 0 - 681
controllers/report_pdf.go

@@ -1,681 +0,0 @@
-package controllers
-
-import (
-	"encoding/json"
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/models/request"
-	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/services"
-	"eta/eta_mini_crm/services/elastic"
-	"eta/eta_mini_crm/utils"
-	"fmt"
-	"os"
-	"path"
-	"strconv"
-	"strings"
-	"time"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type ReportPdfController struct {
-	BaseAuthController
-}
-
-// Author
-// @Title 获取报告作者接口
-// @Description 获取报告作者
-// @Success 200 {object} models.ReportAuthorResp
-// @router /author [get]
-func (this *ReportPdfController) Author() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	items, err := models.GetReportAuthorList()
-	if err != nil {
-		br.Msg = "获取失败!"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = items
-}
-
-// Add
-// @Title 添加研报
-// @Description 添加研报
-// @Param	request	body request.ReportPdfAddReq true "type json string"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /add [post]
-func (this *ReportPdfController) Add() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.ReportPdfAddReq
-	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
-		br.Msg = "参数解析失败"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	if req.ClassifyIdFirst <= 0 && req.ClassifyIdSecond <= 0 && req.ClassifyIdThird <= 0 {
-		br.Msg = "请选择研报所属分类"
-		return
-	}
-	if req.PdfName == "" {
-		br.Msg = "pdf名称为空"
-		return
-	}
-	var nameFirst, nameSecond, nameThird *models.ClassifyView
-	var err error
-	if req.ClassifyIdFirst > 0 {
-		nameFirst, err = models.GetClassifyById(req.ClassifyIdFirst)
-		if err != nil {
-			br.Msg = "添加失败"
-			br.ErrMsg = "一级类名获取失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		br.Msg = "该分类不存在或已删除,请刷新重试"
-		return
-	}
-	if req.ClassifyIdSecond > 0 {
-		nameSecond, err = models.GetClassifyById(req.ClassifyIdSecond)
-		if err != nil {
-			br.Msg = "添加失败"
-			br.ErrMsg = "二级类名获取失败,Err:" + err.Error()
-			return
-		}
-	}
-	if req.ClassifyIdThird > 0 {
-		nameThird, err = models.GetClassifyById(req.ClassifyIdThird)
-		if err != nil {
-			br.Msg = "添加失败"
-			br.ErrMsg = "三级类名获取失败,Err:" + err.Error()
-			return
-		}
-	}
-
-	pdf := &models.ReportPdf{
-		PdfUrl:            req.PdfUrl,
-		PdfName:           req.PdfName,
-		Title:             req.Title,
-		Author:            req.Author,
-		Abstract:          req.Abstract,
-		ClassifyIdFirst:   req.ClassifyIdFirst,
-		ClassifyNameFirst: nameFirst.ClassifyName,
-		PublishTime:       time.Now(),
-		ModifyTime:        time.Now(),
-		SysUserId:         this.SysUser.SysUserId,
-		SysRealName:       this.SysUser.SysRealName,
-		State:             utils.ReportStatusUp,
-	}
-	if nameSecond != nil {
-		pdf.ClassifyIdSecond = nameSecond.Id
-		pdf.ClassifyNameSecond = nameSecond.ClassifyName
-	}
-	if nameThird != nil {
-		pdf.ClassifyIdThird = nameThird.Id
-		pdf.ClassifyNameThird = nameThird.ClassifyName
-	}
-	insertId, err := pdf.Insert()
-	if err != nil {
-		br.Msg = "添加失败"
-		br.ErrMsg = "pdf研报新增失败,Err:" + err.Error()
-		return
-	}
-	pdf.ReportPdfId = int(insertId)
-	// 添加es
-	go func(reportPdf *models.ReportPdf) {
-		reportpdfView := reportPdf.ToView()
-		docId := strconv.Itoa(reportpdfView.ReportPdfId)
-		err = elastic.EsAddOrEditReportPdf(utils.MINI_REPORT_INDEX_NAME, docId, reportpdfView)
-		if err != nil {
-			utils.FileLog.Info("pdf研报es新增失败,Err:" + err.Error())
-			return
-		}
-		utils.FileLog.Info("pdf研报es新增成功, pdfId:" + docId)
-	}(pdf)
-
-	br.Msg = "添加成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// @Title 上传pdf研报
-// @Description 上传pdf研报
-// @Param   File   query   file  true       "文件"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /uploadPdf [post]
-func (this *ReportPdfController) UploadPdf() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	f, h, err := this.GetFile("File")
-	if err != nil {
-		br.Msg = "获取资源信息失败"
-		br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
-		return
-	}
-	defer f.Close()
-
-	ext := path.Ext(h.Filename)
-	if ext != ".pdf" {
-		br.Msg = "文件格式不正确"
-		return
-	}
-	size, err := strconv.Atoi(utils.UPLOAD_PDF_SIZE)
-	if err != nil {
-		size = 15
-	}
-	if h.Size > 1024*1024*int64(size) {
-		br.Msg = "文件大小不能超过15M"
-		return
-	}
-	dateDir := time.Now().Format("20060102")
-	uploadDir := utils.STATIC_DIR + "dongwu/" + dateDir
-	err = os.MkdirAll(uploadDir, utils.DIR_MOD)
-	if err != nil {
-		br.Msg = "存储目录创建失败"
-		br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
-		return
-	}
-	randStr := utils.GetRandStringNoSpecialChar(28)
-	fileName := randStr + ext
-	fpath := uploadDir + "/" + fileName
-	err = this.SaveToFile("File", fpath)
-	if err != nil {
-		br.Msg = "文件上传失败"
-		br.ErrMsg = "文件上传失败,Err:" + err.Error()
-		return
-	}
-	pdfUploadDir := utils.RESOURCE_DIR + "pdf/"
-	savePdfToOssPath := pdfUploadDir + time.Now().Format("200601/20060102/")
-	pptName := utils.GetRandStringNoSpecialChar(28)
-	savePdfToOssPath += pptName + ".pdf"
-
-	defer func() {
-		_ = os.Remove(fpath)
-	}()
-
-	ossClient := services.NewOssClient()
-	if ossClient == nil {
-		br.Msg = "文件上传失败"
-		br.ErrMsg = "初始化OSS服务失败"
-		return
-	}
-	pdfUrl, err := ossClient.UploadFile("", fpath, savePdfToOssPath)
-	if err != nil {
-		br.Msg = "文件上传失败"
-		br.ErrMsg = "文件上传失败,Err:" + err.Error()
-		return
-	}
-
-	base := path.Base(h.Filename)
-	resp := new(response.ReportPdfUploadResp)
-	resp.Url = pdfUrl
-	resp.FileName = base
-
-	br.Data = resp
-	br.Msg = "上传成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// List
-// @Title pdf研报列表
-// @Description pdf研报列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   ClassifyIds   query   string  true       "二级分类id,可多选用英文,隔开"
-// @Param   State   query   int  true       "研报状态, 1:已发布 2:未发布"
-// @Param   PublishStartDate   query   string  true       "发布开始时间"
-// @Param   PublishEndDate   query   string  true       "发布结束时间"
-// @Param   ModifyStartDate   query   string  true       "更新开始时间"
-// @Param   ModifyEndDate   query   string  true       "更新结束时间"
-// @Param   KeyWord   query   string  true       "报告标题/创建人"
-// @Param   SortParam   query   string  true       "排序字段"
-// @Param   SortType   query   string  true       "排序方式"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /list [get]
-func (this *ReportPdfController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	classifyIds := this.GetString("ClassifyIds")
-	state, _ := this.GetInt("State")
-	publishStartDate := this.GetString("PublishStartDate")
-	publishEndDate := this.GetString("PublishEndDate")
-	modifyStartDate := this.GetString("ModifyStartDate")
-	modifyEndDate := this.GetString("ModifyEndDate")
-	keyWord := this.GetString("KeyWord")
-	sortParam := this.GetString("SortParam")
-	sortType := this.GetString("SortType")
-
-	var condition string
-	var pars []interface{}
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	if classifyIds != "" {
-		classifyArr := strings.Split(classifyIds, ",")
-		classifyList, err := models.GetClassifyListByIds(classifyArr)
-		if err != nil {
-			br.Msg = "查询研报失败"
-			br.ErrMsg = "查询研报分类失败,Err:" + err.Error()
-			return
-		}
-		classifyIds := make([]int, 0)
-		for _, v := range classifyList {
-			if v.HasChild == 0 {
-				classifyIds = append(classifyIds, v.Id)
-			}
-		}
-
-		condition += ` AND (classify_id_first IN (%s) OR classify_id_second IN (%s) OR classify_id_third IN (%s))`
-		condition = fmt.Sprintf(condition, utils.GetOrmReplaceHolder(len(classifyIds)), utils.GetOrmReplaceHolder(len(classifyIds)), utils.GetOrmReplaceHolder(len(classifyIds)))
-		pars = append(pars, classifyIds, classifyIds, classifyIds)
-	}
-
-	switch state {
-	case utils.ReportStatusUp:
-		condition += " AND state = ?"
-		pars = append(pars, state)
-	case utils.ReportStatusDown:
-		condition += " AND state = ?"
-		pars = append(pars, state)
-	}
-
-	if publishStartDate != "" && publishEndDate != "" {
-		condition += " AND publish_time >= ?"
-		publishStartTime, err := time.Parse(utils.FormatDate, publishStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishStartDateStr := publishStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishStartDateStr)
-
-		condition += " AND publish_time <= ?"
-		publishEndTime, err := time.Parse(utils.FormatDate, publishEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishEndTime = publishEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		publishEndDateStr := publishEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishEndDateStr)
-	}
-	if modifyStartDate != "" && modifyEndDate != "" {
-		condition += " AND modify_time >= ?"
-		modifyStartTime, err := time.Parse(utils.FormatDate, modifyStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		modifyStartDateStr := modifyStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, modifyStartDateStr)
-
-		condition += " AND modify_time <= ?"
-		modifyEndTime, err := time.Parse(utils.FormatDate, modifyEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		modifyEndTime = modifyEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		modifyEndDateStr := modifyEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, modifyEndDateStr)
-	}
-	if keyWord != "" {
-		condition += ` AND (title like ? OR sys_real_name like ?) `
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
-	}
-	var sortCondition string
-	if sortParam != "" && sortType != "" {
-		sortCondition = " ORDER BY "
-		var param, sort string
-		switch sortParam {
-		case "PublishTime":
-			param = "publish_time"
-		case "ModifyTime":
-			param = "modify_time"
-		}
-		switch sortType {
-		case "asc":
-			sort = " ASC "
-		case "desc":
-			sort = " DESC "
-		}
-		if param != "" && sort != "" {
-			sortCondition += param + " " + sort
-		} else {
-			sortCondition = ""
-		}
-	}
-	if sortCondition == "" {
-		sortCondition = ` ORDER BY modify_time DESC `
-	}
-
-	total, err := models.GetReportPdfCountByCondition(condition, pars)
-	if err != nil {
-		br.Msg = "获取研报列表失败"
-		br.ErrMsg = "获取研报列表统计失败,Err:" + err.Error()
-		return
-	}
-
-	startSize := utils.StartIndex(currentIndex, pageSize)
-	reportList, err := models.GetReportPdfByCondition(condition, sortCondition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "获取研报列表失败"
-		br.ErrMsg = "获取研报列表失败,Err:" + err.Error()
-		return
-	}
-
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.ReportPdfListResp)
-	resp.List = reportList
-	resp.Paging = page
-
-	br.Ret = 200
-	br.Success = true
-	br.Data = resp
-	br.Msg = "获取成功"
-}
-
-// Edit
-// @Title 编辑研报
-// @Description 编辑研报
-// @Param	request	body request.ReportPdfEditReq true "type json string"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /edit [post]
-func (this *ReportPdfController) Edit() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.ReportPdfEditReq
-	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
-		br.Msg = "参数错误"
-		br.ErrMsg = "参数错误,Err:" + err.Error()
-		return
-	}
-	if req.ClassifyIdFirst <= 0 {
-		br.Msg = "请选择研报所属的一级分类"
-		return
-	}
-	if req.ClassifyIdSecond <= 0 {
-		br.Msg = "请选择研报所属的二级分类"
-		return
-	}
-	if req.PdfUrl == "" {
-		br.Msg = "请上传研报文件"
-		return
-	}
-	if req.PdfName == "" {
-		br.Msg = "请填写研报名称"
-		return
-	}
-	reportPdf, err := models.GetReportPdfById(req.ReportPdfId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "研报不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "获取研报失败"
-		br.ErrMsg = "获取研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	nameFirst, err := models.GetClassifyById(req.ClassifyIdFirst)
-	if err != nil {
-		br.Msg = "文件编辑失败"
-		br.ErrMsg = "一级类名获取失败,Err:" + err.Error()
-		return
-	}
-	nameSecond, err := models.GetClassifyById(req.ClassifyIdSecond)
-	if err != nil {
-		br.Msg = "文件编辑失败"
-		br.ErrMsg = "二级类名获取失败,Err:" + err.Error()
-		return
-	}
-	if reportPdf.PdfName != req.PdfName || reportPdf.Title != req.Title || reportPdf.ClassifyIdFirst != req.ClassifyIdFirst || reportPdf.ClassifyIdSecond != req.ClassifyIdSecond || reportPdf.Author != req.Author || reportPdf.Abstract != req.Abstract || reportPdf.PdfUrl != req.PdfUrl {
-		reportPdf.Title = req.Title
-		reportPdf.PdfName = req.PdfName
-		reportPdf.ClassifyIdFirst = req.ClassifyIdFirst
-		reportPdf.ClassifyIdSecond = req.ClassifyIdSecond
-		reportPdf.ClassifyNameFirst = nameFirst.ClassifyName
-		reportPdf.ClassifyNameSecond = nameSecond.ClassifyName
-		reportPdf.Author = req.Author
-		reportPdf.Abstract = req.Abstract
-		reportPdf.PdfUrl = req.PdfUrl
-		reportPdf.ModifyTime = time.Now()
-		err = reportPdf.Update([]string{"pdf_name", "title", "classify_id_first", "classify_id_second", "classify_name_first", "classify_name_second", "author", "abstract", "pdf_url", "modify_time"})
-		if err != nil {
-			br.Msg = "文件更新失败"
-			br.ErrMsg = "文件更新失败,Err:" + err.Error()
-			return
-		}
-		// 编辑es
-		go func(reportPdf *models.ReportPdf) {
-			reportpdfView := reportPdf.ToView()
-			docId := strconv.Itoa(reportpdfView.ReportPdfId)
-			err = elastic.EsAddOrEditReportPdf(utils.MINI_REPORT_INDEX_NAME, docId, reportpdfView)
-			if err != nil {
-				utils.FileLog.Info("pdf研报es编辑失败,Err:" + err.Error())
-				return
-			}
-			utils.FileLog.Info("pdf研报es编辑成功, pdfId:" + docId)
-		}(reportPdf)
-	}
-	br.Msg = "研报编辑成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// Publish
-// @Title 发布研报
-// @Description 发布研报
-// @Param   ReportPdfId   query   string  true       "pdf研报id"
-// @Success 200 {object} models.BaseResponse
-// @router /publish [get]
-func (this *ReportPdfController) Publish() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	ReportPdfId, _ := this.GetInt("ReportPdfId")
-	reportPdf, err := models.GetReportPdfById(ReportPdfId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "研报不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "获取研报失败"
-		br.ErrMsg = "获取研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-	if reportPdf.State == utils.ReportStatusUp {
-		br.Msg = "研报已发布"
-		return
-	}
-	reportPdf.State = utils.ReportStatusUp
-	reportPdf.PublishTime = time.Now()
-	err = reportPdf.Update([]string{"state", "publish_time"})
-	if err != nil {
-		br.Msg = "发布研报失败"
-		br.ErrMsg = "发布研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	// 修改es
-	go func(reportPdf *models.ReportPdf) {
-		reportpdfView := reportPdf.ToView()
-		docId := strconv.Itoa(reportpdfView.ReportPdfId)
-		err = elastic.EsAddOrEditReportPdf(utils.MINI_REPORT_INDEX_NAME, docId, reportpdfView)
-		if err != nil {
-			utils.FileLog.Info("pdf研报es发布失败,Err:" + err.Error())
-			return
-		}
-		utils.FileLog.Info("pdf研报es发布成功, pdfId:" + docId)
-	}(reportPdf)
-	br.Msg = "发布研报成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// PublishCancel
-// @Title 取消发布研报
-// @Description 取消发布研报
-// @Param   ReportPdfId   query   string  true       "pdf研报id"
-// @Success 200 {object} models.BaseResponse
-// @router /publishCancel [get]
-func (this *ReportPdfController) PublishCancel() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	ReportPdfId, _ := this.GetInt("ReportPdfId")
-	reportPdf, err := models.GetReportPdfById(ReportPdfId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "研报不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "获取研报失败"
-		br.ErrMsg = "获取研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-	if reportPdf.State == utils.ReportStatusDown {
-		br.Msg = "研报已撤销"
-		return
-	}
-	reportPdf.State = utils.ReportStatusDown
-	err = reportPdf.Update([]string{"state"})
-	if err != nil {
-		br.Msg = "发布研报失败"
-		br.ErrMsg = "发布研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-	// 修改es
-	go func(reportPdf *models.ReportPdf) {
-		reportpdfView := reportPdf.ToView()
-		docId := strconv.Itoa(reportpdfView.ReportPdfId)
-		err = elastic.EsAddOrEditReportPdf(utils.MINI_REPORT_INDEX_NAME, docId, reportpdfView)
-		if err != nil {
-			utils.FileLog.Info("pdf研报es取消发布失败,Err:" + err.Error())
-			return
-		}
-		utils.FileLog.Info("pdf研报es取消发布成功, pdfId:" + docId)
-	}(reportPdf)
-	br.Msg = "撤销研报成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// delete
-// @Title 删除研报
-// @Description 删除研报
-// @Param   ReportPdfId   query   string  true       "pdf研报id"
-// @Success 200 {object} models.BaseResponse
-// @router /delete [get]
-func (this *ReportPdfController) Delete() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	ReportPdfId, _ := this.GetInt("ReportPdfId")
-	reportPdf, err := models.GetReportPdfById(ReportPdfId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "研报不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "获取研报失败"
-		br.ErrMsg = "获取研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-	if reportPdf.State == utils.ReportStatusUp {
-		br.Msg = "研报已发布,不可以删除"
-		return
-	}
-
-	reportPdf.State = utils.ReportStatusDown
-	err = reportPdf.Delete()
-	if err != nil {
-		br.Msg = "研报删除失败"
-		br.ErrMsg = "研报删除失败,系统错误,Err:" + err.Error()
-		return
-	}
-	// 删除es
-	go func(reportPdf *models.ReportPdf) {
-		reportpdfView := reportPdf.ToView()
-		docId := strconv.Itoa(reportpdfView.ReportPdfId)
-		err = elastic.EsDeleteData(utils.MINI_REPORT_INDEX_NAME, docId)
-		if err != nil {
-			utils.FileLog.Info("pdf研报es删除失败,Err:" + err.Error())
-			return
-		}
-		utils.FileLog.Info("pdf研报es删除成功, pdfId:" + docId)
-	}(reportPdf)
-	br.Msg = "删除研报成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// Detail
-// @Title 研报详情
-// @Description 研报详情
-// @Param   ReportPdfId   query   string  true       "pdf研报id"
-// @Success 200 {object} models.BaseResponse
-// @router /detail [get]
-func (this *ReportPdfController) Detail() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	ReportPdfId, _ := this.GetInt("ReportPdfId")
-	reportPdf, err := models.GetReportPdfById(ReportPdfId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "研报不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "获取研报失败"
-		br.ErrMsg = "获取研报失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	br.Data = reportPdf
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取研报成功"
-}

+ 0 - 587
controllers/report_push_status.go

@@ -1,587 +0,0 @@
-package controllers
-
-import (
-	"encoding/json"
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/models/request"
-	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/utils"
-	"fmt"
-	"strconv"
-	"strings"
-	"time"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type ReportPushStatusController struct {
-	BaseAuthController
-}
-
-// List
-// @Title pdf研报列表
-// @Description pdf研报列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   ClassifyIds   query   string  true       "分类id,可多选用英文,隔开"
-// @Param   ChartPermissionIds   query   string  true       "品种id,可多选用英文,隔开"
-// @Param   PublishStartDate   query   string  true       "发布开始时间"
-// @Param   PublishEndDate   query   string  true       "发布结束时间"
-// @Param   PushStartDate   query   string  true       "推送开始时间"
-// @Param   PushEndDate   query   string  true       "推送结束时间"
-// @Param   KeyWord   query   string  true       "报告标题/创建人"
-// @Param   SelectedIds   query   string  true       "选择的报告id, isSelectAll:为true时,反选"
-// @Param   IsSelectAll   query   bool  true       "是否全选"
-// @Param   SortParam   query   string  true       "排序字段"
-// @Param   SortType   query   string  true       "排序方式"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /list [get]
-func (this *ReportPushStatusController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	classifyIds := this.GetString("ClassifyIds")
-	selectedIds := this.GetString("SelectedIds")
-	isSelectAll, _ := this.GetBool("IsSelectAll")
-	chartPermissionIds := this.GetString("ChartPermissionIds")
-	publishStartDate := this.GetString("PublishStartDate")
-	publishEndDate := this.GetString("PublishEndDate")
-	pushStartDate := this.GetString("PushStartDate")
-	pushEndDate := this.GetString("PushEndDate")
-	keyWord := this.GetString("KeyWord")
-	sortParam := this.GetString("SortParam")
-	sortType := this.GetString("SortType")
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	var condition string
-	var pars []interface{}
-	if publishStartDate != "" && publishEndDate != "" {
-		condition += " AND publish_time >= ?"
-		publishStartTime, err := time.Parse(utils.FormatDate, publishStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishStartDateStr := publishStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishStartDateStr)
-
-		condition += " AND publish_time <= ?"
-		publishEndTime, err := time.Parse(utils.FormatDate, publishEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishEndTime = publishEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		publishEndDateStr := publishEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishEndDateStr)
-	}
-	if pushStartDate != "" && pushEndDate != "" {
-		condition += " AND push_time >= ? "
-		pushStartTime, err := time.Parse(utils.FormatDate, pushStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		pushStartDateStr := pushStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, pushStartDateStr)
-
-		condition += " AND push_time <= ? "
-		pushEndTime, err := time.Parse(utils.FormatDate, pushEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		pushEndTime = pushEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		pushEndDateStr := pushEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, pushEndDateStr)
-	}
-	if keyWord != "" {
-		condition += ` AND title like ?  `
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 1)
-	}
-	var sortCondition string
-	if sortParam != "" && sortType != "" {
-		sortCondition = " ORDER BY "
-		var param, sort string
-		switch sortParam {
-		case "PublishTime":
-			param = "publish_time"
-		case "PushTime":
-			param = "push_time"
-		}
-		switch sortType {
-		case "asc":
-			sort = " ASC "
-		case "desc":
-			sort = " DESC "
-		}
-		if param != "" && sort != "" {
-			sortCondition += param + " " + sort
-		} else {
-			sortCondition = ""
-		}
-	}
-	if sortCondition == "" {
-		sortCondition = ` ORDER BY publish_time DESC `
-	}
-
-	classifyIdList := make([]int, 0)
-	if classifyIds != "" {
-		classifyArrStr := strings.Split(classifyIds, ",")
-		if len(classifyArrStr) > 0 {
-			for _, v := range classifyArrStr {
-				tmp, _ := strconv.Atoi(v)
-				classifyIdList = append(classifyIdList, tmp)
-			}
-		}
-	}
-	if chartPermissionIds != "" {
-		idStrs := strings.Split(chartPermissionIds, ",")
-		idInts := make([]int, 0)
-		for _, id := range idStrs {
-			tmp, _ := strconv.Atoi(id)
-			idInts = append(idInts, tmp)
-		}
-		tmpClassifyIds, err := models.GetClassifyIdsListByIds(idInts)
-		if err != nil {
-			br.Msg = "获取研报列表失败"
-			br.ErrMsg = "品种获取分类失败,Err:" + err.Error()
-			return
-		}
-		if len(tmpClassifyIds) == 0 {
-			resp := new(response.ReportPushStatusResp)
-			resp.Paging = paging.GetPaging(currentIndex, pageSize, 0)
-			br.Data = resp
-			br.Msg = "查询成功"
-			br.Success = true
-			br.Ret = 200
-			return
-		}
-		classifyIdList = append(classifyIdList, tmpClassifyIds...)
-	}
-	if len(classifyIdList) > 0 {
-		classifyStrIds := make([]string, 0)
-		for _, v := range classifyIdList {
-			classifyStrIds = append(classifyStrIds, strconv.Itoa(v))
-		}
-		classifyList, err := models.GetClassifyListByIds(classifyStrIds)
-		if err != nil {
-			br.Msg = "获取研报列表失败"
-			br.ErrMsg = "获取研报分类失败,Err:" + err.Error()
-			return
-		}
-		childClasifyIdList := make([]int, 0)
-		for _, v := range classifyList {
-			if v.HasChild == 0 {
-				childClasifyIdList = append(childClasifyIdList, v.Id)
-			}
-		}
-		condition += ` AND (classify_id_first IN (%s) OR classify_id_second IN (%s) OR classify_id_third IN (%s))`
-		condition = fmt.Sprintf(condition, utils.GetOrmReplaceHolder(len(childClasifyIdList)), utils.GetOrmReplaceHolder(len(childClasifyIdList)), utils.GetOrmReplaceHolder(len(childClasifyIdList)))
-		pars = append(pars, childClasifyIdList, childClasifyIdList, childClasifyIdList)
-	}
-	if isSelectAll {
-		if selectedIds != "" {
-			selectIdStrs := strings.Split(selectedIds, ",")
-			if len(selectIdStrs) > 0 {
-				condition += ` AND report_id NOT IN (` + utils.GetOrmReplaceHolder(len(selectIdStrs)) + `)`
-				pars = append(pars, selectIdStrs)
-			}
-		}
-	} else {
-		if selectedIds != "" {
-			selectIdStrs := strings.Split(selectedIds, ",")
-			if len(selectIdStrs) > 0 {
-				condition += ` AND report_id IN (` + utils.GetOrmReplaceHolder(len(selectIdStrs)) + `)`
-				pars = append(pars, selectIdStrs)
-			}
-		}
-	}
-	startSize := utils.StartIndex(currentIndex, pageSize)
-	total, err := models.GetReportCountByCondition(condition, pars)
-	if err != nil {
-		br.Msg = "获取研报列表失败"
-		br.ErrMsg = "获取研报列表统计失败,Err:" + err.Error()
-		return
-	}
-	reportList, err := models.GetReportPushStatusListByCondition(condition, sortCondition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "获取研报列表失败"
-		br.ErrMsg = "获取研报列表失败,Err:" + err.Error()
-		return
-	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.ReportPushStatusResp)
-	resp.List = reportList
-	resp.Paging = page
-
-	br.Data = resp
-	br.Msg = "获取成功"
-	br.Ret = 200
-	br.Success = true
-}
-
-// PushCancel
-// @Title 取消推送报告
-// @Description 取消推送报告
-// @Param	request	body request.ReportPdfEditReq true "type json string"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /pushCancel [post]
-func (this *ReportPushStatusController) PushCancel() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	var req request.ReportPushStatusReq
-	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
-		br.Msg = "参数错误"
-		br.ErrMsg = "参数错误,Err:" + err.Error()
-		return
-	}
-
-	reportPush, err := models.GetReportPushStatusByReportId(req.ReportPushStatusId, 1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "推送失败"
-		br.ErrMsg = "获取推送消息失败,Err:" + err.Error()
-		return
-	}
-	if reportPush != nil {
-		reportPush.State = 0
-		reportPush.ModifyTime = time.Now()
-		err = reportPush.Update([]string{"state", "modify_time"})
-		if err != nil {
-			br.Msg = "取消推送失败"
-			br.ErrMsg = "取消推送失败,Err:" + err.Error()
-			return
-		}
-	}
-
-	br.Msg = "取消推送成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// Push
-// @Title 推送报告
-// @Description 推送报告
-// @Param	request	body request.ReportPdfEditReq true "type json string"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /push [post]
-func (this *ReportPushStatusController) Push() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	var req request.ReportPushStatusReq
-	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
-		br.Msg = "参数错误"
-		br.ErrMsg = "参数错误,Err:" + err.Error()
-		return
-	}
-
-	reportPush, err := models.GetReportPushStatusByReportId(req.ReportPushStatusId, 0)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "推送失败"
-		br.ErrMsg = "获取推送消息失败,Err:" + err.Error()
-		return
-	}
-	if reportPush != nil {
-		reportPush.State = 1
-		reportPush.ModifyTime = time.Now()
-		reportPush.PushTime = time.Now()
-		err = reportPush.Update([]string{"state", "modify_time", "push_time"})
-		if err != nil {
-			br.Msg = "推送失败"
-			br.ErrMsg = "推送失败,Err:" + err.Error()
-			return
-		}
-
-	}
-
-	br.Msg = "推送成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// BatchPush
-// @Title 批量推送报告
-// @Description 批量推送报告
-// @Param	request	body request.BatchReportModifyPushStatusReq true "type json string"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /batch/push [post]
-func (this *ReportPushStatusController) BatchPush() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	var req request.BatchReportModifyPushStatusReq
-	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
-		br.Msg = "参数错误"
-		br.ErrMsg = "参数错误,Err:" + err.Error()
-		return
-	}
-	var condition string
-	var pars []interface{}
-	condition = ` AND state = 0 `
-	if req.PublishStartDate != "" && req.PublishEndDate != "" {
-		condition += " AND publish_time >= ?"
-		publishStartTime, err := time.Parse(utils.FormatDate, req.PublishStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishStartDateStr := publishStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishStartDateStr)
-
-		condition += " AND publish_time <= ?"
-		publishEndTime, err := time.Parse(utils.FormatDate, req.PublishEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishEndTime = publishEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		publishEndDateStr := publishEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishEndDateStr)
-	}
-	if req.PushStartDate != "" && req.PushEndDate != "" {
-		condition += " AND push_time >= ?"
-		pushStartTime, err := time.Parse(utils.FormatDate, req.PushStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		pushStartDateStr := pushStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, pushStartDateStr)
-
-		condition += " AND push_time <= ?"
-		pushEndTime, err := time.Parse(utils.FormatDate, req.PushEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		pushEndTime = pushEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		pushEndDateStr := pushEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, pushEndDateStr)
-	}
-	if req.KeyWord != "" {
-		condition += ` AND title like ?  `
-		pars = utils.GetLikeKeywordPars(pars, req.KeyWord, 1)
-	}
-	classifyIdList := make([]int, 0)
-	classifyIdList = append(classifyIdList, req.ClassifyIds...)
-	tmpClassifyList, err := models.GetClassifyIdsListByIds(req.ChartPermissionIds)
-	if err != nil {
-		br.Msg = "获取研报列表失败"
-		br.ErrMsg = "品种获取分类失败,Err:" + err.Error()
-		return
-	}
-	classifyIdList = append(classifyIdList, tmpClassifyList...)
-	if len(classifyIdList) > 0 {
-		classifyIdList = utils.Unique(classifyIdList)
-		condition += ` AND (classify_id_first IN (%s) AND classify_id_second IN (%s) AND classify_id_third IN (%s))`
-		condition = fmt.Sprintf(condition, utils.GetOrmReplaceHolder(len(classifyIdList)), utils.GetOrmReplaceHolder(len(classifyIdList)), utils.GetOrmReplaceHolder(len(classifyIdList)))
-		pars = append(pars, classifyIdList, classifyIdList, classifyIdList)
-	}
-	if req.IsSelectAll {
-		if len(req.SelectedIds) > 0 {
-			condition += ` AND report_push_status_id NOT IN (` + utils.GetOrmReplaceHolder(len(req.SelectedIds)) + `)`
-			pars = append(pars, req.SelectedIds)
-		}
-	} else {
-		if len(req.SelectedIds) > 0 {
-			condition += ` AND report_push_status_id IN (` + utils.GetOrmReplaceHolder(len(req.SelectedIds)) + `)`
-			pars = append(pars, req.SelectedIds)
-		}
-	}
-	reportPushStatusIds, err := models.GetReportPushStatusIdListByCondition(condition, pars)
-	if err != nil {
-		br.Msg = "批量推送失败"
-		br.ErrMsg = "查询研报失败,Err:" + err.Error()
-		return
-	}
-	// reportPush, err := models.GetReportPushStatusByIdAndState(reportIds, 0)
-	// if err != nil {
-	// 	br.Msg = "批量推送失败"
-	// 	br.ErrMsg = "查询推送状态失败,Err:" + err.Error()
-	// 	return
-	// }
-	// existReportMap := make(map[int]struct{})
-	// for _, v := range reportPush {
-	// 	existReportMap[v.ReportId] = struct{}{}
-	// }
-	// existReportIds := make([]int, 0)
-	// for _, v := range reportIds {
-	// 	if _, ok := existReportMap[v]; ok {
-	// 		existReportIds = append(existReportIds, v)
-	// 	}
-	// }
-
-	err = models.BatchPushReport(reportPushStatusIds)
-	if err != nil {
-		br.Msg = "批量推送失败"
-		br.ErrMsg = "批量修改推送失败,Err:" + err.Error()
-		return
-	}
-
-	br.Msg = "推送成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// BatchPushCancel
-// @Title 批量撤销推送报告
-// @Description 批量撤销推送报告
-// @Param	request	body request.BatchReportModifyPushStatusReq true "type json string"
-// @Success 200 {object} models.ReportAuthorResp
-// @router /batch/pushCancel [post]
-func (this *ReportPushStatusController) BatchPushCancel() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	var req request.BatchReportModifyPushStatusReq
-	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
-		br.Msg = "参数错误"
-		br.ErrMsg = "参数错误,Err:" + err.Error()
-		return
-	}
-	var condition string
-	var pars []interface{}
-	condition = ` AND state = 1 `
-	if req.PublishStartDate != "" && req.PublishEndDate != "" {
-		condition += " AND publish_time >= ?"
-		publishStartTime, err := time.Parse(utils.FormatDate, req.PublishStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishStartDateStr := publishStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishStartDateStr)
-
-		condition += " AND publish_time <= ?"
-		publishEndTime, err := time.Parse(utils.FormatDate, req.PublishEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		publishEndTime = publishEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		publishEndDateStr := publishEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, publishEndDateStr)
-	}
-	if req.PushStartDate != "" && req.PushEndDate != "" {
-		condition += " AND push_time >= ?"
-		pushStartTime, err := time.Parse(utils.FormatDate, req.PushStartDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		pushStartDateStr := pushStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, pushStartDateStr)
-
-		condition += " AND push_time <= ?"
-		pushEndTime, err := time.Parse(utils.FormatDate, req.PushEndDate)
-		if err != nil {
-			br.Msg = "日期格式有误"
-			br.ErrMsg = "日期格式有误,Err:" + err.Error()
-			return
-		}
-		pushEndTime = pushEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		pushEndDateStr := pushEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, pushEndDateStr)
-	}
-	if req.KeyWord != "" {
-		condition += ` AND title like ?  `
-		pars = utils.GetLikeKeywordPars(pars, req.KeyWord, 1)
-	}
-	classifyIdList := make([]int, 0)
-	classifyIdList = append(classifyIdList, req.ClassifyIds...)
-	tmpClassifyList, err := models.GetClassifyIdsListByIds(req.ChartPermissionIds)
-	if err != nil {
-		br.Msg = "获取研报列表失败"
-		br.ErrMsg = "品种获取分类失败,Err:" + err.Error()
-		return
-	}
-	classifyIdList = append(classifyIdList, tmpClassifyList...)
-	if len(classifyIdList) > 0 {
-		classifyIdList = utils.Unique(classifyIdList)
-		condition += ` AND (classify_id_first IN (%s) AND classify_id_second IN (%s) AND classify_id_third IN (%s))`
-		condition = fmt.Sprintf(condition, utils.GetOrmReplaceHolder(len(classifyIdList)), utils.GetOrmReplaceHolder(len(classifyIdList)), utils.GetOrmReplaceHolder(len(classifyIdList)))
-		pars = append(pars, classifyIdList, classifyIdList, classifyIdList)
-	}
-	if req.IsSelectAll {
-		if len(req.SelectedIds) > 0 {
-			condition += ` AND report_push_status_id NOT IN (` + utils.GetOrmReplaceHolder(len(req.SelectedIds)) + `)`
-			pars = append(pars, req.SelectedIds)
-		}
-	} else {
-		if len(req.SelectedIds) > 0 {
-			condition += ` AND report_push_status_id IN (` + utils.GetOrmReplaceHolder(len(req.SelectedIds)) + `)`
-			pars = append(pars, req.SelectedIds)
-		}
-	}
-
-	reportPushStatusIds, err := models.GetReportPushStatusIdListByCondition(condition, pars)
-	if err != nil {
-		br.Msg = "批量推送失败"
-		br.ErrMsg = "查询研报失败,Err:" + err.Error()
-		return
-	}
-	// reportIds, err := models.GetReportIdListByCondition(condition, pars)
-	// if err != nil {
-	// 	br.Msg = "批量推送失败"
-	// 	br.ErrMsg = "查询研报失败,Err:" + err.Error()
-	// 	return
-	// }
-	// reportPush, err := models.GetReportPushStatusByReportIdAndState(reportIds, 1)
-	// if err != nil {
-	// 	br.Msg = "批量推送失败"
-	// 	br.ErrMsg = "查询推送状态失败,Err:" + err.Error()
-	// 	return
-	// }
-	// existReportMap := make(map[int]struct{})
-	// for _, v := range reportPush {
-	// 	existReportMap[v.ReportId] = struct{}{}
-	// }
-	// existReportIds := make([]int, 0)
-	// for _, v := range reportIds {
-	// 	if _, ok := existReportMap[v]; ok {
-	// 		existReportIds = append(existReportIds, v)
-	// 	}
-	// }
-
-	err = models.BatchPushCancelReport(reportPushStatusIds)
-	if err != nil {
-		br.Msg = "批量取消推送失败"
-		br.ErrMsg = "批量修改推送失败,Err:" + err.Error()
-		return
-	}
-
-	br.Msg = "撤销推送成功"
-	br.Success = true
-	br.Ret = 200
-}

+ 0 - 39
controllers/seller.go

@@ -3,7 +3,6 @@ package controllers
 import (
 	"eta/eta_mini_crm/models"
 	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/utils"
 )
 
 type SellerController struct {
@@ -99,41 +98,3 @@ func (this *SellerController) List() {
 	br.Ret = 200
 	br.Data = resp
 }
-
-// List
-// @Title 获取营业部下面的部门
-// @Description 获取营业部下面的部门
-// @Success 200 {object} []models.SysDepartmentList
-// @router /department/list [get]
-func (this *SellerController) DepartmentList() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	parentDepartment, err := models.GetSysDepartmentByName("营业部")
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "营业部不存在, 请添加营业部门"
-			return
-		}
-		br.Msg = "获取营业部失败"
-		br.ErrMsg = "获取营业部失败,系统异常,Err:" + err.Error()
-		return
-	}
-	departmentList, err := models.GetChildSysDepartmentListById(parentDepartment.SysDepartmentId)
-	if err != nil {
-		br.Msg = "获取营业部失败"
-		br.ErrMsg = "获取营业部失败,系统异常,Err:" + err.Error()
-		return
-	}
-	if len(departmentList) == 0 {
-		departmentList = make([]*models.SysDepartmentList, 0)
-	}
-
-	br.Msg = "获取成功"
-	br.Ret = 200
-	br.Success = true
-	br.Data = departmentList
-}

+ 8 - 4
controllers/sys_department.go

@@ -14,6 +14,7 @@ type SysDepartmentController struct {
 	BaseAuthController
 }
 
+// List
 // @Title 获取部门列表
 // @Description 获取部门列表接口
 // @Success 200 {object} system.SysDepartmentListResp
@@ -41,6 +42,7 @@ func (this *SysDepartmentController) List() {
 	br.Data = resp
 }
 
+// Add
 // @Title 新增部门
 // @Description 新增部门接口
 // @Param	request	body system.SysDepartmentAddReq true "type json string"
@@ -89,6 +91,7 @@ func (this *SysDepartmentController) Add() {
 	br.Msg = "新增成功"
 }
 
+// Edit
 // @Title 编辑部门
 // @Description 编辑部门接口
 // @Param	request	body request.SysDepartmentEditReq true "type json string"
@@ -132,10 +135,10 @@ func (this *SysDepartmentController) Edit() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
-	if oldSysDepartment.SysDepartmentName == "营业部" {
-		br.Msg = "营业部不能编辑"
-		return
-	}
+	//if oldSysDepartment.SysDepartmentName == "营业部" {
+	//	br.Msg = "营业部不能编辑"
+	//	return
+	//}
 
 	newSysDepartment, err := models.GetSysDepartmentByName(req.SysDepartmentName)
 	if err != nil && err != orm.ErrNoRows {
@@ -162,6 +165,7 @@ func (this *SysDepartmentController) Edit() {
 	br.Msg = "编辑成功"
 }
 
+// Delete
 // @Title 删除分组
 // @Description 删除分组接口
 // @Param	request	body request.SysDepartmentDeleteReq true "type json string"

+ 0 - 100
controllers/sys_message_report.go

@@ -1,100 +0,0 @@
-package controllers
-
-import (
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/utils"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type SysMessageReportController struct {
-	BaseAuthController
-}
-
-// @Title 阅读消息
-// @Description 阅读消息
-// @Param	request	body system.SysRoleDeleteReq true "type json string"
-// @Success 200 查看成功
-// @router /read [post]
-func (this *SysMessageReportController) Read() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	err := models.UpdateReadSysMessageReportByUserId(this.SysUser.SysUserId)
-	if err != nil {
-		br.Msg = "更新消息状态失败"
-		br.ErrMsg = "更新消息状态失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	br.Msg = "查看成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// List
-// @Title 系统消息列表
-// @Description 系统消息列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Success 200 {object} response.SysRoleListResp
-// @router /list [get]
-func (this *SysMessageReportController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-
-	var startSize int
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	startSize = utils.StartIndex(currentIndex, pageSize)
-
-	total, err := models.GetSysMessageReportCountBySysUserId(this.SysUser.SysUserId)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	list, err := models.GetSysMessageReportBySysUserId(this.SysUser.SysUserId, startSize, pageSize)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	messageList := make([]*models.SysMessageReportView, 0)
-	for _, v := range list {
-		messageList = append(messageList, &models.SysMessageReportView{
-			SysMessageReportId: v.SysMessageReportId,
-			UserId:             v.UserId,
-			ReceiveSysUserId:   v.ReceiveSysUserId,
-			MessageType:        v.MessageType,
-			Content:            v.Content,
-			Remark:             v.Remark,
-			IsRead:             v.IsRead,
-			CreateTime:         v.CreateTime.Format(utils.FormatDateTime),
-			ModifyTime:         v.ModifyTime.Format(utils.FormatDateTime),
-		})
-
-	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.SysMessageListResp)
-	resp.List = messageList
-	resp.Paging = page
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}

+ 4 - 0
controllers/sys_role.go

@@ -90,6 +90,7 @@ func (this *SysRoleController) AllList() {
 	br.Data = resp
 }
 
+// Delete
 // @Title 删除角色
 // @Description 删除角色接口
 // @Param	request	body system.SysRoleDeleteReq true "type json string"
@@ -150,6 +151,7 @@ func (this *SysRoleController) Delete() {
 	br.Success = true
 }
 
+// Add
 // @Title 新增角色
 // @Description 新增角色接口
 // @Param	request	body request.SysRoleAddReq true "type json string"
@@ -199,6 +201,7 @@ func (this *SysRoleController) Add() {
 	br.Success = true
 }
 
+// Edit
 // @Title 新增角色
 // @Description 新增角色接口
 // @Param	request	body request.SysRoleAddReq true "type json string"
@@ -315,6 +318,7 @@ func (this *SysRoleController) ButtonList() {
 	br.Msg = "获取成功"
 }
 
+// SysMenuList
 // @Title 获取用户权限菜单
 // @Description 获取用户权限菜单接口
 // @Success 200 {object} system.MenuListResp

+ 1 - 0
controllers/sys_user.go

@@ -557,6 +557,7 @@ func (this *SysUserController) ResetMyPass() {
 	br.Ret = 200
 }
 
+// EditEnabled
 // @Title 开启/禁用系统用户
 // @Description 开启/禁用系统用户接口
 // @Param	request	body system.SysuserEditReq true "type json string"

+ 0 - 1298
controllers/user.go

@@ -1,1298 +0,0 @@
-package controllers
-
-import (
-	"encoding/json"
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/models/request"
-	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/services"
-	"eta/eta_mini_crm/utils"
-	"math"
-	"os"
-	"path/filepath"
-	"strings"
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-	"github.com/rdlucklib/rdluck_tools/paging"
-	"github.com/tealeg/xlsx"
-)
-
-type UserController struct {
-	BaseAuthController
-}
-
-// Add
-// @Title 添加新客户
-// @Description 添加新客户
-// @Param   request	body request.UserAddReq true "type json string"
-// @Success 200 {object} request.UserAddReq
-// @router /add [post]
-func (this *UserController) Add() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.UserAddReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	if req.RealName == "" {
-		br.Msg = "请输入姓名"
-		return
-	}
-	req.Phone = strings.TrimSpace(req.Phone)
-	req.Email = strings.TrimSpace(req.Email)
-	if req.Phone == "" && req.Email == "" {
-		br.Msg = "至少输入一个手机号或邮箱"
-		return
-	}
-
-	var userByPhone, userByEmail *models.User
-	if req.Phone != "" {
-		if req.AreaCode == "86" {
-			if !utils.ValidateMobileFormatat(req.Phone) {
-				br.Msg = "手机号格式有误, 请检查"
-				return
-			}
-		}
-		userByPhone, err = models.GetUserByPhone(req.Phone, req.AreaCode)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "添加用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if userByPhone != nil {
-			switch userByPhone.Status {
-			case 0:
-				userByPhone.Status = 2
-			case 1:
-				userByPhone.Status = 2
-			default:
-				br.Msg = "手机号已存在,请重新输入"
-				return
-			}
-		}
-	}
-	if req.Email != "" {
-		if !utils.ValidateEmailFormatat(req.Email) {
-			br.Msg = "邮箱格式有误, 请检查"
-			return
-		}
-		userByEmail, err = models.GetUserByEmail(req.Email)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "添加用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if userByEmail != nil {
-			switch userByEmail.Status {
-			case 0:
-				userByEmail.Status = 2
-			case 1:
-				userByEmail.Status = 2
-			default:
-				br.Msg = "邮箱已存在,请重新输入"
-				return
-			}
-		}
-	}
-	if req.SellerDepartmentId <= 0 {
-		br.Msg = "请选择营业部"
-		return
-	}
-	if req.ValidStartTime == "" || req.ValidEndTime == "" {
-		br.Msg = "请选择合理的有效期范围"
-		return
-	}
-
-	validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
-	if err != nil {
-		br.Msg = "错误的日期格式"
-		return
-	}
-	validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
-	if err != nil {
-		br.Msg = "错误的日期格式"
-		return
-	}
-	if !validStartTime.Before(validEndTime) {
-		br.Msg = "请选择合理的有效期范围"
-		return
-	}
-	if req.Company == "" {
-		br.Msg = "请输入所属公司"
-		return
-	}
-	if userByPhone != nil && userByEmail != nil && userByPhone.UserId != userByEmail.UserId {
-		br.Msg = "邮箱已存在,请重新输入"
-		return
-	}
-
-	user := &models.User{}
-	curTime := time.Now()
-	if userByPhone == nil && userByEmail == nil {
-		user.CreateTime = curTime
-		user.ModifyTime = curTime
-	}
-	if userByEmail != nil {
-		user = userByEmail
-	}
-	if userByPhone != nil {
-		user = userByPhone
-	}
-	validStartTime = validStartTime.Local().Add(-time.Hour * 8)
-	validEndTime = validEndTime.Local().Add(-time.Hour*8 + time.Hour*24 - time.Second)
-	if curTime.Before(validEndTime) {
-		user.Status = 2
-	} else {
-		br.Msg = "有效期截至时间必须大于当前时间"
-		return
-	}
-	sysDepartment, err := models.GetSysDepartmentById(req.SellerDepartmentId)
-	if err != nil {
-		br.Msg = "添加用户失败"
-		br.ErrMsg = "查询营业部失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	user.RealName = req.RealName
-	user.AreaCode = req.AreaCode
-	user.Phone = req.Phone
-	user.Email = req.Email
-	user.SellerDepartmentId = req.SellerDepartmentId
-	user.SellerDepartmentName = sysDepartment.SysDepartmentName
-	user.ValidStartTime = validStartTime
-	user.ValidEndTime = validEndTime
-	user.Company = req.Company
-	user.ModifyTime = curTime
-	err = models.SaveUser(user, req.ChartPermission)
-	if err != nil {
-		br.Msg = "添加客户失败"
-		br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	if user.Status == 2 {
-		userRecord := &models.UserChangeRecord{}
-		userRecord.UserId = user.UserId
-		userRecord.SysUserId = this.SysUser.SysUserId
-		userRecord.Content = this.SysUser.SysRealName + "新增用户"
-		userRecord.Insert()
-	}
-
-	br.Msg = "添加成功"
-	br.Success = true
-	br.Ret = 200
-
-}
-
-// edit
-// @Title 编辑客户
-// @Description 编辑客户
-// @Param   request	body request.UserEidtReq true "type json string"
-// @Success 200 {object} request.UserAddReq
-// @router /edit [post]
-func (this *UserController) Edit() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.UserEditReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	if req.RealName == "" {
-		br.Msg = "请输入姓名"
-		return
-	}
-	req.Phone = strings.TrimSpace(req.Phone)
-	req.Email = strings.TrimSpace(req.Email)
-	if req.Phone == "" && req.Email == "" {
-		br.Msg = "至少输入一个手机号或邮箱"
-		return
-	}
-	if req.Phone != "" {
-		if req.AreaCode == "86" {
-			if !utils.ValidateMobileFormatat(req.Phone) {
-				br.Msg = "手机号格式有误, 请检查"
-				return
-			}
-		}
-		user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "编辑用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if user != nil && user.UserId != req.UserId {
-			br.Msg = "手机号已存在,请重新输入"
-			return
-		}
-	}
-	if req.Email != "" {
-		if !utils.ValidateEmailFormatat(req.Email) {
-			br.Msg = "邮箱格式有误, 请检查"
-			return
-		}
-
-		user, err := models.GetUserByEmail(req.Email)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "编辑用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if user != nil && user.UserId != req.UserId {
-			br.Msg = "邮箱已存在,请重新输入"
-			return
-		}
-	}
-	if req.SellerDepartmentId <= 0 {
-		br.Msg = "请选择营业部"
-		return
-	}
-	if req.ValidStartTime == "" || req.ValidEndTime == "" {
-		br.Msg = "请选择合理的有效期范围"
-		return
-	}
-
-	validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
-	if err != nil {
-		br.Msg = "错误的日期格式"
-		return
-	}
-	validStartTime = validStartTime.In(time.Local).Add(-time.Hour * 8)
-	validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
-	if err != nil {
-		br.Msg = "错误的日期格式"
-		return
-	}
-	validEndTime = validEndTime.In(time.Local).Add(-time.Hour*8 + time.Hour*24 - time.Second)
-	if !validStartTime.Before(validEndTime) {
-		br.Msg = "请选择合理的有效期范围"
-		return
-	}
-	if req.Company == "" {
-		br.Msg = "请输入所属公司"
-		return
-	}
-
-	if req.IsEnabled && time.Now().After(validEndTime) {
-		br.Msg = "启用后,有效期必须大于当前时间"
-		return
-	}
-
-	user, err := models.GetUserById(req.UserId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "用户不存在或已删除,请重新刷新页面"
-			br.ErrMsg = "用户不存在或已删除,请重新刷新页面,Err:" + err.Error()
-			return
-		}
-		br.Msg = "编辑用户失败"
-		br.ErrMsg = "编辑用户失败, 系统错误,Err:" + err.Error()
-		return
-	}
-
-	sysDepartment, err := models.GetSysDepartmentById(req.SellerDepartmentId)
-	if err != nil {
-		br.Msg = "添加用户失败"
-		br.ErrMsg = "查询营业部失败,系统错误,Err:" + err.Error()
-		return
-	}
-	user.RealName = req.RealName
-	user.AreaCode = req.AreaCode
-	user.Phone = req.Phone
-	user.Email = req.Email
-	user.SellerDepartmentId = req.SellerDepartmentId
-	user.SellerDepartmentName = sysDepartment.SysDepartmentName
-	user.ValidStartTime = validStartTime
-	user.ValidEndTime = validEndTime
-	user.Company = req.Company
-	user.ModifyTime = time.Now()
-	// 当用户状态初始为潜在客户时,才更新创建时间
-	if user.Status == utils.UserStatusPotential {
-		user.CreateTime = time.Now()
-	}
-	oldStatus := user.Status
-	if !req.IsEnabled {
-		user.Status = 0
-	} else {
-		user.Status = 2
-	}
-	err = models.SaveUser(user, req.ChartPermission)
-	if err != nil {
-		br.Msg = "添加客户失败"
-		br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
-		return
-	}
-	record := &models.UserChangeRecord{}
-	record.UserId = req.UserId
-	record.SysUserId = this.SysUser.SysUserId
-	if oldStatus == utils.UserStatusPotential && user.Status == utils.UserStatusFormal {
-		record.Content = this.SysUser.SysRealName + "新增用户"
-	} else {
-		record.Content = this.SysUser.SysRealName + "编辑用户"
-	}
-	record.Insert()
-
-	br.Msg = "编辑成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// Check
-// @Title 编辑客户
-// @Description 编辑客户
-// @Param   request	body request.UserEidtReq true "type json string"
-// @Success 200 {object} request.UserAddReq
-// @router /check [post]
-func (this *UserController) Check() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.UserCheckReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	req.Phone = strings.TrimSpace(req.Phone)
-	req.Email = strings.TrimSpace(req.Email)
-	if req.Phone == "" && req.Email == "" {
-		br.Msg = "至少输入一个手机号或邮箱"
-		return
-	}
-	userCheckResp := new(response.UserCheckResp)
-
-	if req.Phone != "" {
-		if req.AreaCode == "86" {
-			if !utils.ValidateMobileFormatat(req.Phone) {
-				br.Msg = "手机号格式有误, 请检查"
-				return
-			}
-		}
-		user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "编辑用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if user != nil {
-			userCheckResp.UserId = user.UserId
-			userCheckResp.Status = user.Status
-			if user.Status == utils.UserStatusNo {
-				br.Ret = 200
-				br.Success = true
-				br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
-				br.Data = userCheckResp
-				return
-			}
-			if user.Status == utils.UserStatusPotential {
-				br.Ret = 200
-				br.Success = true
-				br.Msg = "该用户已在潜在列表,确认转客户并更新用户信息吗?"
-				br.Data = userCheckResp
-				return
-			}
-			if user.Status == utils.UserStatusFormal {
-				br.Msg = "手机号已存在,请重新输入"
-				return
-			}
-		}
-
-	}
-	if req.Email != "" {
-		if !utils.ValidateEmailFormatat(req.Email) {
-			br.Msg = "邮箱格式有误, 请检查"
-			return
-		}
-
-		user, err := models.GetUserByEmail(req.Email)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "编辑用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if user != nil {
-			userCheckResp.UserId = user.UserId
-			if user.Status == 0 {
-				br.Ret = 200
-				br.Success = true
-				br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
-				br.Data = userCheckResp
-				return
-			}
-			if user.Status == 1 {
-				br.Ret = 200
-				br.Success = true
-				br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
-				br.Data = userCheckResp
-				return
-			}
-			if user.Status == 2 {
-				br.Msg = "邮箱已存在,请重新输入"
-				return
-			}
-			return
-		}
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "邮箱或手机号合格"
-}
-
-// List
-// @Title 用户列表
-// @Description 用户列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   SellerDepartmentId   query   string  true       "营业部门id"
-// @Param   Status   query   int  true       "用户状态"
-// @Param   KeyWord   query   string  true       "手机号/邮箱/姓名"
-// @Param   IsRegistered   query   string  true       "是否注册"
-// @Param   IsSubscribed   query   string  true       "是否关注"
-// @Param   RegisterStartDate   query   string  true       "注册开始时间"
-// @Param   RegisterEndDate   query   string  true       "注册结束时间"
-// @Param   CreateStartDate   query   string  true       "创建开始时间"
-// @Param   CreateEndDate   query   string  true       "创建结束时间"
-// @Param   SortParam   query   string  true       "排序字段"
-// @Param   SortType   query   string  true       "排序方式"
-// @Success 200 {object} response.UserListResp
-// @router /list [get]
-func (this *UserController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	sellerDepartmentId, _ := this.GetInt("SellerDepartmentId", 0)
-	status := this.GetString("Status")
-	keyWord := this.GetString("KeyWord")
-	IsRegistered := this.GetString("IsRegistered")
-	IsSubscribed := this.GetString("IsSubscribed")
-	registerStartDate := this.GetString("RegisterStartDate")
-	registerEndDate := this.GetString("RegisterEndDate")
-	createStartDate := this.GetString("CreateStartDate")
-	createEndDate := this.GetString("CreateEndDate")
-	sortParma := this.GetString("SortParam")
-	sortType := this.GetString("SortType")
-
-	var condition string
-	var sortCondition string
-	var pars []interface{}
-
-	if keyWord != "" {
-		condition += ` AND (u.real_name LIKE ? OR u.phone LIKE ? OR u.email LIKE ?) `
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 3)
-	}
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	} else if pageSize > utils.PageSize100 {
-		pageSize = utils.PageSize100
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-
-	if sortParma != "" && sortType != "" {
-		sortCondition = " ORDER BY "
-		var param, sort string
-		switch sortParma {
-		case "RegisterTime":
-			param = "u.register_time"
-		case "CreateTime":
-			param = "u.create_time"
-		case "RestDate":
-			param = "u.valid_end_time"
-		}
-		switch sortType {
-		case "asc":
-			sort = " ASC "
-		case "desc":
-			sort = " DESC "
-		}
-		if param != "" && sort != "" {
-			sortCondition += param + " " + sort
-		} else {
-			sortCondition = ""
-		}
-	}
-	if sortCondition == "" {
-		sortCondition = " ORDER BY u.create_time DESC"
-	}
-
-	if sellerDepartmentId > 0 {
-		condition += ` AND u.seller_department_id = ? `
-		pars = append(pars, sellerDepartmentId)
-	}
-	switch status {
-	case "禁用":
-		condition += " AND u.status=? "
-		pars = append(pars, 0)
-	case "潜在":
-		condition += " AND u.status=? "
-		pars = append(pars, 1)
-	case "正式":
-		condition += " AND u.status=? "
-		pars = append(pars, 2)
-	case "":
-		condition += " AND (u.status=? OR u.status=?) "
-		pars = append(pars, 0, 2)
-	}
-	switch IsRegistered {
-	case "是":
-		condition += " AND u.is_registered=? "
-		pars = append(pars, true)
-	case "否":
-		condition += " AND u.is_registered=? "
-		pars = append(pars, false)
-	}
-	switch IsSubscribed {
-	case "是":
-		condition += " AND u.is_subscribed=? "
-		pars = append(pars, true)
-	case "否":
-		condition += " AND u.is_subscribed=? "
-		pars = append(pars, false)
-	}
-	if registerStartDate != "" {
-		registerStartTime, er := time.Parse(utils.FormatDate, registerStartDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.register_time>=? "
-		registerStartDateStr := registerStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, registerStartDateStr)
-	}
-	if registerEndDate != "" {
-		registerEndTime, er := time.Parse(utils.FormatDate, registerEndDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.register_time<=? "
-		// 结束时间包含今天
-		registerEndTime = registerEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		registerEndDateStr := registerEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, registerEndDateStr)
-	}
-	if createStartDate != "" {
-		createStartTime, er := time.Parse(utils.FormatDate, createStartDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.create_time>=? "
-		createStartDateStr := createStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, createStartDateStr)
-	}
-	if createEndDate != "" {
-		createEndTime, er := time.Parse(utils.FormatDate, createEndDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.create_time<=? "
-		// 结束时间包含今天
-		createEndTime = createEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		createEndDateStr := createEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, createEndDateStr)
-	}
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	} else if pageSize > utils.PageSize100 {
-		pageSize = utils.PageSize100
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	startSize := utils.StartIndex(currentIndex, pageSize)
-
-	total, err := models.GetUserCount(condition, pars)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	userList, err := models.GetUserListByConditonSort(condition, sortCondition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "查询用户失败"
-		br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
-		return
-	}
-	for _, u := range userList {
-		if u.ValidEndTime == "" {
-			u.RestDate = 0
-		} else {
-			endTime, err := time.Parse(utils.FormatDateTime, u.ValidEndTime)
-			if err != nil {
-				br.Msg = "用户有效时间格式有误"
-				br.ErrMsg = "用户有效时间格式有误,Err:" + err.Error()
-				return
-			}
-			// 对天数向上取整
-			daysBetween := int(math.Ceil(time.Until(endTime).Hours() / 24))
-			if daysBetween < 0 {
-				daysBetween = 0
-			}
-			u.RestDate = daysBetween
-		}
-	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.UserListResp)
-	resp.Paging = page
-	resp.List = userList
-
-	br.Data = resp
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-}
-
-// PotentialList
-// @Title 潜在用户列表
-// @Description 潜在用户列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   KeyWord   query   string  true       "手机号/邮箱"
-// @Param   SellerDepartmentId   query   int  true       "营业部id"
-// @Param   ApplyStatus   query   int  true       "申请状态"
-// @Param   RegisterStartDate   query   string  true       "注册开始时间"
-// @Param   RegisterEndDate   query   string  true       "注册结束时间"
-// @Param   LastUpdateStartDate query   string  true       "最后一次阅读开始时间"
-// @Param   LastUpdateEndDate   query   string  true       "最后一次阅读结束时间"
-// @Param   ApplyStartDate query   string  true       "申请开始时间"
-// @Param   ApplyEndDate   query   string  true       "申请结束时间"
-// @Param   SortParam   query   string  true       "排序字段"
-// @Param   SortType   query   string  true       "排序方式"
-// @Success 200 {object} response.UserListResp
-// @router /potential/list [get]
-func (this *UserController) PotentialList() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	keyWord := this.GetString("KeyWord")
-	sellerDepartmentId, _ := this.GetInt("SellerDepartmentId")
-	applyStatus := this.GetString("ApplyStatus")
-	applyStartDate := this.GetString("ApplyStartDate")
-	applyEndDate := this.GetString("ApplyEndDate")
-	registerStartDate := this.GetString("RegisterStartDate")
-	registerEndDate := this.GetString("RegisterEndDate")
-	lastUpdateStartDate := this.GetString("LastUpdateStartDate")
-	lastUpdateEndDate := this.GetString("LastUpdateEndDate")
-	sortParam := this.GetString("SortParam")
-	sortType := this.GetString("SortType")
-
-	userList, total, errMsg, msg, err := services.GetPotentialList(keyWord, sellerDepartmentId, applyStatus, pageSize, currentIndex, sortParam, sortType, registerStartDate, registerEndDate, lastUpdateStartDate, lastUpdateEndDate, applyStartDate, applyEndDate)
-	if err != nil {
-		if msg != "" {
-			br.Msg = msg
-		} else {
-			br.Msg = "获取失败"
-		}
-		if errMsg != "" {
-			br.ErrMsg = errMsg + ", Err:" + err.Error()
-		} else {
-			br.ErrMsg = "获取失败, Err:" + err.Error()
-		}
-	}
-
-	resp := new(response.UserListResp)
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp.Paging = page
-	resp.List = userList
-
-	br.Data = resp
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-}
-
-// PotentialEdit
-// @Title 编辑潜在客户(转客户)
-// @Description 编辑潜在客户(转客户)
-// @Param   request	body request.UserEidtReq true "type json string"
-// @Success 200 {object} request.UserAddReq
-// @router /potential/edit [post]
-func (this *UserController) PotentialEdit() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.UserEditReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	if req.RealName == "" {
-		br.Msg = "请输入姓名"
-		return
-	}
-	req.Phone = strings.TrimSpace(req.Phone)
-	req.Email = strings.TrimSpace(req.Email)
-	if req.Phone == "" && req.Email == "" {
-		br.Msg = "至少输入一个手机号或邮箱"
-		return
-	}
-	if req.Phone != "" {
-		if req.AreaCode == "86" {
-			if !utils.ValidateMobileFormatat(req.Phone) {
-				br.Msg = "手机号格式有误, 请检查"
-				return
-			}
-		}
-		user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "编辑用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if user != nil && user.UserId != req.UserId {
-			br.Msg = "手机号已存在,请重新输入"
-			return
-		}
-	}
-	if req.Email != "" {
-		if !utils.ValidateEmailFormatat(req.Email) {
-			br.Msg = "邮箱格式有误, 请检查"
-			return
-		}
-
-		user, err := models.GetUserByEmail(req.Email)
-		if err != nil && err != orm.ErrNoRows {
-			br.Msg = "编辑用户失败"
-			br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-			return
-		}
-		if user != nil && user.UserId != req.UserId {
-			br.Msg = "邮箱已存在,请重新输入"
-			return
-		}
-	}
-	if req.SellerDepartmentId <= 0 {
-		br.Msg = "请选择营业部"
-		return
-	}
-	if req.ValidStartTime == "" || req.ValidEndTime == "" {
-		br.Msg = "请选择合理的有效期范围"
-		return
-	}
-
-	validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
-	if err != nil {
-		br.Msg = "错误的日期格式"
-		return
-	}
-	validStartTime = validStartTime.In(time.Local).Add(-time.Hour * 8)
-	validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
-	if err != nil {
-		br.Msg = "错误的日期格式"
-		return
-	}
-	validEndTime = validEndTime.In(time.Local).Add(-time.Hour*8 + time.Hour*24 - time.Second)
-	if !validStartTime.Before(validEndTime) {
-		br.Msg = "请选择合理的有效期范围"
-		return
-	}
-	if req.Company == "" {
-		br.Msg = "请输入所属公司"
-		return
-	}
-
-	if req.IsEnabled && time.Now().After(validEndTime) {
-		br.Msg = "启用后,有效期必须大于当前时间"
-		return
-	}
-
-	user, err := models.GetUserById(req.UserId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "用户不存在或已删除,请重新刷新页面"
-			br.ErrMsg = "用户不存在或已删除,请重新刷新页面,Err:" + err.Error()
-			return
-		}
-		br.Msg = "编辑用户失败"
-		br.ErrMsg = "编辑用户失败, 系统错误,Err:" + err.Error()
-		return
-	}
-	department, err := models.GetSysDepartmentById(req.SellerDepartmentId)
-	if err != nil {
-		br.Msg = "编辑用户失败"
-		br.ErrMsg = "编辑用户失败, 系统错误,Err:" + err.Error()
-		return
-	}
-	user.RealName = req.RealName
-	user.AreaCode = req.AreaCode
-	user.Phone = req.Phone
-	user.Email = req.Email
-	user.SellerDepartmentId = req.SellerDepartmentId
-	user.SellerDepartmentName = department.SysDepartmentName
-	user.ValidStartTime = validStartTime
-	user.ValidEndTime = validEndTime
-	user.Company = req.Company
-	user.ModifyTime = time.Now()
-	// 当用户状态初始为潜在客户时,才更新创建时间
-	if user.Status == utils.UserStatusPotential {
-		user.CreateTime = time.Now()
-	}
-	oldStatus := user.Status
-	if !req.IsEnabled {
-		user.Status = 0
-	} else {
-		user.Status = 2
-	}
-	err = models.SaveUser(user, req.ChartPermission)
-	if err != nil {
-		br.Msg = "添加客户失败"
-		br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
-		return
-	}
-	record := &models.UserChangeRecord{}
-	record.UserId = req.UserId
-	record.SysUserId = this.SysUser.SysUserId
-	if oldStatus == utils.UserStatusPotential && user.Status == utils.UserStatusFormal {
-		record.Content = this.SysUser.SysRealName + "新增用户"
-	} else {
-		record.Content = this.SysUser.SysRealName + "编辑用户"
-	}
-	record.Insert()
-
-	br.Msg = "编辑成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// ExportPotentialExcel
-// @Title 导出潜在用户Excel
-// @Description 导出潜在用户Excel
-// @Param   KeyWord   query   string  true       "手机号/邮箱"
-// @Param   SellerDepartmentId   query   int  true       "营业部id"
-// @Param   ApplyStatus   query   int  true       "申请状态"
-// @Param   RegisterStartDate   query   string  true       "注册开始时间"
-// @Param   RegisterEndDate   query   string  true       "注册结束时间"
-// @Param   LastUpdateStartDate query   string  true       "最后一次阅读开始时间"
-// @Param   LastUpdateEndDate   query   string  true       "最后一次阅读结束时间"
-// @Param   ApplyStartDate query   string  true       "申请开始时间"
-// @Param   ApplyEndDate   query   string  true       "申请结束时间"
-// @Success 200 {object} request.UserAddReq
-// @router /potential/export/excel [get]
-func (this *UserController) ExportPotentialExcel() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	keyword := this.GetString("KeyWord")
-	sellerDepartmentId, _ := this.GetInt("SellerDepartmentId")
-	applyStatus := this.GetString("ApplyStatus")
-	registerStartDate := this.GetString("RegisterStartDate")
-	registerEndDate := this.GetString("RegisterEndDate")
-	lastUpdateStartDate := this.GetString("LastUpdateStartDate")
-	lastUpdateEndDate := this.GetString("LastUpdateEndDate")
-	applyStartDate := this.GetString("ApplyStartDate")
-	applyEndDate := this.GetString("ApplyEndDate")
-
-	total, err := models.GetPotentialUserTotal()
-	if err != nil {
-		br.Msg = "获取数据失败"
-		br.ErrMsg = "获取数据失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	userList, _, errMsg, msg, err := services.GetPotentialList(keyword, sellerDepartmentId, applyStatus, total, 0, "", "", registerStartDate, registerEndDate, lastUpdateStartDate, lastUpdateEndDate, applyStartDate, applyEndDate)
-	if err != nil {
-		if msg != "" {
-			br.Msg = msg
-		} else {
-			br.Msg = "获取失败"
-		}
-		if errMsg != "" {
-			br.ErrMsg = errMsg + ", Err:" + err.Error()
-		} else {
-			br.ErrMsg = "获取失败, Err:" + err.Error()
-		}
-	}
-
-	dir, _ := os.Executable()
-	exPath := filepath.Dir(dir)
-
-	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
-	xlsxFile := xlsx.NewFile()
-
-	sheetNew := new(xlsx.Sheet)
-	sheetNew, err = xlsxFile.AddSheet("潜在客户列表")
-	if err != nil {
-		br.Msg = "创建sheet失败"
-		br.ErrMsg = "创建sheet失败,系统错误,Err:" + err.Error()
-		return
-	}
-	titleRow := sheetNew.AddRow()
-	titleRow.AddCell().SetString("手机号")
-	titleRow.AddCell().SetString("姓名")
-	titleRow.AddCell().SetString("营业部")
-	titleRow.AddCell().SetString("邮箱")
-	titleRow.AddCell().SetString("注册时间")
-	titleRow.AddCell().SetString("申请时间")
-	titleRow.AddCell().SetString("最近一次阅读")
-	titleRow.AddCell().SetString("累计阅读次数")
-	titleRow.AddCell().SetString("申请状态")
-	for _, user := range userList {
-		row := sheetNew.AddRow()
-		row.AddCell().SetString(user.Phone)
-		row.AddCell().SetString(user.RealName)
-		row.AddCell().SetString(user.SellerDepartmentName)
-		row.AddCell().SetString(user.Email)
-		row.AddCell().SetString(user.RegisterTime)
-		row.AddCell().SetString(user.ApplyTime)
-		row.AddCell().SetString(user.LastUpdateTime)
-		row.AddCell().SetInt(user.ReadCnt)
-		switch user.ApplyStatus {
-		case 0:
-			row.AddCell().SetString("未申请")
-		case 1:
-			row.AddCell().SetString("已申请")
-		}
-	}
-	err = xlsxFile.Save(downLoadnFilePath)
-	if err != nil {
-		sheet, err := xlsxFile.AddSheet("无数据")
-		if err != nil {
-			br.Msg = "创建sheet失败"
-			br.ErrMsg = "创建sheet失败,系统错误,Err:" + err.Error()
-			return
-		}
-		rowSecName := sheet.AddRow()
-		celSecName := rowSecName.AddCell()
-		celSecName.SetString("无数据")
-		err = xlsxFile.Save(downLoadnFilePath)
-		if err != nil {
-			br.Msg = "保存文件失败"
-			br.ErrMsg = "保存文件失败,系统错误,Err:" + err.Error()
-			return
-		}
-	}
-	fileName := "潜在客户列表" + time.Now().Format("06.1.2")
-	this.Ctx.Output.Download(downLoadnFilePath, fileName)
-	defer os.Remove(downLoadnFilePath)
-
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "success"
-}
-
-// Detail
-// @Title 用户详情信息
-// @Description 用户详情信息
-// @Param   UserId   query   int  true       "用户id"
-// @Success 200 {object} models.LoginResp
-// @router /detail [get]
-func (this *UserController) Detail() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	UserId, _ := this.GetInt("UserId")
-	if UserId <= 0 {
-		br.Msg = "查询用户不存在"
-		return
-	}
-	user, err := models.GetUserViewById(UserId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "用户不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "查询用户失败"
-		br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-		return
-	}
-	if user == nil {
-		br.Msg = "用户不存在或已删除,请刷新页面"
-		return
-	}
-	permissionList, err := services.GetUserPermissionById(UserId)
-	if err != nil {
-		br.Msg = "用户权限获取失败,请重新尝试"
-		return
-	}
-	permissionMap := make(map[string][]string)
-	for _, pm := range permissionList {
-		permissionMap[pm.ParentName] = append(permissionMap[pm.ParentName], pm.PermissionName)
-	}
-	resp := new(response.UserDetailResp)
-	resp.Detail = user
-	resp.Permission = permissionMap
-
-	br.Msg = "查询成功"
-	br.Ret = 200
-	br.Success = true
-	br.Data = resp
-}
-
-// Delete
-// @Title 系统用户详情信息
-// @Description 用户详情信息
-// @Param   request	body request.UserDeleteReq true "type json string"
-// @Success 200 {object} models.LoginResp
-// @router /delete [post]
-func (this *UserController) Delete() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req request.UserDeleteReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	err = models.DeleteUserById(req.UserId)
-	if err != nil {
-		br.Msg = "删除失败"
-		br.ErrMsg = "删除失败,系统错误,Err:" + err.Error()
-		return
-	}
-	br.Msg = "删除成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// @Title 开启/禁用用户
-// @Description 开启/禁用用户接口
-// @Param	request	body system.SysuserEditReq true "type json string"
-// @Success 200 操作成功
-// @router /editEnabled [post]
-func (this *UserController) EditEnabled() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	var req request.UserEditEnabledReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	user, err := models.GetUserById(req.UserId)
-	if err != nil {
-		br.Msg = "获取数据失败"
-		br.ErrMsg = "获取系统用户数据失败,Err:" + err.Error()
-		return
-	}
-	if !req.IsEnabled {
-		user.Status = 0
-		err = user.Update([]string{"status"})
-		if err != nil {
-			br.Msg = "修改失败"
-			br.ErrMsg = "修改系统用户数据失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
-		if err != nil {
-			br.Msg = "日期格式不正确"
-			return
-		}
-		validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
-		if err != nil {
-			br.Msg = "日期格式不正确"
-			return
-		}
-		if !validEndTime.After(validStartTime) {
-			br.Msg = "有效期结束日期在开始日期之前,日期格式不正确"
-			return
-		}
-		validStartTime = validStartTime.Local().Add(-time.Hour * 8)
-		validEndTime = validEndTime.Local().Add(-time.Hour*8 + time.Hour*24 - time.Second)
-		curTime := time.Now()
-		if curTime.After(validEndTime) {
-			br.Msg = "有效期已到期,请重新设置"
-			return
-		}
-		user.Status = 2
-		user.ModifyTime = curTime
-		user.ValidStartTime = validStartTime
-		user.ValidEndTime = validEndTime
-		err = user.Update([]string{"status", "modify_time", "valid_start_time", "valid_end_time"})
-		if err != nil {
-			br.Msg = "修改失败"
-			br.ErrMsg = "修改系统用户数据失败,Err:" + err.Error()
-			return
-		}
-	}
-	// 记录操作
-	record := &models.UserChangeRecord{}
-	record.UserId = req.UserId
-	record.SysUserId = this.SysUser.SysUserId
-	if user.Status == 0 {
-		record.Content = this.SysUser.SysRealName + "禁用用户"
-	} else {
-		record.Content = this.SysUser.SysRealName + "启用用户"
-	}
-	record.Insert()
-
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "操作成功"
-}
-
-// @Title 用户信息变更记录
-// @Description 用户信息变更记录
-// @Param   UserId   query   int  true       "用户id"
-// @Success 200 操作成功
-// @router /change_list [get]
-func (this *UserController) ChangeList() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	userId, _ := this.GetInt("UserId")
-	if userId <= 0 {
-		br.Msg = "用户信息错误"
-		return
-	}
-
-	userRcord, err := models.GetUserChangeRecordListById(userId)
-	if err != nil {
-		br.Msg = "用户信息变更查询失败"
-		br.ErrMsg = "用户信息变更查询失败,系统错误,Err:" + err.Error()
-		return
-	}
-	resp := new(response.UserChangeRecordResp)
-	resp.List = userRcord
-
-	br.Data = resp
-	br.Msg = "查询成功"
-	br.Success = true
-	br.Ret = 200
-}
-
-// GlobalSearch
-// @Title 全局用户列表
-// @Description 全局用户列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   KeyWord   query   string  true       "手机号/邮箱/姓名"
-// @Param   SortParam   query   string  true       "排序字段"
-// @Param   SortType   query   string  true       "排序方式"
-// @Success 200 {object} response.UserListResp
-// @router /global/list [get]
-func (this *UserController) GlobalSearch() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	keyWord := this.GetString("KeyWord")
-	sortParam := this.GetString("SortParam")
-	sortType := this.GetString("SortType")
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-
-	var condition string
-	var pars []interface{}
-	var sortCondition string
-
-	if keyWord == "" {
-		br.Ret = 200
-		br.Msg = "查询成功"
-		br.Success = true
-		return
-	} else {
-		condition = ` AND (real_name like ? OR phone like ? OR email like ?)`
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 3)
-	}
-
-	if sortParam != "" && sortType != "" {
-		var param, sort string
-		switch sortParam {
-		case "RegisterTime":
-			param = "register_time"
-		case "ReadCnt":
-			param = "read_cnt"
-		case "LastUpdateTime":
-			param = "last_update_time"
-		}
-		switch sortType {
-		case "asc":
-			sort = "ASC"
-		case "desc":
-			sort = "DESC"
-		}
-		if param != "" && sort != "" {
-			sortCondition = ` ORDER BY ` + param + ` ` + sort
-		}
-	}
-	if sortCondition == "" {
-		sortCondition = ` ORDER BY u.register_time DESC`
-	}
-
-	startSize := utils.StartIndex(currentIndex, pageSize)
-	userIds, err := models.GetUserIdListByCondition(condition, pars)
-	if err != nil {
-		br.Msg = "查询失败"
-		br.ErrMsg = "查询失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	userList, err := models.GetGlobalUserByCondition(userIds, sortCondition, startSize, pageSize)
-	if err != nil {
-		br.Msg = "查询失败"
-		br.ErrMsg = "查询失败,系统错误,Err:" + err.Error()
-		return
-	}
-	page := paging.GetPaging(currentIndex, pageSize, len(userIds))
-	resp := new(response.UserListResp)
-	resp.List = userList
-	resp.Paging = page
-
-	br.Data = resp
-	br.Msg = "查询成功"
-	br.Success = true
-	br.Ret = 200
-}

+ 2 - 1
controllers/user_login.go

@@ -122,7 +122,8 @@ func (this *UserLoginController) AreaCodeList() {
 	}()
 
 	resp := make([]response.AreaCodeListResp, 0)
-	confAuth, e := models.GetConfigDetailByCode(models.ConfAreaCodeListKey)
+	configOb := new(models.SysConfig)
+	confAuth, e := configOb.GetConfigByCode(models.SysConfKeyAreaCodeList)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error()

+ 0 - 439
controllers/user_read_record.go

@@ -1,439 +0,0 @@
-package controllers
-
-import (
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/models/response"
-	"eta/eta_mini_crm/utils"
-	"fmt"
-	"strconv"
-	"strings"
-	"time"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type UserReadRecordController struct {
-	BaseAuthController
-}
-
-// List
-// @Title 用户阅读统计列表
-// @Description 用户阅读统计列表
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   SellerDepartmentId   query   int  true       "营业部门id"
-// @Param   Status   query   string  true       "用户状态"
-// @Param   KeyWord   query   string  true       "手机号/邮箱/姓名"
-// @Param   IsRegistered   query   string  true       "是否注册"
-// @Param   IsSubscribed   query   string  true       "是否关注"
-// @Param   RegisterStartDate   query   string  true       "注册开始时间"
-// @Param   RegisterEndDate   query   string  true       "注册结束时间"
-// @Param   CreateStartDate   query   string  true       "创建开始时间"
-// @Param   CreateEndDate   query   string  true       "创建结束时间"
-// @Param   SortParam   query   string  true       "排序字段"
-// @Param   SortType   query   string  true       "排序方式"
-// @Success 200 {object} response.UserListResp
-// @router /list [get]
-func (this *UserReadRecordController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	sellerDepartmentId, _ := this.GetInt("SellerDepartmentId", 0)
-	status := this.GetString("Status")
-	keyWord := this.GetString("KeyWord")
-	IsRegistered := this.GetString("IsRegisterd")
-	IsSubscribed := this.GetString("IsSubscribed")
-	registerStartDate := this.GetString("RegisterStartDate")
-	registerEndDate := this.GetString("RegisterEndDate")
-	createStartDate := this.GetString("CreateStartDate")
-	createEndDate := this.GetString("CreateEndDate")
-	sortParam := this.GetString("SortParam")
-	sortType := this.GetString("SortType")
-
-	var condition string
-	var sortCondition string
-	var pars []interface{}
-
-	if keyWord != "" {
-		condition += ` AND (u.real_name LIKE ? OR u.phone LIKE ? OR u.email LIKE ? OR u.company LIKE ?) `
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 4)
-	}
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	} else if pageSize > utils.PageSize100 {
-		pageSize = utils.PageSize100
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-
-	if sellerDepartmentId > 0 {
-		condition += " AND u.seller_department_id=? "
-		pars = append(pars, sellerDepartmentId)
-	}
-	if sortParam != "" && sortType != "" {
-		sortCondition = " ORDER BY "
-		var param, sort string
-		switch sortParam {
-		case "LastUpdateTime":
-			param = "last_update_time"
-		case "ReadCnt":
-			param = "read_cnt"
-		}
-		switch sortType {
-		case "asc":
-			sort = " ASC "
-		case "desc":
-			sort = " DESC "
-		}
-		if param != "" && sort != "" {
-			sortCondition += param + " " + sort
-		} else {
-			sortCondition = ""
-		}
-	}
-
-	switch status {
-	case fmt.Sprint(utils.UserStatusNo):
-		condition += " AND u.status=? "
-		pars = append(pars, 0)
-	case fmt.Sprint(1):
-		condition += " AND u.status=? "
-		pars = append(pars, 2)
-	default:
-		condition += " AND (u.status=? OR u.status=?) "
-		pars = append(pars, 0, 2)
-	}
-	switch IsRegistered {
-	case "是":
-		condition += " AND u.is_registered=? "
-		pars = append(pars, true)
-	case "否":
-		condition += " AND u.is_registered=? "
-		pars = append(pars, false)
-	}
-	switch IsSubscribed {
-	case "是":
-		condition += " AND u.is_subscribed=? "
-		pars = append(pars, true)
-	case "否":
-		condition += " AND u.is_subscribed=? "
-		pars = append(pars, false)
-	}
-	if registerStartDate != "" {
-		registerStartTime, er := time.Parse(utils.FormatDate, registerStartDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.register_time>=? "
-		registerStartDateStr := registerStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, registerStartDateStr)
-	}
-	if registerEndDate != "" {
-		registerEndTime, er := time.Parse(utils.FormatDate, registerEndDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.register_time<=? "
-		// 结束时间包含今天
-		registerEndTime = registerEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		registerEndDateStr := registerEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, registerEndDateStr)
-	}
-	if createStartDate != "" {
-		createStartTime, er := time.Parse(utils.FormatDate, createStartDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.create_time>=? "
-		createStartDateStr := createStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, createStartDateStr)
-	}
-	if createEndDate != "" {
-		createEndTime, er := time.Parse(utils.FormatDate, createEndDate)
-		if er != nil {
-			br.Msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.create_time<=? "
-		// 结束时间包含今天
-		createEndTime = createEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		createEndDateStr := createEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, createEndDateStr)
-	}
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	} else if pageSize > utils.PageSize100 {
-		pageSize = utils.PageSize100
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	startSize := utils.StartIndex(currentIndex, pageSize)
-
-	total, err := models.GetUserReadCount(condition, pars)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	userList, err := models.GetUserReadList(condition, sortCondition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "查询用户失败"
-		br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
-		return
-	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.UserListResp)
-	resp.Paging = page
-	resp.List = userList
-
-	br.Data = resp
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-}
-
-// Detail
-// @Title 用户阅读记录详情
-// @Description 用户阅读记录详情信息
-// @Param   PageSize   query   int  true       "每页数据条数"
-// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
-// @Param   ChartPermissionIds   query   string  true       "品种列表"
-// @Param   ClassifyIds   query   string  true       "品种列表"
-// @Success 200 {object} models.LoginResp
-// @router /detail [get]
-func (this *UserReadRecordController) Detail() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	UserId, _ := this.GetInt("UserId")
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	chartPermissionids := this.GetString("ChartPermissionIds")
-	classifyIds := this.GetString("ClassifyIds")
-	if UserId <= 0 {
-		br.Msg = "查询用户不存在"
-		return
-	}
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	} else if pageSize > utils.PageSize100 {
-		pageSize = utils.PageSize100
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	startSize := utils.StartIndex(currentIndex, pageSize)
-	user, err := models.GetUserById(UserId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "用户不存在或已删除,请刷新页面"
-			return
-		}
-		br.Msg = "查询用户失败"
-		br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
-		return
-	}
-	if user == nil {
-		br.Msg = "用户不存在或已删除,请刷新页面"
-		return
-	}
-	var condition string
-	var pars []interface{}
-
-	if chartPermissionids != "" {
-		ids := strings.Split(chartPermissionids, ",")
-		if len(ids) != 0 {
-			condition += ` AND ( `
-			for i, id := range ids {
-				if i == 0 {
-					condition += ` urp2.chart_permission_id = ? `
-					pars = append(pars, id)
-				} else {
-					condition += ` OR urp2.chart_permission_id = ? `
-					pars = append(pars, id)
-				}
-			}
-			condition += `) `
-		}
-	}
-
-	var firstClassifyIds, secondClassifyIds, thirdClassifyIds []int
-	if classifyIds != "" {
-		ids := strings.Split(classifyIds, ",")
-		classifyList, err := models.GetClassifyListByIds(ids)
-		if err != nil {
-			br.Msg = "查询失败"
-			br.Msg = "分类查询失败,系统错误,Err:" + err.Error()
-			return
-		}
-		for _, v := range classifyList {
-			switch v.Level {
-			case 1:
-				firstClassifyIds = append(firstClassifyIds, v.Id)
-			case 2:
-				secondClassifyIds = append(secondClassifyIds, v.Id)
-			case 3:
-				thirdClassifyIds = append(thirdClassifyIds, v.Id)
-			}
-		}
-	}
-
-	total, err := models.GetUserReadRecordCountByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds, UserId, condition, pars)
-	if err != nil {
-		br.Msg = "查询阅读记录失败"
-		br.ErrMsg = "查询阅读记录失败,Err:" + err.Error()
-		return
-	}
-	readList, err := models.GetUserReadRecordByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds, UserId, condition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "查询阅读记录失败"
-		br.ErrMsg = "查询阅读记录失败,系统错误,Err:" + err.Error()
-		return
-	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.UserReadRecordListResp)
-	resp.Paging = page
-	resp.List = readList
-
-	br.Msg = "获取成功"
-	br.Data = resp
-	br.Success = true
-	br.Ret = 200
-}
-
-// ReadCntChart
-// @Title 用户阅读量统计图信息
-// @Description 用户阅读量统计图信息
-// @Param   ChartPermissionIds   query   string  true       "品种列表"
-// @Param   ClassifyIds   query   string  true       "品种列表"
-// @Param   StartDate   query   string  true       "开始时间"
-// @Param   EndDate   query   string  true       "结束时间"
-// @Param   UserId   query   int  true       "用户id"
-// @Success 200 {object} models.LoginResp
-// @router /readCntChart [get]
-func (this *UserReadRecordController) ReadCntChart() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	userId, _ := this.GetInt("UserId")
-	startDate := this.GetString("StartDate")
-	endDate := this.GetString("EndDate")
-	chartPermissionIds := this.GetString("ChartPermissionIds")
-	classifyIds := this.GetString("ClassifyIds")
-	var condition string
-	var pars []interface{}
-
-	if chartPermissionIds != "" {
-		ids := strings.Split(chartPermissionIds, ",")
-		if len(ids) != 0 {
-			condition += ` AND ( `
-			for i, id := range ids {
-				if i == 0 {
-					condition += ` urp.chart_permission_id = ? `
-					pars = append(pars, id)
-				} else {
-					condition += ` OR urp.chart_permission_id = ? `
-					pars = append(pars, id)
-				}
-			}
-			condition += `) `
-		}
-	}
-	if classifyIds != "" {
-		ids := strings.Split(classifyIds, ",")
-		if len(ids) != 0 {
-			condition += ` AND ( `
-			for i, id := range ids {
-				if i == 0 {
-					condition += ` classify_id2 = ? `
-					pars = append(pars, id)
-				} else {
-					condition += ` OR classify_id2 = ? `
-					pars = append(pars, id)
-				}
-			}
-			condition += `) `
-		}
-	}
-
-	if startDate == "" {
-		startDate = time.Now().AddDate(-1, 0, 0).Format(utils.FormatDate)
-	}
-	if endDate == "" {
-		endDate = time.Now().AddDate(0, 0, 1).Format(utils.FormatDate)
-	}
-	if userId > 0 {
-		condition += ` AND ur.user_id = ? `
-		pars = append(pars, userId)
-	}
-	readCnts, err := models.GetStaticReadCnt(condition, pars, startDate, endDate)
-	if err != nil {
-		br.Msg = "获取阅读统计失败"
-		br.ErrMsg = "获取阅读统计失败,系统错误,Err:" + err.Error()
-		return
-	}
-
-	br.Msg = "查询成功"
-	br.Data = readCnts
-	br.Ret = 200
-	br.Success = true
-}
-
-// readPermissionChart
-// @Title 用户阅读品种图信息
-// @Description 用户阅读品种图信息
-// @Param   UserId   query   string  true       "用户id"
-// @Success 200 {object} models.LoginResp
-// @router /readPermissionChart [get]
-func (this *UserReadRecordController) ReadPermissionChart() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	userId, _ := this.GetInt("UserId")
-
-	var condition string
-	var pars []interface{}
-	if userId > 0 {
-		condition += ` AND ur.user_id = ? `
-		pars = append(pars, userId)
-	}
-
-	permissionCnts, err := models.GetStaticPermissionCnt(condition, pars)
-	if err != nil {
-		br.Msg = "获取品种阅读统计失败"
-		br.ErrMsg = "获取品种阅读统计失败,系统错误,Err:" + err.Error()
-		return
-	}
-	var sum int
-	for _, v := range permissionCnts {
-		sum += v.Count
-	}
-	for _, v := range permissionCnts {
-		percent := float64(v.Count) / float64(sum) * 100
-		percentStr := fmt.Sprintf("%.0f", percent)
-		parsedFloat, _ := strconv.ParseFloat(percentStr, 64)
-		v.Percent = parsedFloat
-	}
-
-	br.Msg = "查询成功"
-	br.Data = permissionCnts
-	br.Ret = 200
-	br.Success = true
-}

+ 1034 - 0
controllers/users.go

@@ -0,0 +1,1034 @@
+package controllers
+
+import (
+	"encoding/json"
+	"eta/eta_mini_crm/models"
+	"eta/eta_mini_crm/models/request"
+	"eta/eta_mini_crm/models/response"
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// UsersController 用户
+type UsersController struct {
+	BaseAuthController
+}
+
+// Add
+// @Title 新增用户
+// @Description 新增用户
+// @Param	request	body request.UsersAddReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /add [post]
+func (this *UsersController) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.UsersAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	req.RealName = strings.TrimSpace(req.RealName)
+	if req.RealName == "" {
+		br.Msg = "请输入用户姓名"
+		return
+	}
+	req.AreaCode = strings.TrimSpace(req.AreaCode)
+	if req.AreaCode == "" {
+		br.Msg = "请选择手机号区号"
+		return
+	}
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	if req.Mobile == "" {
+		br.Msg = "请输入手机号"
+		return
+	}
+	if req.AreaCode == utils.AreaCodeMainland && !utils.ValidateMobileFormatat(req.Mobile) {
+		br.Msg = "手机号格式有误"
+		return
+	}
+	// 销售如果是空的那么创建人即为销售
+	var sellerName, companyName string
+	if req.SellerId <= 0 {
+		req.SellerId = sysUser.SysUserId
+		sellerName = sysUser.SysRealName
+	}
+	if req.SellerId > 0 {
+		sellerItem, e := models.GetSysUserById(req.SellerId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "所选营业部不存在,请刷新页面"
+				return
+			}
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
+			return
+		}
+		sellerName = sellerItem.SysRealName
+	}
+	if req.CompanyId > 0 {
+		companyOb := new(models.Company)
+		companyItem, e := companyOb.GetItemById(req.CompanyId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "所选机构不存在,请刷新页面"
+				return
+			}
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+			return
+		}
+		companyName = companyItem.CompanyName
+	}
+
+	// 校验手机号是否存在
+	usersOb := new(models.Users)
+	{
+		cond := fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Mobile)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.Mobile)
+		exist, e := usersOb.GetItemByCondition(cond, pars, "")
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取重复手机号失败, %v", e)
+			return
+		}
+		if exist != nil && exist.CompanyId > 0 {
+			br.Msg = "手机号已存在"
+			return
+		}
+	}
+
+	usersOb.RealName = req.RealName
+	usersOb.Mobile = req.Mobile
+	usersOb.AreaCode = req.AreaCode
+	usersOb.SellerId = req.SellerId
+	usersOb.SellerName = sellerName
+	usersOb.SysUserId = sysUser.SysUserId
+	usersOb.SysUserRealName = sysUser.SysRealName
+	usersOb.CompanyId = req.CompanyId
+	usersOb.CompanyName = companyName
+	usersOb.Status = models.UserStatusFormal
+	usersOb.AuthStatus = models.AuthStatusOpen
+	usersOb.CreateTime = time.Now().Local()
+	usersOb.ModifyTime = time.Now().Local()
+	if e := usersOb.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("新增用户失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.UserId = usersOb.UserId
+		recordOb.Remark = fmt.Sprintf("%s新增用户", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", usersOb.UserId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Edit
+// @Title 编辑用户
+// @Description 编辑用户
+// @Param	request	body request.UsersEditReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /edit [post]
+func (this *UsersController) Edit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.UsersEditReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.UserId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, UserId: %d", req.UserId)
+		return
+	}
+	req.RealName = strings.TrimSpace(req.RealName)
+	if req.RealName == "" {
+		br.Msg = "请输入用户姓名"
+		return
+	}
+	req.AreaCode = strings.TrimSpace(req.AreaCode)
+	if req.AreaCode == "" {
+		br.Msg = "请选择手机号区号"
+		return
+	}
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	if req.Mobile == "" {
+		br.Msg = "请输入手机号"
+		return
+	}
+	if req.AreaCode == utils.AreaCodeMainland && !utils.ValidateMobileFormatat(req.Mobile) {
+		br.Msg = "手机号格式有误"
+		return
+	}
+	// 销售如果是空的那么创建人即为销售
+	var sellerName, companyName string
+	if req.SellerId <= 0 {
+		req.SellerId = sysUser.SysUserId
+		sellerName = sysUser.SysRealName
+	}
+	if req.SellerId > 0 {
+		sellerItem, e := models.GetSysUserById(req.SellerId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "所选营业部不存在,请刷新页面"
+				return
+			}
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
+			return
+		}
+		sellerName = sellerItem.SysRealName
+	}
+	if req.CompanyId > 0 {
+		companyOb := new(models.Company)
+		companyItem, e := companyOb.GetItemById(req.CompanyId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "所选机构不存在,请刷新页面"
+				return
+			}
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+			return
+		}
+		companyName = companyItem.CompanyName
+	}
+	usersOb := new(models.Users)
+	userItem, e := usersOb.GetItemById(req.UserId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在,请刷新页面"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
+		return
+	}
+
+	// 校验手机号是否存在
+	{
+		cond := fmt.Sprintf(` AND %s = ? AND %s <> ?`, usersOb.Cols().Mobile, usersOb.Cols().PrimaryId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.Mobile, req.UserId)
+		exist, e := usersOb.GetItemByCondition(cond, pars, "")
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取重复手机号失败, %v", e)
+			return
+		}
+		if exist != nil && exist.CompanyId > 0 {
+			br.Msg = "手机号已存在"
+			return
+		}
+	}
+
+	updateCols := []string{usersOb.Cols().RealName, usersOb.Cols().Mobile, usersOb.Cols().AreaCode}
+	userItem.RealName = req.RealName
+	userItem.Mobile = req.Mobile
+	userItem.AreaCode = req.AreaCode
+	if req.SellerId > 0 {
+		userItem.SellerId = req.SellerId
+		userItem.SellerName = sellerName
+		updateCols = append(updateCols, usersOb.Cols().SellerId, usersOb.Cols().SellerName)
+	}
+	if req.CompanyId > 0 {
+		userItem.CompanyId = req.CompanyId
+		userItem.CompanyName = companyName
+		updateCols = append(updateCols, usersOb.Cols().CompanyId, usersOb.Cols().CompanyName)
+	}
+	userItem.ModifyTime = time.Now().Local()
+	if e := userItem.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("编辑用户失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.UserId = userItem.UserId
+		recordOb.Remark = fmt.Sprintf("%s编辑用户", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", userItem.UserId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// CheckAdd
+// @Title 新增用户校验
+// @Description 新增用户校验
+// @Param	request	body request.UsersAddReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /add/check [post]
+func (this *UsersController) CheckAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.UsersAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	req.AreaCode = strings.TrimSpace(req.AreaCode)
+	if req.AreaCode == "" {
+		br.Msg = "请选择手机号区号"
+		return
+	}
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	if req.Mobile == "" {
+		br.Msg = "请输入手机号"
+		return
+	}
+	if req.AreaCode == utils.AreaCodeMainland && !utils.ValidateMobileFormatat(req.Mobile) {
+		br.Msg = "手机号格式有误"
+		return
+	}
+
+	// 校验手机号是否存在,区分不同情况
+	usersOb := new(models.Users)
+	cond := fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Mobile)
+	pars := make([]interface{}, 0)
+	pars = append(pars, req.Mobile)
+	exist, e := usersOb.GetItemByCondition(cond, pars, "")
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取重复手机号失败, %v", e)
+		return
+	}
+
+	resp := new(response.UsersAddCheckResp)
+	resp.Tips = "校验通过"
+	if exist != nil {
+		// 试用客户
+		if exist.Status == models.UserStatusTrial {
+			resp.CheckResult = 1
+			resp.Tips = "该客户已存在试用用户列表,是否确认将该用户移至当前客户下?"
+		}
+		// 个人投资者
+		if exist.Status == models.UserStatusFormal && exist.CompanyId == 0 {
+			resp.CheckResult = 2
+			resp.Tips = "该用户已存在个人投资列表"
+		}
+		// 机构联系人
+		if exist.Status == models.UserStatusFormal && exist.CompanyId > 0 {
+			companyOb := new(models.Company)
+			company, e := companyOb.GetItemById(exist.CompanyId)
+			if e != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = fmt.Sprintf("获取联系人机构失败, %v", e)
+				return
+			}
+			resp.CheckResult = 3
+			resp.Tips = fmt.Sprintf("该用户已存在【%s】客户下", company.CompanyName)
+		}
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Move
+// @Title 移动用户
+// @Description 移动用户
+// @Param	request	body request.UsersMoveReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /move [post]
+func (this *UsersController) Move() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.UsersMoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.UserId <= 0 {
+		br.Msg = "请选择用户"
+		return
+	}
+	if req.CompanyId <= 0 {
+		br.Msg = "请选择机构"
+		return
+	}
+	usersOb := new(models.Users)
+	userItem, e := usersOb.GetItemById(req.UserId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在,请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
+		return
+	}
+
+	companyOb := new(models.Company)
+	companyItem, e := companyOb.GetItemById(req.CompanyId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "机构不存在,请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+		return
+	}
+
+	userItem.CompanyId = req.CompanyId
+	userItem.CompanyName = companyItem.CompanyName
+	userItem.AuthStatus = companyItem.AuthStatus
+	userItem.ModifyTime = time.Now().Local()
+	updateCols := []string{usersOb.Cols().CompanyId, usersOb.Cols().CompanyName, usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime}
+	if e = userItem.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("移动用户失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.UserId = usersOb.UserId
+		recordOb.Remark = fmt.Sprintf("%s移动用户至【%s】", sysUser.SysRealName, companyItem.CompanyName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, MoveCompanyId: %d, ErrMsg: %v", userItem.UserId, companyItem.CompanyId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Remove
+// @Title 删除用户
+// @Description 删除用户
+// @Param	request	body request.UsersRemoveReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /remove [post]
+func (this *UsersController) Remove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.UsersRemoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.UserId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("用户ID参数有误, UserId: %d", req.UserId)
+		return
+	}
+	userOb := new(models.Users)
+	usersItem, e := userOb.GetItemById(req.UserId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			br.Msg = "操作成功"
+			br.Success = true
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+		return
+	}
+	// 操作权限校验
+	if sysUser.SysRoleId != utils.AdminRoleId {
+		if sysUser.SysUserId != usersItem.SysUserId && sysUser.SysUserId != usersItem.SellerId {
+			br.Msg = "无权操作"
+			return
+		}
+	}
+
+	// 删除用户并移除微信用户关联
+	if e = userOb.RemoveUsersAndUserRecord(req.UserId); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("删除用户并移除微信用户关联失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.UserId = usersItem.UserId
+		recordOb.Remark = fmt.Sprintf("%s删除用户", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", userOb.UserId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// TransFormal
+// @Title 转正式
+// @Description 转正式
+// @Param	request	body request.UsersTransFormalReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /trans_formal [post]
+func (this *UsersController) TransFormal() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.UsersTransFormalReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.UserId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("用户ID有误, UserId: %d", req.UserId)
+		return
+	}
+	req.RealName = strings.TrimSpace(req.RealName)
+	if req.RealName == "" {
+		br.Msg = "请输入用户姓名"
+		return
+	}
+
+	// 用户校验
+	usersOb := new(models.Users)
+	userItem, e := usersOb.GetItemById(req.UserId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在,请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
+		return
+	}
+	if userItem.Status != models.UserStatusTrial {
+		br.Msg = "该用户不是试用客户"
+		return
+	}
+
+	// 用户类型
+	var (
+		companyId   int
+		companyName string
+		authStatus  int
+		sellerId    int
+		sellerName  string
+	)
+	switch req.UserType {
+	case models.UserTypePerson:
+		if req.SellerId <= 0 {
+			br.Msg = "请选择营业部"
+			return
+		}
+		authStatus = models.AuthStatusOpen
+	case models.UserTypeCompany:
+		if req.CompanyId <= 0 {
+			br.Msg = "请选择所属机构"
+			return
+		}
+		companyOb := new(models.Company)
+		companyItem, e := companyOb.GetItemById(req.CompanyId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "所选机构不存在,请刷新页面"
+				return
+			}
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
+			return
+		}
+		companyId = companyItem.CompanyId
+		companyName = companyItem.CompanyName
+		authStatus = companyItem.AuthStatus
+		sellerId = companyItem.SellerId
+		sellerName = companyItem.SellerName
+	default:
+		br.Msg = "客户类型有误"
+		br.ErrMsg = fmt.Sprintf("客户类型有误, UserType: %d", req.UserType)
+		return
+	}
+
+	// 转正式
+	userItem.RealName = req.RealName
+	userItem.SellerId = sellerId
+	userItem.SellerName = sellerName
+	userItem.CompanyId = companyId
+	userItem.CompanyName = companyName
+	userItem.SysUserId = sysUser.SysUserId
+	userItem.SysUserRealName = sysUser.SysRealName
+	userItem.Status = models.UserStatusFormal
+	userItem.AuthStatus = authStatus
+	userItem.ModifyTime = time.Now().Local()
+	updateCols := []string{
+		usersOb.Cols().RealName, usersOb.Cols().SellerId, usersOb.Cols().SellerName, usersOb.Cols().CompanyId, usersOb.Cols().CompanyName,
+		usersOb.Cols().SysUserId, usersOb.Cols().SysUserRealName, usersOb.Cols().Status, usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime,
+	}
+	if e := userItem.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("用户转正式失败, %v", e)
+		return
+	}
+
+	// 操作记录
+	go func() {
+		recordOb := new(models.CompanyUserOperateRecord)
+		recordOb.UserId = userItem.UserId
+		recordOb.Remark = fmt.Sprintf("%s转正式", sysUser.SysRealName)
+		recordOb.SysUserId = sysUser.SysUserId
+		recordOb.SysUserRealName = sysUser.SysRealName
+		recordOb.CreateTime = time.Now().Local()
+		if e := recordOb.Create(); e != nil {
+			utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", userItem.UserId, e))
+		}
+	}()
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+}
+
+// Detail
+// @Title 用户详情
+// @Description 用户详情
+// @Param   UserId  query  int  true  "用户ID"
+// @Success 200 {object} models.UsersItem
+// @router /detail [get]
+func (this *UsersController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	userId, _ := this.GetInt("UserId")
+	if userId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, %d", userId)
+		return
+	}
+	usersOb := new(models.Users)
+	userItem, e := usersOb.GetItemById(userId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在,请刷新页面"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
+		return
+	}
+	resp := userItem.Format2Item()
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// PageList
+// @Title 用户列表-分页
+// @Description 用户列表-分页
+// @Param	request	body request.UsersListForm true "type json string"
+// @Success 200 {object} response.UsersPageListResp
+// @router /page_list [get]
+func (this *UsersController) PageList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	params := new(request.UsersListForm)
+	if e := this.ParseForm(params); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	resp := new(response.UsersPageListResp)
+	usersOb := new(models.Users)
+
+	// 仅超管/创建人/销售可见(机构联系人列表中能看见机构就能看到)
+	cond := ``
+	pars := make([]interface{}, 0)
+	if params.CompanyId <= 0 && sysUser.SysRoleId != utils.AdminRoleId {
+		cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, usersOb.Cols().SysUserId, usersOb.Cols().SellerId)
+		pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
+	}
+
+	// 筛选项
+	{
+		// 机构
+		if params.CompanyId > 0 {
+			cond += fmt.Sprintf(` AND %s = ?`, usersOb.Cols().CompanyId)
+			pars = append(pars, params.CompanyId)
+		}
+
+		// 用户类型
+		if params.UserStatus > 0 {
+			if params.UserStatus != models.UserStatusTrial && params.UserStatus != models.UserStatusFormal {
+				br.Msg = "用户类型有误"
+				br.ErrMsg = fmt.Sprintf("参数用户类型有误, UserStatus: %d", params.UserStatus)
+				return
+			}
+			cond += fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Status)
+			pars = append(pars, params.UserStatus)
+		}
+
+		// 关键词(联系人名称/联系人手机号)
+		keywords := strings.TrimSpace(params.Keywords)
+		if keywords != "" {
+			kw := fmt.Sprint("%", keywords, "%")
+			cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ?)`, usersOb.Cols().RealName, usersOb.Cols().Mobile)
+			pars = append(pars, kw, kw)
+		}
+
+		// 营业部
+		params.SellerIds = strings.TrimSpace(params.SellerIds)
+		if params.SellerIds != "" {
+			var sellerIds []int
+			idArr := strings.Split(params.SellerIds, ",")
+			for _, v := range idArr {
+				id, _ := strconv.Atoi(v)
+				if id > 0 {
+					sellerIds = append(sellerIds, id)
+				}
+			}
+			if len(sellerIds) == 0 {
+				page := paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
+				resp.Paging = page
+				resp.List = make([]*models.UsersItem, 0)
+				br.Data = resp
+				br.Ret = 200
+				br.Msg = "获取成功"
+				br.Success = true
+				return
+			}
+			cond += fmt.Sprintf(` AND %s IN (%s)`, usersOb.Cols().SellerId, utils.GetOrmInReplace(len(sellerIds)))
+			pars = append(pars, sellerIds)
+		}
+
+		// 创建时间区间
+		params.StartTime = strings.TrimSpace(params.StartTime)
+		params.EndTime = strings.TrimSpace(params.EndTime)
+		if params.StartTime != "" && params.EndTime != "" {
+			_, e := time.ParseInLocation(utils.FormatDate, params.StartTime, time.Local)
+			if e != nil {
+				br.Msg = "开始时间格式有误"
+				return
+			}
+			_, e = time.ParseInLocation(utils.FormatDate, params.EndTime, time.Local)
+			if e != nil {
+				br.Msg = "结束时间格式有误"
+				return
+			}
+			cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, usersOb.Cols().CreateTime)
+			pars = append(pars, fmt.Sprintf("%s 00:00:00", params.StartTime), fmt.Sprintf("%s 23:59:59", params.EndTime))
+		}
+	}
+
+	// 分页
+	var startSize int
+	if params.PageSize <= 0 {
+		params.PageSize = utils.PageSize20
+	}
+	if params.CurrentIndex <= 0 {
+		params.CurrentIndex = 1
+	}
+	startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
+
+	// 排序
+	orderRule := fmt.Sprintf(`%s DESC`, usersOb.Cols().CreateTime)
+	if params.SortField > 0 && params.SortRule > 0 {
+		fieldMap := map[int]string{
+			1: usersOb.Cols().CreateTime, 2: usersOb.Cols().RegisterTime, 3: usersOb.Cols().LastReadTime, 4: usersOb.Cols().ReadTimes,
+		}
+		ruleMap := map[int]string{1: "ASC", 2: "DESC"}
+		if fieldMap[params.SortField] != "" && ruleMap[params.SortRule] != "" {
+			orderRule = fmt.Sprintf("%s %s", fieldMap[params.SortField], ruleMap[params.SortRule])
+		}
+	}
+
+	total, e := usersOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取用户总数失败, %v", e)
+		return
+	}
+	list, e := usersOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取用户分页列表失败, %v", e)
+		return
+	}
+	respList := make([]*models.UsersItem, 0)
+	for _, v := range list {
+		respList = append(respList, v.Format2Item())
+	}
+
+	page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
+	resp.Paging = page
+	resp.List = respList
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// Search
+// @Title 用户列表-搜索
+// @Description 用户列表-搜索
+// @Param	request	body request.UsersListForm true "type json string"
+// @Success 200 {object} response.UsersPageListResp
+// @router /search [get]
+func (this *UsersController) Search() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	params := new(request.UsersListForm)
+	if e := this.ParseForm(params); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	// 用户检索,所有人可见
+	resp := new(response.UsersPageListResp)
+	usersOb := new(models.Users)
+	cond := ``
+	pars := make([]interface{}, 0)
+
+	// 关键词(机构名称/联系人名称/联系人手机号)
+	keywords := strings.TrimSpace(params.Keywords)
+	if keywords != "" {
+		kw := fmt.Sprint("%", keywords, "%")
+		cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ? OR %s LIKE ?)`, usersOb.Cols().CompanyName, usersOb.Cols().RealName, usersOb.Cols().Mobile)
+		pars = append(pars, kw, kw, kw)
+	}
+
+	// 分页
+	var startSize int
+	if params.PageSize <= 0 {
+		params.PageSize = utils.PageSize20
+	}
+	if params.CurrentIndex <= 0 {
+		params.CurrentIndex = 1
+	}
+	startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
+
+	total, e := usersOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取用户总数失败, %v", e)
+		return
+	}
+	list, e := usersOb.GetPageItemsByCondition(cond, pars, []string{}, "", startSize, params.PageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取用户分页列表失败, %v", e)
+		return
+	}
+	respList := make([]*models.UsersItem, 0)
+	for _, v := range list {
+		respList = append(respList, v.Format2Item())
+	}
+
+	page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
+	resp.Paging = page
+	resp.List = respList
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}
+
+// OperateRecords
+// @Title 用户-操作记录
+// @Description 用户列表-操作记录
+// @Param   UserId  query  int  true  "用户ID"
+// @Success 200 {object} models.CompanyUserOperateRecordItem
+// @router /operate_records [get]
+func (this *UsersController) OperateRecords() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	userId, _ := this.GetInt("UserId")
+	if userId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, %d", userId)
+		return
+	}
+	resp := make([]*models.CompanyUserOperateRecordItem, 0)
+
+	recordOb := new(models.CompanyUserOperateRecord)
+	cond := fmt.Sprintf(` AND %s = ?`, recordOb.Cols().UserId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, userId)
+	list, e := recordOb.GetItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取操作记录列表失败, %v", e)
+		return
+	}
+	for _, v := range list {
+		resp = append(resp, v.Format2Item())
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}

+ 0 - 4
go.mod

@@ -11,9 +11,7 @@ require (
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/go-sql-driver/mysql v1.7.0
 	github.com/minio/minio-go/v7 v7.0.74
-	github.com/olivere/elastic/v7 v7.0.32
 	github.com/rdlucklib/rdluck_tools v1.0.3
-	github.com/tealeg/xlsx v1.0.5
 )
 
 require (
@@ -27,11 +25,9 @@ require (
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
 	github.com/jmespath/go-jmespath v0.4.0 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/klauspost/compress v1.17.9 // indirect
 	github.com/klauspost/cpuid/v2 v2.2.8 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/minio/md5-simd v1.1.2 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect

+ 0 - 114
models/chart_permission.go

@@ -1,114 +0,0 @@
-package models
-
-import (
-	"eta/eta_mini_crm/utils"
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type ChartPermission struct {
-	ChartPermissionId     int       `orm:"column(chart_permission_id);pk" description:"问题ID" json:"chart_permission_id"`
-	ChartPermissionName   string    `description:"名称" json:"chart_permission_name"`
-	PermissionName        string    `description:"权限名" json:"permission_name"`
-	Sort                  int       `description:"排序" json:"sort"`
-	Enabled               int       `description:"是否可用" json:"enabled"`
-	CreatedTime           time.Time `description:"创建时间" json:"created_time"`
-	LastUpdatedTime       time.Time `description:"更新时间" json:"last_updated_time"`
-	TeleconferenceSort    int       `description:"电话会类型排序" json:"teleconference_sort"`
-	Remark                string    `description:"备注" json:"remark"`
-	ClassifyName          string    `description:"分类名称" json:"classify_name"`
-	ProductName           string    `description:"产品名称" json:"product_name"`
-	ProductId             int       `description:"产品ID" json:"product_id"`
-	ImageURL              string    `orm:"column(image_url);" description:"图片地址" json:"image_url"`
-	ShowType              int       `description:"1:查研观向小程序展示" json:"show_type"`
-	IsOther               int       `description:"是否是其他,用于查研观向小程序后台展示" json:"is_other"`
-	IsReport              int       `description:"是否是报告,用于查研观向小程序前台报告展示" json:"is_report"`
-	CygxAuth              int       `description:"是否是权限,用于查研观向小程序前台权限校验" json:"cygx_auth"`
-	PermissionType        int       `description:"1主观,2客观" json:"permission_type"`
-	YbImgUrl              string    `description:"研报小程序报告列表icon" json:"yb_img_url"`
-	ProductPermissionName string    `description:"种类权限名称" json:"product_permission_name"`
-	PriceDrivenState      int       `description:"品种价格驱动开启状态 0-关闭 1-开启" json:"price_driven_state"`
-	ImageUrlM             string    `description:"图片地址(查研观向移动端)" json:"image_url_m"`
-	ParentId              int       `description:"父级权限id" json:"parent_id"`
-	IsPublic              int       `description:"是否是公有权限1:公有权限,0私有权限" json:"is_public"`
-}
-
-type ChartPermissionList struct {
-	ChartPermissionId     int                    `orm:"column(chart_permission_id);pk" description:"问题ID" json:"chart_permission_id"`
-	ChartPermissionName   string                 `description:"名称" json:"chart_permission_name"`
-	PermissionName        string                 `description:"权限名" json:"permission_name"`
-	Sort                  int                    `description:"排序" json:"sort"`
-	Enabled               int                    `description:"是否可用" json:"enabled"`
-	CreatedTime           time.Time              `description:"创建时间" json:"created_time"`
-	LastUpdatedTime       time.Time              `description:"更新时间" json:"last_updated_time"`
-	TeleconferenceSort    int                    `description:"电话会类型排序" json:"teleconference_sort"`
-	Remark                string                 `description:"备注" json:"remark"`
-	ClassifyName          string                 `description:"分类名称" json:"classify_name"`
-	ProductName           string                 `description:"产品名称" json:"product_name"`
-	ProductId             int                    `description:"产品ID" json:"product_id"`
-	ImageURL              string                 `orm:"column(image_url);" description:"图片地址" json:"image_url"`
-	ShowType              int                    `description:"1:查研观向小程序展示" json:"show_type"`
-	IsOther               int                    `description:"是否是其他,用于查研观向小程序后台展示" json:"is_other"`
-	IsReport              int                    `description:"是否是报告,用于查研观向小程序前台报告展示" json:"is_report"`
-	CygxAuth              int                    `description:"是否是权限,用于查研观向小程序前台权限校验" json:"cygx_auth"`
-	PermissionType        int                    `description:"1主观,2客观" json:"permission_type"`
-	YbImgUrl              string                 `description:"研报小程序报告列表icon" json:"yb_img_url"`
-	ProductPermissionName string                 `description:"种类权限名称" json:"product_permission_name"`
-	PriceDrivenState      int                    `description:"品种价格驱动开启状态 0-关闭 1-开启" json:"price_driven_state"`
-	ImageUrlM             string                 `description:"图片地址(查研观向移动端)" json:"image_url_m"`
-	ParentId              int                    `description:"父级权限id" json:"parent_id"`
-	IsPublic              int                    `description:"是否是公有权限1:公有权限,0私有权限" json:"is_public"`
-	Child                 []*ChartPermissionList `description:"子权限"`
-}
-
-type ChartPermissionView struct {
-	ParentName     string `description:"父权限名称" json:"parent_name"`
-	PermissionName string `description:"权限名" json:"permission_name"`
-}
-
-type ChartPermissionListTree struct {
-	ChartPermissionId int                        `description:"权限ID"`
-	PermissionName    string                     `description:"权限名"`
-	ParentId          int                        `description:"父权限ID"`
-	IsPublic          int                        `description:"是否是公有权限"`
-	PublicChild       []*ChartPermissionListTree `description:"公有权限"`
-	PrivateChild      []*ChartPermissionListTree `description:"私有权限"`
-}
-
-func GetChartPermissionListByCondition(condition string, pars []interface{}) (items []*ChartPermission, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM chart_permission WHERE enabled=1 `
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars...).QueryRows(items)
-	return
-}
-
-func GetChartPermissionListByIds(chartPermissionIds []int) (items []*ChartPermissionView, err error) {
-	if len(chartPermissionIds) == 0 {
-		return
-	}
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT c.permission_name AS permission_name, lc.permission_name AS parent_name FROM chart_permission c
-		LEFT JOIN chart_permission lc
-		ON c.parent_id=lc.chart_permission_id 
-		WHERE c.chart_permission_id in (` + utils.GetOrmReplaceHolder(len(chartPermissionIds)) + `) `
-	_, err = o.Raw(sql, chartPermissionIds).QueryRows(&items)
-	return
-}
-
-func GetChartPermissionList() (items []*ChartPermissionListTree, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM chart_permission WHERE enabled=1 AND product_id=1 ORDER BY sort, chart_permission_id ASC`
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
-func GetChartPermissionByParentId(parentId int) (items []*ChartPermissionList, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM chart_permission WHERE enabled=1 AND chart_permission_id=?`
-	_, err = o.Raw(sql, parentId).QueryRows(&items)
-	return
-}

+ 0 - 90
models/chart_permission_search_key_word_mapping.go

@@ -1,90 +0,0 @@
-package models
-
-import (
-	"eta/eta_mini_crm/utils"
-	"fmt"
-	"strings"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type ChartPermissionSearchKeyWordMapping struct {
-	Id                int `orm:"pk" description:"id"`
-	ChartPermissionId int `description:"品种id"`
-	ClassifyId        int `description:"分类id"`
-}
-
-func GetClassifyIdsListById(chartPermissionId int) (classifyIds []int, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT classify_id
-		FROM chart_permission_search_key_word_mapping	
-		WHERE chart_permission_id = ? `
-	_, err = o.Raw(sql, chartPermissionId).QueryRows(&classifyIds)
-	return
-}
-
-func GetChartPermissionIdsListByClassifyId(classifyId int) (chartPermissionIds []string, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT chart_permission_id
-		FROM chart_permission_search_key_word_mapping	
-		WHERE classify_id = ? `
-	_, err = o.Raw(sql, classifyId).QueryRows(&chartPermissionIds)
-	return
-}
-
-func GetChartPermissionIdsListByClassifyIds(classifyId []int) (chartPermissionIds []int, err error) {
-	if len(classifyId) == 0 {
-		return
-	}
-	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT chart_permission_id
-		FROM chart_permission_search_key_word_mapping	
-		WHERE classify_id = (%s) `
-	sql = fmt.Sprintf(sql, utils.GetOrmReplaceHolder(len(classifyId)))
-
-	_, err = o.Raw(sql, classifyId).QueryRows(&chartPermissionIds)
-	return
-}
-
-func GetChartPermissionListByClassifyStrIds(classifyIds []string) (items []*ChartPermissionSearchKeyWordMapping, err error) {
-	if len(classifyIds) == 0 {
-		return
-	}
-	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT * FROM chart_permission_search_key_word_mapping	WHERE 1=1 `
-	var idsStr string
-	if len(classifyIds) > 0 {
-		idsStr = strings.Join(classifyIds, ",")
-		sql += fmt.Sprintf(" AND classify_id in (%s) ", idsStr)
-	}
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
-func GetChartPermissionListByClassifyIds(classifyIds []int) (items []*ChartPermissionSearchKeyWordMapping, err error) {
-	if len(classifyIds) == 0 {
-		return
-	}
-	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT * FROM chart_permission_search_key_word_mapping	WHERE 1=1 `
-	if len(classifyIds) > 0 {
-		sql += fmt.Sprintf(" AND classify_id in (%s) ", utils.GetOrmReplaceHolder(len(classifyIds)))
-	}
-	_, err = o.Raw(sql, classifyIds).QueryRows(&items)
-	return
-}
-
-func GetClassifyIdsListByIds(chartPermissionIds []int) (classifyIds []int, err error) {
-	if len(chartPermissionIds) == 0 {
-		return
-	}
-	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT classify_id
-		FROM chart_permission_search_key_word_mapping	
-		WHERE 1=1 `
-	if len(chartPermissionIds) > 0 {
-		sql += fmt.Sprintf(" AND chart_permission_id in (%s) ", utils.GetOrmReplaceHolder(len(chartPermissionIds)))
-	}
-	_, err = o.Raw(sql, chartPermissionIds).QueryRows(&classifyIds)
-	return
-}

+ 83 - 27
models/classify.go

@@ -2,51 +2,107 @@ package models
 
 import (
 	"eta/eta_mini_crm/utils"
+	"fmt"
+	"strings"
 	"time"
 
 	"github.com/beego/beego/v2/client/orm"
 )
 
 type Classify struct {
-	Id            int       `orm:"column(id);pk"`
-	ClassifyName  string    `description:"分类名称"`
-	Sort          int       `json:"-"`
-	ParentId      int       `description:"父级分类id"`
-	CreateTime    time.Time `description:"创建时间"`
-	ModifyTime    time.Time `description:"修改时间"`
-	ClassifyLabel string    `description:"分类标签"`
-	Enabled       int       `description:"是否可用,1可用,0禁用"`
-}
-
-type ClassifyView struct {
-	Id            int             `orm:"column(id);pk"`
-	ClassifyName  string          `description:"分类名称"`
-	Sort          int             `json:"-"`
-	ParentId      int             `description:"父级分类id"`
-	CreateTime    time.Time       `description:"创建时间"`
-	ModifyTime    time.Time       `description:"修改时间"`
-	ClassifyLabel string          `description:"分类标签"`
-	Enabled       int             `description:"是否可用,1可用,0禁用"`
-	Level         int             `description:"分类层级"`
-	HasChild      int             `description:"是否有子分类0:下面没有子分类,1:下面有子分类"`
-	Child         []*ClassifyView `description:"子分类"`
-}
-
-func GetClassifyList() (items []*ClassifyView, err error) {
+	Id           int       `orm:"column(id);pk"`
+	ClassifyName string    `description:"分类名称"`
+	Sort         int       `description:"排序"`
+	ParentId     int       `description:"父级ID"`
+	Enabled      int       `description:"状态:0-禁用;1-正常"`
+	Level        int       `description:"分类层级"`
+	CreateTime   time.Time `description:"创建时间"`
+	ModifyTime   time.Time `description:"修改时间"`
+}
+
+func (m *Classify) TableName() string {
+	return "classify"
+}
+
+type ClassifyCols struct {
+	PrimaryId    string
+	ClassifyName string
+	Sort         string
+	ParentId     string
+	Enabled      string
+	Level        string
+	CreateTime   string
+	ModifyTime   string
+}
+
+func (m *Classify) Cols() ClassifyCols {
+	return ClassifyCols{
+		PrimaryId:    "company_id",
+		ClassifyName: "company_name",
+		Sort:         "credit_code",
+		ParentId:     "province_id",
+		Enabled:      "province",
+		CreateTime:   "create_time",
+		ModifyTime:   "modify_time",
+	}
+}
+
+func (m *Classify) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Classify, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+type ClassifyItem struct {
+	Id           int             `orm:"column(id);pk"`
+	ClassifyName string          `description:"分类名称"`
+	Sort         int             `description:"排序"`
+	ParentId     int             `description:"父级ID"`
+	Enabled      int             `description:"状态:0-禁用;1-正常"`
+	Level        int             `description:"分类层级"`
+	CreateTime   string          `description:"创建时间"`
+	ModifyTime   string          `description:"修改时间"`
+	Child        []*ClassifyItem `description:"子分类"`
+}
+
+func (m *Classify) Format2Item() (item *ClassifyItem) {
+	item = new(ClassifyItem)
+	item.Id = m.Id
+	item.ClassifyName = m.ClassifyName
+	item.Sort = m.Sort
+	item.ParentId = m.ParentId
+	item.Enabled = m.Enabled
+	item.Level = m.Level
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
+	item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
+	item.Child = make([]*ClassifyItem, 0)
+	return
+}
+
+func GetClassifyList() (items []*ClassifyItem, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM classify WHERE enabled=1`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-func GetClassifyById(classifyId int) (item *ClassifyView, err error) {
+func GetClassifyById(classifyId int) (item *ClassifyItem, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM classify WHERE enabled=1 AND id=?`
 	err = o.Raw(sql, classifyId).QueryRow(&item)
 	return
 }
 
-func GetClassifyListByIds(ids []string) (items []*ClassifyView, err error) {
+func GetClassifyListByIds(ids []string) (items []*ClassifyItem, err error) {
 	if len(ids) == 0 {
 		return
 	}

+ 276 - 0
models/company.go

@@ -0,0 +1,276 @@
+package models
+
+import (
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// Company 机构表
+type Company struct {
+	CompanyId       int       `orm:"column(company_id);pk" description:"机构ID"`
+	CompanyName     string    `description:"机构名称"`
+	CreditCode      string    `description:"社会统一信用码"`
+	ProvinceId      int       `description:"省ID"`
+	Province        string    `description:"省"`
+	CityId          int       `description:"市ID"`
+	City            string    `description:"市"`
+	Address         string    `description:"详细地址"`
+	Industry        string    `description:"行业"`
+	AuthStatus      int       `description:"权限状态:0-关闭;1-开启"`
+	SellerId        int       `description:"销售ID"`
+	SellerName      string    `description:"销售名称"`
+	SysUserId       int       `description:"操作人ID"`
+	SysUserRealName string    `description:"操作人姓名"`
+	IsDeleted       int       `description:"删除状态:0-正常;1-已删除"`
+	CreateTime      time.Time `description:"创建时间"`
+	ModifyTime      time.Time `description:"更新时间"`
+}
+
+func (m *Company) TableName() string {
+	return "company"
+}
+
+type CompanyCols struct {
+	PrimaryId       string
+	CompanyName     string
+	CreditCode      string
+	ProvinceId      string
+	Province        string
+	CityId          string
+	City            string
+	Address         string
+	Industry        string
+	AuthStatus      string
+	SellerId        string
+	SellerName      string
+	SysUserId       string
+	SysUserRealName string
+	IsDeleted       string
+	CreateTime      string
+	ModifyTime      string
+}
+
+func (m *Company) Cols() CompanyCols {
+	return CompanyCols{
+		PrimaryId:       "company_id",
+		CompanyName:     "company_name",
+		CreditCode:      "credit_code",
+		ProvinceId:      "province_id",
+		Province:        "province",
+		CityId:          "city_id",
+		City:            "city",
+		Address:         "address",
+		Industry:        "industry",
+		AuthStatus:      "auth_status",
+		SellerId:        "seller_id",
+		SellerName:      "seller_name",
+		SysUserId:       "sys_user_id",
+		SysUserRealName: "sys_user_real_name",
+		IsDeleted:       "is_deleted",
+		CreateTime:      "create_time",
+		ModifyTime:      "modify_time",
+	}
+}
+
+func (m *Company) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.CompanyId = int(id)
+	return
+}
+
+func (m *Company) CreateMulti(items []*Company) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *Company) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *Company) Remove() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeleted, m.Cols().PrimaryId)
+	_, err = o.Raw(sql, m.CompanyId).Exec()
+	return
+}
+
+func (m *Company) MultiRemove(ids []int) (err error) {
+	if len(ids) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s IN (%s)`, m.TableName(), m.Cols().IsDeleted, RowDeleted, m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	_, err = o.Raw(sql, ids).Exec()
+	return
+}
+
+func (m *Company) RemoveByCondition(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s`, m.TableName(), m.Cols().IsDeleted, RowDeleted, condition)
+	_, err = o.Raw(sql, pars).Exec()
+	return
+}
+
+func (m *Company) GetItemById(id int) (item *Company, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d AND %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, m.Cols().PrimaryId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *Company) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *Company, err error) {
+	o := orm.NewOrm()
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d %s %s LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *Company) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE %s = %d %s`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *Company) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Company, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *Company) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*Company, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s LIMIT ?,?`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// CompanyItem 机构信息
+type CompanyItem struct {
+	CompanyId   int    `description:"机构ID"`
+	CompanyName string `description:"机构名称"`
+	CreditCode  string `description:"社会统一信用码"`
+	Address     string `description:"详细地址"`
+	Industry    string `description:"行业"`
+	AuthStatus  int    `description:"权限状态:0-关闭;1-开启"`
+	SellerName  string `description:"销售名称"`
+	CreateTime  string `description:"创建时间"`
+	ModifyTime  string `description:"更新时间"`
+}
+
+func (m *Company) Format2Item() (item *CompanyItem) {
+	item = new(CompanyItem)
+	item.CompanyId = m.CompanyId
+	item.CompanyName = m.CompanyName
+	item.CreditCode = m.CreditCode
+	item.Address = fmt.Sprint(m.Province, m.City)
+	item.Industry = m.Industry
+	item.AuthStatus = m.AuthStatus
+	item.SellerName = m.SellerName
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
+	item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
+	return
+}
+
+func (m *Company) RemoveCompanyAndUsers(companyId int) (err error) {
+	if companyId <= 0 {
+		err = fmt.Errorf("company id is zero")
+		return
+	}
+	o := orm.NewOrm()
+	tx, e := o.Begin()
+	if e != nil {
+		err = fmt.Errorf("orm begin err: %v", e)
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, m.Cols().PrimaryId)
+	if _, e = tx.Raw(sql, RowDeleted, companyId).Exec(); e != nil {
+		err = fmt.Errorf("delete company err: %v", e)
+		return
+	}
+	usersOb := new(Users)
+	sql = fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, usersOb.TableName(), usersOb.Cols().IsDeleted, usersOb.Cols().CompanyId)
+	if _, e = tx.Raw(sql, RowDeleted, companyId).Exec(); e != nil {
+		err = fmt.Errorf("delete company users err: %v", e)
+		return
+	}
+	return
+}
+
+func (m *Company) ChangeCompanyAndUsersAuth(companyId, statusChange int) (err error) {
+	if companyId <= 0 {
+		err = fmt.Errorf("company id is zero")
+		return
+	}
+	o := orm.NewOrm()
+	tx, e := o.Begin()
+	if e != nil {
+		err = fmt.Errorf("orm begin err: %v", e)
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().AuthStatus, m.Cols().PrimaryId)
+	if _, e = tx.Raw(sql, statusChange, companyId).Exec(); e != nil {
+		err = fmt.Errorf("change company auth err: %v", e)
+		return
+	}
+	usersOb := new(Users)
+	sql = fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, usersOb.TableName(), usersOb.Cols().AuthStatus, usersOb.Cols().CompanyId)
+	if _, e = tx.Raw(sql, statusChange, companyId).Exec(); e != nil {
+		err = fmt.Errorf("change company users auth err: %v", e)
+		return
+	}
+	return
+}

+ 173 - 0
models/company_user_operate_record.go

@@ -0,0 +1,173 @@
+package models
+
+import (
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// CompanyUserOperateRecord 机构用户操作记录
+type CompanyUserOperateRecord struct {
+	Id              int       `orm:"column(id);pk"`
+	CompanyId       int       `description:"机构ID"`
+	UserId          int       `description:"用户ID"`
+	Remark          string    `description:"操作备注"`
+	SysUserId       int       `description:"操作人ID"`
+	SysUserRealName string    `description:"操作人姓名"`
+	CreateTime      time.Time `description:"创建时间"`
+}
+
+func (m *CompanyUserOperateRecord) TableName() string {
+	return "company_user_operate_record"
+}
+
+type CompanyUserOperateRecordCols struct {
+	PrimaryId       string
+	CompanyId       string
+	UserId          string
+	Remark          string
+	SysUserId       string
+	SysUserRealName string
+	CreateTime      string
+}
+
+func (m *CompanyUserOperateRecord) Cols() CompanyUserOperateRecordCols {
+	return CompanyUserOperateRecordCols{
+		PrimaryId:       "id",
+		CompanyId:       "company_id",
+		UserId:          "user_id",
+		Remark:          "remark",
+		SysUserId:       "sys_user_id",
+		SysUserRealName: "sys_user_real_name",
+		CreateTime:      "create_time",
+	}
+}
+
+func (m *CompanyUserOperateRecord) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.Id = int(id)
+	return
+}
+
+func (m *CompanyUserOperateRecord) CreateMulti(items []*CompanyUserOperateRecord) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *CompanyUserOperateRecord) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *CompanyUserOperateRecord) Remove() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	_, err = o.Raw(sql, m.Id).Exec()
+	return
+}
+
+func (m *CompanyUserOperateRecord) MultiRemove(ids []int) (err error) {
+	if len(ids) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	_, err = o.Raw(sql, ids).Exec()
+	return
+}
+
+func (m *CompanyUserOperateRecord) RemoveByCondition(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
+	_, err = o.Raw(sql, pars).Exec()
+	return
+}
+
+func (m *CompanyUserOperateRecord) GetItemById(id int) (item *CompanyUserOperateRecord, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *CompanyUserOperateRecord) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *CompanyUserOperateRecord, err error) {
+	o := orm.NewOrm()
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *CompanyUserOperateRecord) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *CompanyUserOperateRecord) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*CompanyUserOperateRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *CompanyUserOperateRecord) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*CompanyUserOperateRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type CompanyUserOperateRecordItem struct {
+	CompanyId       int    `description:"机构ID"`
+	UserId          int    `description:"用户ID"`
+	Remark          string `description:"操作备注"`
+	SysUserId       int    `description:"操作人ID"`
+	SysUserRealName string `description:"操作人姓名"`
+	CreateTime      string `description:"创建时间"`
+}
+
+func (m *CompanyUserOperateRecord) Format2Item() (item *CompanyUserOperateRecordItem) {
+	item = new(CompanyUserOperateRecordItem)
+	item.CompanyId = m.CompanyId
+	item.UserId = m.UserId
+	item.Remark = m.Remark
+	item.SysUserId = m.SysUserId
+	item.SysUserRealName = m.SysUserRealName
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
+	return
+}

+ 19 - 0
models/constants.go

@@ -0,0 +1,19 @@
+package models
+
+const (
+	RowDeletedDefault = 0 // 删除状态-正常
+	RowDeleted        = 1 // 删除状态-已删除
+)
+
+const (
+	SysConfKeyAreaCodeList = "area_code_list" // 系统配置-手机号区号列表
+)
+
+const (
+	UserTypePerson   = 1 // 用户类型-个体投资者
+	UserTypeCompany  = 2 // 用户类型-机构投资者
+	AuthStatusClose  = 0 // 权限状态-关闭
+	AuthStatusOpen   = 1 // 权限状态-开启
+	UserStatusTrial  = 1 // 用户状态-试用
+	UserStatusFormal = 2 // 用户状态-正式
+)

+ 0 - 16
models/crm_config.go

@@ -1,16 +0,0 @@
-package models
-
-import "github.com/beego/beego/v2/client/orm"
-
-const ConfAreaCodeListKey = "area_code_list" // 手机号区号列表
-
-type CrmConfig struct {
-	ConfigValue string `description:"详情"`
-}
-
-func GetConfigDetailByCode(configCode string) (item CrmConfig, err error) {
-	o := orm.NewOrm()
-	sql := ` SELECT config_value FROM crm_config WHERE config_code=? `
-	err = o.Raw(sql, configCode).QueryRow(&item)
-	return
-}

+ 7 - 8
models/db.go

@@ -33,13 +33,12 @@ func init() {
 		new(SysDepartment),
 		new(SysMenu),
 		new(SysRoleMenuMapping),
-		new(ChartPermission),
-		new(UserChartPermissionMapping),
-		new(User),
-		new(SysMessageReport),
-		new(CrmConfig),
-		new(UserChangeRecord),
-		new(ReportPdf),
-		new(ReportPushStatus),
+		new(SysConfig),
+		new(Classify),
+		new(Company),
+		new(CompanyUserOperateRecord),
+		new(Users),
+		new(UserRecord),
+		new(UserReadRecord),
 	)
 }

+ 0 - 26
models/report_author.go

@@ -1,26 +0,0 @@
-package models
-
-import (
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type ReportAuthor struct {
-	Id           int       `orm:"column(id)" description:"报告作者ID"`
-	ReportAuthor string    `description:"报告作者名称"`
-	AuthorType   int       `description:"类型,1:中文;2:英文"`
-	Enable       int       `description:"是否启用,0:禁用,1:启用"`
-	IsDelete     int       `description:"是否删除,0:未删除,1:已删除"`
-	CreateTime   time.Time `description:"创建时间"`
-	ModifyTime   time.Time `description:"更新时间"`
-}
-
-// GetReportAuthorList 获取报告作者列表
-func GetReportAuthorList() (items []*ReportAuthor, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-
-	sql := ` SELECT * FROM report_author WHERE is_delete=0 AND enable=1 ORDER BY id desc  `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}

+ 0 - 241
models/report_pdf.go

@@ -1,241 +0,0 @@
-package models
-
-import (
-	"eta/eta_mini_crm/utils"
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type ReportPdf struct {
-	ReportPdfId        int       `orm:"pk" description:"id"`
-	PdfUrl             string    `description:"pdf文件URL"`
-	PdfName            string    `description:"pdf文件名称"`
-	Title              string    `description:"pdf文件标题"`
-	Author             string    `description:"作者"`
-	Abstract           string    `description:"摘要"`
-	ClassifyIdFirst    int       `description:"一级分类id"`
-	ClassifyNameFirst  string    `description:"一级分类名称"`
-	ClassifyIdSecond   int       `description:"二级分类id"`
-	ClassifyNameSecond string    `description:"二级分类名称"`
-	ClassifyIdThird    int       `description:"三级分类id"`
-	ClassifyNameThird  string    `description:"三级分类名称"`
-	Stage              int       `description:"期数"`
-	PublishTime        time.Time `description:"发布时间"`
-	ModifyTime         time.Time `description:"更新时间"`
-	Pv                 int       `description:"pv"`
-	Uv                 int       `description:"uv"`
-	SysUserId          int       `description:"创建人id"`
-	SysRealName        string    `description:"创建人姓名"`
-	State              int       `description:"状态,1:已发布;2:未发布"`
-}
-
-type ReportPdfView struct {
-	ReportPdfId        int       `orm:"pk" description:"id"`
-	PdfUrl             string    `description:"pdf文件URL"`
-	PdfName            string    `description:"pdf文件名称"`
-	Title              string    `description:"pdf文件标题"`
-	Author             string    `description:"作者"`
-	Abstract           string    `description:"摘要"`
-	ClassifyIdFirst    int       `description:"一级分类id"`
-	ClassifyNameFirst  string    `description:"一级分类名称"`
-	ClassifyIdSecond   int       `description:"二级分类id"`
-	ClassifyNameSecond string    `description:"二级分类名称"`
-	ClassifyIdThird    int       `description:"三级分类id"`
-	ClassifyNameThird  string    `description:"三级分类名称"`
-	Stage              int       `description:"期数"`
-	PublishTime        string    `description:"发布时间"`
-	ModifyTime         time.Time `description:"更新时间"`
-	Pv                 int       `description:"pv"`
-	Uv                 int       `description:"uv"`
-	SysUserId          int       `description:"创建人id"`
-	SysRealName        string    `description:"创建人姓名"`
-	State              int       `description:"状态,1:已发布;2:未发布"`
-}
-
-func (r *ReportPdf) Insert() (insertId int64, err error) {
-	tx, err := orm.NewOrm().Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			tx.Rollback()
-		} else {
-			tx.Commit()
-		}
-	}()
-	// 计算研报期数
-	sql := `SELECT MAX(stage) + 1 AS count FROM report_pdf WHERE classify_id_second=?`
-	err = tx.Raw(sql, r.ClassifyIdSecond).QueryRow(&r.Stage)
-	if r.Stage == 0 {
-		r.Stage = 1
-	}
-	if err != nil {
-		return
-	}
-	insertId, err = tx.Insert(r)
-	if err != nil {
-		return
-	}
-	if r.State == utils.ReportStatusUp {
-		insertPushStatus := &ReportPushStatus{
-			ReportId:           int(insertId),
-			State:              0,
-			Title:              r.Title,
-			Abstract:           r.Abstract,
-			Stage:              r.Stage,
-			ClassifyIdFirst:    r.ClassifyIdFirst,
-			ClassifyNameFirst:  r.ClassifyNameFirst,
-			ClassifyIdSecond:   r.ClassifyIdSecond,
-			ClassifyNameSecond: r.ClassifyNameSecond,
-			ClassifyIdThird:    r.ClassifyIdThird,
-			ClassifyNameThird:  r.ClassifyNameThird,
-			Author:             r.Author,
-			ReportType:         utils.ReportTypePdf,
-			PublishTime:        r.PublishTime,
-			CreateTime:         time.Now(),
-			ModifyTime:         time.Now(),
-		}
-		_, err = tx.Insert(insertPushStatus)
-	}
-	return
-}
-
-func (r *ReportPdf) ToView() (item *ReportPdfView) {
-	item = new(ReportPdfView)
-	item.ReportPdfId = r.ReportPdfId
-	item.PdfUrl = r.PdfUrl
-	item.PdfName = r.PdfName
-	item.Title = r.Title
-	item.Author = r.Author
-	item.Abstract = r.Abstract
-	item.ClassifyIdFirst = r.ClassifyIdFirst
-	item.ClassifyNameFirst = r.ClassifyNameFirst
-	item.ClassifyIdSecond = r.ClassifyIdSecond
-	item.ClassifyNameSecond = r.ClassifyNameSecond
-	item.Stage = r.Stage
-	item.State = r.State
-	item.PublishTime = r.PublishTime.Format(utils.FormatDateTime)
-	item.ModifyTime = r.ModifyTime
-	item.Pv = r.Pv
-	item.Uv = r.Uv
-	item.SysUserId = r.SysUserId
-	item.SysRealName = r.SysRealName
-	return
-
-}
-
-func (r *ReportPdf) Update(cols []string) (err error) {
-	// reportPushStatus := new(ReportPushStatus)
-	var reportPushStatus *ReportPushStatus
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_push_status WHERE report_id=? AND report_type=?`
-	err = o.Raw(sql, r.ReportPdfId, utils.ReportTypePdf).QueryRow(&reportPushStatus)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return
-	}
-
-	tx, err := o.Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			tx.Rollback()
-		} else {
-			tx.Commit()
-		}
-
-	}()
-	_, err = tx.Update(r, cols...)
-	if err != nil {
-		return
-	}
-	if reportPushStatus == nil && r.State == utils.ReportStatusUp {
-		insertPushStatus := &ReportPushStatus{
-			ReportId:           r.ReportPdfId,
-			State:              0,
-			Title:              r.Title,
-			Abstract:           r.Abstract,
-			Stage:              r.Stage,
-			ClassifyIdFirst:    r.ClassifyIdFirst,
-			ClassifyNameFirst:  r.ClassifyNameFirst,
-			ClassifyIdSecond:   r.ClassifyIdSecond,
-			ClassifyNameSecond: r.ClassifyNameSecond,
-			ClassifyIdThird:    r.ClassifyIdThird,
-			ClassifyNameThird:  r.ClassifyNameThird,
-			Author:             r.Author,
-			ReportType:         utils.ReportTypePdf,
-			PublishTime:        r.PublishTime,
-			CreateTime:         time.Now(),
-			ModifyTime:         time.Now(),
-		}
-		_, err = tx.Insert(insertPushStatus)
-	} else if reportPushStatus != nil {
-		// pdf报告发布后编辑,则更新report_push_status表, 若取消发布,则在推送表中删除
-		if r.State == utils.ReportStatusDown {
-			err = reportPushStatus.Delete()
-		} else {
-			reportPushStatus.Title = r.Title
-			reportPushStatus.Abstract = r.Abstract
-			reportPushStatus.Stage = r.Stage
-			reportPushStatus.ClassifyIdFirst = r.ClassifyIdFirst
-			reportPushStatus.ClassifyNameFirst = r.ClassifyNameFirst
-			reportPushStatus.ClassifyIdSecond = r.ClassifyIdSecond
-			reportPushStatus.ClassifyNameSecond = r.ClassifyNameSecond
-			reportPushStatus.ClassifyIdThird = r.ClassifyIdThird
-			reportPushStatus.ClassifyNameThird = r.ClassifyNameThird
-			reportPushStatus.Author = r.Author
-			reportPushStatus.PublishTime = r.PublishTime
-			reportPushStatus.ModifyTime = time.Now()
-			updateCols := []string{"title", "abstract", "stage", "classify_id_first", "classify_name_first", "classify_id_second", "classify_name_second", "classify_id_third", "classify_name_third", "author", "publish_time", "modify_time"}
-			_, err = tx.Update(reportPushStatus, updateCols...)
-		}
-	}
-	return
-}
-
-func (r *ReportPdf) Delete() (err error) {
-	o := orm.NewOrm()
-	_, err = o.Delete(r)
-	return
-}
-
-func GetReportPdfCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(*) AS count FROM report_pdf WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	err = o.Raw(sql, pars).QueryRow(&count)
-	return
-}
-
-func GetReportPdfByCondition(condition, sortCondition string, pars []interface{}, startPage, pageSize int) (items []*ReportPdf, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_pdf WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	if sortCondition != "" {
-		sql += sortCondition // 排序
-	}
-	sql += ` LIMIT ?,?`
-	_, err = o.Raw(sql, pars, startPage, pageSize).QueryRows(&items)
-	return
-}
-
-func GetReportPdfById(id int) (item *ReportPdf, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_pdf WHERE report_pdf_id=?`
-	err = o.Raw(sql, id).QueryRow(&item)
-	return
-}
-
-func GetBatchPdfReport(maxId, batchSize int) (items []*ReportPdf, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_pdf WHERE report_pdf_id>? AND state=1 LIMIT ?`
-	_, err = o.Raw(sql, maxId, batchSize).QueryRows(&items)
-	return
-}

+ 0 - 236
models/report_push_status.go

@@ -1,236 +0,0 @@
-package models
-
-import (
-	"eta/eta_mini_crm/utils"
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type ReportPushStatus struct {
-	ReportPushStatusId int       `orm:"pk"`
-	ReportId           int       `description:"报告id"`
-	State              int       `description:"报告状态:0-未推送,1-已推送"`
-	Title              string    `description:"报告标题"`
-	Abstract           string    `description:"报告摘要"`
-	Stage              int       `description:"期数"`
-	ClassifyIdFirst    int       `description:"一级分类id"`
-	ClassifyNameFirst  string    `description:"一级分类名称"`
-	ClassifyIdSecond   int       `description:"二级分类id"`
-	ClassifyNameSecond string    `description:"二级分类名称"`
-	ClassifyIdThird    int       `description:"三级分类id"`
-	ClassifyNameThird  string    `description:"三级分类名称"`
-	Author             string    `description:"报告作者"`
-	ReportType         int       `description:"报告类型:1-eta报告 2-pdf报告"`
-	PublishTime        time.Time `description:"报告发布时间"`
-	CreateTime         time.Time `description:"创建时间"`
-	ModifyTime         time.Time `description:"修改时间"`
-	PushTime           time.Time `description:"推送时间"`
-}
-
-type Report struct {
-	Id                 int       `description:"报告id"`   // id
-	ClassifyIdFirst    int       `description:"一级分类id"` // 一级分类id
-	ClassifyNameFirst  string    `description:"一级分类名称"` // 一级分类名称
-	ClassifyIdSecond   int       `description:"二级分类id"` // 二级分类id
-	ClassifyNameSecond string    `description:"二级分类名称"` // 二级分类名称
-	ClassifyIdThird    int       `description:"三级分类id"` // 三级分类id
-	ClassifyNameThird  string    `description:"三级分类名称"` // 三级分类名称
-	Title              string    `description:"报告标题"`   // 标题
-	Abstract           string    `description:"摘要"`     // 摘要
-	Author             string    `description:"作者"`     // 作者
-	CreateTime         time.Time `description:"创建时间"`   // 创建时间
-	ModifyTime         time.Time `description:"修改时间"`   // 修改时间
-	PublishTime        time.Time `description:"发布时间"`   // 发布时间
-	Stage              int       `description:"期数"`     // 期数
-	ContentModifyTime  time.Time `description:"内容更新时间"` // 内容更新时间
-	ReportCreateTime   time.Time `description:"创建时间"`   // 报告时间创建时间
-}
-
-type ReportPushView struct {
-	ReportPushStatusId int    `orm:"pk"`
-	ReportId           int    `description:"报告id"`
-	Title              string `description:"报告标题"`
-	Abstract           string `description:"报告摘要"`
-	ClassifyIdFirst    int    `description:"一级分类id"`
-	ClassifyNameFirst  string `description:"一级分类名称"`
-	ClassifyIdSecond   int    `description:"二级分类id"`
-	ClassifyNameSecond string `description:"二级分类名称"`
-	ClassifyIdThird    int    `description:"二级分类id"`
-	ClassifyNameThird  string `description:"二级分类名称"`
-	Author             string `description:"报告作者"`
-	State              int    `description:"报告状态:0-未推送,1-已推送"`
-	PushTime           string `description:"推送时间"`
-	PublishTime        string `description:"报告发布时间"`
-	ReportType         int    `description:"报告类型:1-eta报告 2-pdf报告"`
-	CreateTime         string `description:"创建时间"`
-	ModifyTime         string `description:"修改时间"`
-}
-
-func (r *ReportPushStatus) Insert() (insertId int64, err error) {
-	o := orm.NewOrm()
-	insertId, err = o.Insert(r)
-	return
-}
-
-func (r *ReportPushStatus) MultiInsert(items []*ReportPushStatus) (err error) {
-	o := orm.NewOrm()
-	_, err = o.InsertMulti(500, items)
-	return
-}
-
-func (r *ReportPushStatus) Update(cols []string) (err error) {
-	o := orm.NewOrm()
-	_, err = o.Update(r, cols...)
-	return
-}
-
-func (r *ReportPushStatus) Delete() (err error) {
-	o := orm.NewOrm()
-	_, err = o.Delete(r)
-	return
-}
-
-func GetReportPushStatusByReportId(reportPushStatusId, state int) (item *ReportPushStatus, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_push_status WHERE report_push_status_id=? AND state=?`
-	err = o.Raw(sql, reportPushStatusId, state).QueryRow(&item)
-	return
-}
-
-func GetReportPushStatusByReportIdAndState(reportId []int, state int) (items []*ReportPushStatus, err error) {
-	if len(reportId) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_push_status WHERE report_id IN (` + utils.GetOrmReplaceHolder(len(reportId)) + `) AND state=?`
-	_, err = o.Raw(sql, reportId, state).QueryRows(&items)
-	return
-}
-
-func GetReportPushStatusByIdAndState(Id []int, state int) (items []*ReportPushStatus, err error) {
-	if len(Id) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_push_status WHERE report_push_status_id IN (` + utils.GetOrmReplaceHolder(len(Id)) + `) AND state=?`
-	_, err = o.Raw(sql, Id, state).QueryRows(&items)
-	return
-}
-
-func GetReportPushStatusByReportIds(reportType int, reportId []int) (items []*ReportPushStatus, err error) {
-	if len(reportId) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_push_status WHERE report_type=? AND report_id IN (` + utils.GetOrmReplaceHolder(len(reportId)) + `) `
-	_, err = o.Raw(sql, reportType, reportId).QueryRows(&items)
-	return
-}
-
-func GetReportPushStatusListByCondition(condition, sortCondition string, pars []interface{}, startSize, pageSize int) (items []*ReportPushView, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM report_push_status WHERE 1=1  `
-	if condition != "" {
-		sql += condition
-	}
-	if sortCondition != "" {
-		sql += sortCondition
-	}
-	sql += ` LIMIT ?,? `
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	return
-}
-
-func GetReportByCondition(condition string, pars []interface{}) (items []*Report, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM report WHERE 1=1 AND (state=2 OR state=6) `
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars...).QueryRows(&items)
-	return
-}
-
-func GetReportIdListByCondition(condition string, pars []interface{}) (reportId []int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT report_id FROM report_push_status WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars).QueryRows(&reportId)
-	return
-}
-
-func GetReportPushStatusIdListByCondition(condition string, pars []interface{}) (reportPushStatusId []int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT report_push_status_id FROM report_push_status WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars).QueryRows(&reportPushStatusId)
-	return
-}
-
-func GetReportCountById(id int) (count int, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT COUNT(*) AS count FROM report WHERE (state=2 OR state=6) AND id=?`
-	err = o.Raw(sql, id).QueryRow(&count)
-	return
-}
-
-func GetReportCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(*) AS count FROM report_push_status WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	err = o.Raw(sql, pars).QueryRow(&count)
-	return
-}
-
-// BatchPushReport 批量推送报告
-func BatchPushReport(reportPushStatusId []int) (err error) {
-	if len(reportPushStatusId) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	sql := `UPDATE report_push_status SET state=1, push_time=NOW() WHERE report_push_status_id IN (` + utils.GetOrmReplaceHolder(len(reportPushStatusId)) + `)`
-	_, err = o.Raw(sql, reportPushStatusId).Exec()
-	return
-}
-
-// BatchPushCancelReport 批量撤销推送报告
-func BatchPushCancelReport(reportPushStatusId []int) (err error) {
-	if len(reportPushStatusId) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	sql := `UPDATE report_push_status SET state=0, modify_time=NOW() WHERE report_push_status_id IN (` + utils.GetOrmReplaceHolder(len(reportPushStatusId)) + `)`
-	_, err = o.Raw(sql, reportPushStatusId).Exec()
-	return
-}
-
-// BatchAddReportPushStatus 批量添加报告
-func BatchAddReportPushStatus(items []*ReportPushStatus) (err error) {
-	if len(items) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	_, err = o.InsertMulti(100, items)
-	return
-}
-
-func GetMaxSyncIdReportPush(report_type int) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT MAX(report_id) AS max_id FROM report_push_status WHERE report_type=?`
-	err = o.Raw(sql, report_type).QueryRow(&count)
-	return
-}
-
-func GetBatchReport(maxId, batchSize int) (items []*Report, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM report WHERE id>? AND (state=2 OR state=6) LIMIT ?`
-	o.Raw(sql, maxId, batchSize).QueryRows(&items)
-	return
-}

+ 0 - 5
models/request/chart_permission.go

@@ -1,5 +0,0 @@
-package request
-
-type ChartPermissionListReq struct {
-	UserId int `description:"用户ID"`
-}

+ 37 - 0
models/request/company.go

@@ -0,0 +1,37 @@
+package request
+
+type CompanyAddReq struct {
+	CompanyName string `description:"机构名称"`
+	CreditCode  string `description:"社会统一信用码"`
+	ProvinceId  int    `description:"省ID"`
+	Province    string `description:"省"`
+	CityId      int    `description:"市ID"`
+	City        string `description:"市"`
+	Address     string `description:"详细地址"`
+	Industry    string `description:"行业"`
+	SellerId    int    `description:"销售(营业部)ID"`
+}
+
+type CompanyEditReq struct {
+	CompanyId int `description:"机构ID"`
+	CompanyAddReq
+}
+
+type CompanyRemoveReq struct {
+	CompanyId int `description:"机构ID"`
+}
+
+type CompanyTransAuthReq struct {
+	CompanyId int `description:"机构ID"`
+}
+
+type CompanyListForm struct {
+	PageSize     int    `form:"PageSize" description:"每页数据量"`
+	CurrentIndex int    `form:"CurrentIndex" description:"页码"`
+	Keywords     string `form:"Keywords" description:"搜索关键词"`
+	SellerIds    string `form:"SellerIds" description:"销售IDs"`
+	StartTime    string `form:"StartTime" description:"创建时间区间-开始时间"`
+	EndTime      string `form:"EndTime" description:"创建时间区间-结束时间"`
+	SortField    int    `form:"SortField" description:"排序字段: 0-默认; 1-创建时间"`
+	SortRule     int    `form:"SortRule" description:"排序方式: 0-默认; 1-正序; 2-倒序"`
+}

+ 8 - 0
models/request/report.go

@@ -0,0 +1,8 @@
+package request
+
+type ReadRecordListForm struct {
+	PageSize     int    `form:"PageSize" description:"每页数据量"`
+	CurrentIndex int    `form:"CurrentIndex" description:"页码"`
+	UserId       int    `form:"UserId" description:"机构ID"`
+	ClassifyIds  string `form:"ClassifyIds" description:"分类IDs"`
+}

+ 0 - 23
models/request/report_pdf.go

@@ -1,23 +0,0 @@
-package request
-
-type ReportPdfAddReq struct {
-	PdfUrl           string `description:"pdf文件URL"`
-	PdfName          string `description:"pdf文件名称"`
-	Title            string `description:"标题"`
-	Author           string `description:"作者"`
-	Abstract         string `description:"摘要"`
-	ClassifyIdFirst  int    `description:"一级分类id"`
-	ClassifyIdSecond int    `description:"二级分类id"`
-	ClassifyIdThird  int    `description:"三级分类id"`
-}
-
-type ReportPdfEditReq struct {
-	ReportPdfId      int    `description:"id"`
-	PdfName          string `description:"pdf文件名称"`
-	PdfUrl           string `description:"pdf文件URL"`
-	Title            string `description:"标题"`
-	Author           string `description:"作者"`
-	Abstract         string `description:"摘要"`
-	ClassifyIdFirst  int    `description:"一级分类id"`
-	ClassifyIdSecond int    `description:"二级分类id"`
-}

+ 0 - 17
models/request/report_push_status.go

@@ -1,17 +0,0 @@
-package request
-
-type ReportPushStatusReq struct {
-	ReportPushStatusId int
-}
-
-type BatchReportModifyPushStatusReq struct {
-	ChartPermissionIds []int
-	ClassifyIds        []int
-	SelectedIds        []int
-	IsSelectAll        bool
-	PublishStartDate   string
-	PublishEndDate     string
-	PushStartDate      string
-	PushEndDate        string
-	KeyWord            string
-}

+ 0 - 5
models/request/sys_message_report.go

@@ -1,5 +0,0 @@
-package request
-
-type SysMessageReadReq struct {
-	SysMessageId []int
-}

+ 0 - 44
models/request/user.go

@@ -1,44 +0,0 @@
-package request
-
-type UserAddReq struct {
-	RealName           string `description:"姓名"`
-	AreaCode           string `description:"区号"`
-	Phone              string `description:"手机号"`
-	Email              string `description:"邮箱"`
-	SellerDepartmentId int    `description:"营业部门id"`
-	ValidStartTime     string `description:"有效期开始时间"`
-	ValidEndTime       string `description:"有效期结束时间"`
-	Company            string `description:"所属公司"`
-	ChartPermission    []int  `description:"所选品种"`
-}
-
-type UserEditReq struct {
-	UserId             int    `description:"用户id"`
-	RealName           string `description:"姓名"`
-	AreaCode           string `description:"区号"`
-	Phone              string `description:"手机号"`
-	Email              string `description:"邮箱"`
-	SellerDepartmentId int    `description:"营业部门id"`
-	ValidStartTime     string `description:"有效期开始时间"`
-	ValidEndTime       string `description:"有效期结束时间"`
-	Company            string `description:"所属公司"`
-	ChartPermission    []int  `description:"所选品种"`
-	IsEnabled          bool   `description:"是否禁用"`
-}
-
-type UserCheckReq struct {
-	AreaCode string `description:"区号"`
-	Phone    string `description:"手机号"`
-	Email    string `description:"邮箱"`
-}
-
-type UserDeleteReq struct {
-	UserId int `description:"用户id"`
-}
-
-type UserEditEnabledReq struct {
-	UserId         int    `description:"用户id"`
-	IsEnabled      bool   `description:"是否启用"`
-	ValidStartTime string `description:"有效期开始时间"`
-	ValidEndTime   string `description:"有效期结束时间"`
-}

+ 44 - 0
models/request/users.go

@@ -0,0 +1,44 @@
+package request
+
+type UsersAddReq struct {
+	RealName  string `description:"姓名"`
+	Mobile    string `description:"手机号"`
+	AreaCode  string `description:"区号"`
+	CompanyId int    `description:"机构ID"`
+	SellerId  int    `description:"销售(营业部)ID"`
+}
+
+type UsersEditReq struct {
+	UserId int `description:"用户ID"`
+	UsersAddReq
+}
+
+type UsersMoveReq struct {
+	CompanyId int `description:"机构ID"`
+	UserId    int `description:"用户ID"`
+}
+
+type UsersRemoveReq struct {
+	UserId int `description:"用户ID"`
+}
+
+type UsersTransFormalReq struct {
+	UserId    int    `description:"用户ID"`
+	RealName  string `description:"姓名"`
+	UserType  int    `description:"用户类型:1-个人投资者;2-机构投资者"`
+	CompanyId int    `description:"机构ID(机构投资者必填)"`
+	SellerId  int    `description:"销售ID(个人投资者必填)"`
+}
+
+type UsersListForm struct {
+	PageSize     int    `form:"PageSize" description:"每页数据量"`
+	CurrentIndex int    `form:"CurrentIndex" description:"页码"`
+	CompanyId    int    `form:"CompanyId" description:"机构ID"`
+	Keywords     string `form:"Keywords" description:"搜索关键词"`
+	SellerIds    string `form:"SellerIds" description:"营业部IDs"`
+	StartTime    string `form:"StartTime" description:"创建时间区间-开始时间"`
+	EndTime      string `form:"EndTime" description:"创建时间区间-结束时间"`
+	UserStatus   int    `form:"UserStatus" description:"用户类型:1-试用用户;2-正式用户"`
+	SortField    int    `form:"SortField" description:"排序字段: 0-默认; 1-创建时间; 2-注册时间; 3-最近一次阅读时间; 4-阅读统计"`
+	SortRule     int    `form:"SortRule" description:"排序方式: 0-默认(倒序); 1-正序; 2-倒序"`
+}

+ 0 - 8
models/response/chart_permission.go

@@ -1,8 +0,0 @@
-package response
-
-import "eta/eta_mini_crm/models"
-
-type ChartPermissionListresp struct {
-	List         []*models.ChartPermissionListTree
-	SelectedList []int
-}

+ 11 - 0
models/response/company.go

@@ -0,0 +1,11 @@
+package response
+
+import (
+	"eta/eta_mini_crm/models"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+type CompanyPageListResp struct {
+	Paging *paging.PagingItem
+	List   []*models.CompanyItem `description:"机构列表"`
+}

+ 11 - 0
models/response/report.go

@@ -0,0 +1,11 @@
+package response
+
+import (
+	"eta/eta_mini_crm/models"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+type ReadRecordListResp struct {
+	Paging *paging.PagingItem
+	List   []*models.UserReadRecordItem `description:"阅读记录列表"`
+}

+ 0 - 17
models/response/report_pdf.go

@@ -1,17 +0,0 @@
-package response
-
-import (
-	"eta/eta_mini_crm/models"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type ReportPdfListResp struct {
-	List   []*models.ReportPdf
-	Paging *paging.PagingItem `description:"分页数据"`
-}
-
-type ReportPdfUploadResp struct {
-	Url      string `description:"pdf文件URL"`
-	FileName string `description:"pdf文件名称"`
-}

+ 0 - 12
models/response/report_push_status.go

@@ -1,12 +0,0 @@
-package response
-
-import (
-	"eta/eta_mini_crm/models"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type ReportPushStatusResp struct {
-	List   []*models.ReportPushView `description:"列表数据"`
-	Paging *paging.PagingItem       `description:"分页数据"`
-}

+ 0 - 12
models/response/sys_message_report.go

@@ -1,12 +0,0 @@
-package response
-
-import (
-	"eta/eta_mini_crm/models"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type SysMessageListResp struct {
-	List   []*models.SysMessageReportView
-	Paging *paging.PagingItem `description:"分页数据"`
-}

+ 0 - 27
models/response/user.go

@@ -1,27 +0,0 @@
-package response
-
-import (
-	"eta/eta_mini_crm/models"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type UserListResp struct {
-	List   []*models.UserView
-	Paging *paging.PagingItem `description:"分页数据"`
-}
-
-type UserCheckResp struct {
-	UserId int
-	Status int
-}
-
-type UserChangeRecordResp struct {
-	List []*models.UserChangeRecord
-	// Paging *paging.PagingItem `description:"分页数据"`
-}
-
-type UserDetailResp struct {
-	Detail     *models.UserView
-	Permission map[string][]string
-}

+ 0 - 17
models/response/user_read_record.go

@@ -1,17 +0,0 @@
-package response
-
-import (
-	"eta/eta_mini_crm/models"
-
-	"github.com/rdlucklib/rdluck_tools/paging"
-)
-
-type UserReadRecordListResp struct {
-	Paging *paging.PagingItem
-	List   []*models.UserReadRecordView
-}
-
-type StaticInfoResp struct {
-	ReadCntList       []*models.ReadCntStaitc
-	PermissionCntList []*models.PermissionCntStaitc
-}

+ 16 - 0
models/response/users.go

@@ -0,0 +1,16 @@
+package response
+
+import (
+	"eta/eta_mini_crm/models"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+type UsersAddCheckResp struct {
+	CheckResult int    `description:"校验结果:0-通过;1-试用用户;2-个人投资者;3-机构投资者"`
+	Tips        string `description:"提示语"`
+}
+
+type UsersPageListResp struct {
+	Paging *paging.PagingItem
+	List   []*models.UsersItem `description:"用户列表"`
+}

+ 48 - 0
models/sys_config.go

@@ -0,0 +1,48 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// SysConfig 系统配置表
+type SysConfig struct {
+	ConfigId    int       `orm:"column(config_id);pk"`
+	ConfigCode  string    `description:"配置编码"`
+	ConfigValue string    `description:"配置值"`
+	Remark      string    `description:"备注信息"`
+	CreateTime  time.Time `description:"创建时间"`
+	ModifyTime  time.Time `description:"更新时间"`
+}
+
+func (m *SysConfig) TableName() string {
+	return "sys_config"
+}
+
+type SysConfigCols struct {
+	PrimaryId   string
+	ConfigCode  string
+	ConfigValue string
+	Remark      string
+	CreateTime  string
+	ModifyTime  string
+}
+
+func (m *SysConfig) Cols() SysConfigCols {
+	return SysConfigCols{
+		PrimaryId:   "config_id",
+		ConfigCode:  "config_code",
+		ConfigValue: "config_value",
+		Remark:      "remark",
+		CreateTime:  "create_time",
+		ModifyTime:  "modify_time",
+	}
+}
+
+func (m *SysConfig) GetConfigByCode(code string) (item *SysConfig, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().ConfigCode)
+	err = o.Raw(sql, code).QueryRow(&item)
+	return
+}

+ 19 - 18
models/sys_department.go

@@ -100,29 +100,30 @@ func DeleteSysDepartmentByIdV2(sysDepartmentIds []int, level int) (err error) {
 
 func SaveSysDepartmentName(sysDepartment *SysDepartment) (err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM user WHERE seller_department_id=?`
-	var userList []*User
-	_, err = o.Raw(sql, sysDepartment.SysDepartmentId).QueryRows(&userList)
-	if err != nil {
-		return
-	}
-	var pars []interface{}
-	pars = append(pars, sysDepartment.SysDepartmentName)
-	for _, user := range userList {
-		pars = append(pars, user.UserId)
-	}
+	//sql := `SELECT * FROM user WHERE seller_department_id=?`
+	//var userList []*User
+	//_, err = o.Raw(sql, sysDepartment.SysDepartmentId).QueryRows(&userList)
+	//if err != nil {
+	//	return
+	//}
+	//var pars []interface{}
+	//pars = append(pars, sysDepartment.SysDepartmentName)
+	//for _, user := range userList {
+	//	pars = append(pars, user.UserId)
+	//}
 	err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
 		_, e := txOrm.Update(sysDepartment, "sys_department_name")
 		if e != nil {
 			return e
 		}
-		if len(userList) > 0 {
-			sql := `UPDATE user SET seller_department_name=? WHERE user_id IN (` + utils.GetOrmReplaceHolder(len(userList)) + `)`
-			_, e = txOrm.Raw(sql, pars).Exec()
-			if e != nil {
-				return e
-			}
-		}
+		//sql := `UPDATE `
+		//if len(userList) > 0 {
+		//	sql := `UPDATE user SET seller_department_name=? WHERE user_id IN (` + utils.GetOrmReplaceHolder(len(userList)) + `)`
+		//	_, e = txOrm.Raw(sql, pars).Exec()
+		//	if e != nil {
+		//		return e
+		//	}
+		//}
 		return nil
 	})
 	return

+ 0 - 99
models/sys_message_report.go

@@ -1,99 +0,0 @@
-package models
-
-import (
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type SysMessageReport struct {
-	SysMessageReportId int       `orm:"pk" description:"消息id"`
-	UserId             int       `description:"到期用户id"`
-	ReceiveSysUserId   int       `description:"接收系统用户id"`
-	MessageType        int       `description:"消息类型"`
-	Content            string    `description:"内容"`
-	Remark             string    `description:"备注"`
-	IsRead             bool      `description:"是否已读"`
-	CreateTime         time.Time `description:"创建时间"`
-	ModifyTime         time.Time `description:"修改时间"`
-}
-
-type SysMessageReportView struct {
-	SysMessageReportId int    `orm:"pk" description:"消息id"`
-	UserId             int    `description:"到期用户id"`
-	ReceiveSysUserId   int    `description:"接收系统用户id"`
-	MessageType        int    `description:"消息类型"`
-	Content            string `description:"内容"`
-	Remark             string `description:"备注"`
-	IsRead             bool   `description:"是否已读"`
-	CreateTime         string `description:"创建时间"`
-	ModifyTime         string `description:"修改时间"`
-}
-
-func (s *SysMessageReport) Update(cols []string) (err error) {
-	o := orm.NewOrm()
-	_, err = o.Update(s, cols...)
-	return
-}
-
-func UpdateReadSysMessageReportByUserId(userId int) (err error) {
-	o := orm.NewOrm()
-	sql := `UPDATE sys_message_report SET is_read=1 WHERE receive_sys_user_id=? AND is_read=0`
-	_, err = o.Raw(sql, userId).Exec()
-	return
-}
-
-func GetSysMessageReportCountBySysUserId(sysUserId int) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(*) AS count FROM sys_message_report WHERE receive_sys_user_id=?`
-	err = o.Raw(sql, sysUserId).QueryRow(&count)
-	return
-}
-
-func GetSysMessageReportBySysUserId(sysUserId, startSize, pageSize int) (item []*SysMessageReport, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM sys_message_report WHERE receive_sys_user_id=? ORDER BY is_read ASC, create_time DESC LIMIT ?,?`
-	_, err = o.Raw(sql, sysUserId, startSize, pageSize).QueryRows(&item)
-	return
-}
-
-func InsertMultiSysMessageReport(sysMessageReportList []*SysMessageReport) (err error) {
-	o := orm.NewOrm()
-	_, err = o.InsertMulti(500, sysMessageReportList)
-	return
-}
-
-func GetSysMessageReportListById(sysMessageReportIds []int) (items []*SysMessageReport, err error) {
-	o := orm.NewOrm()
-	_, err = o.QueryTable(&SysMessageReport{}).
-		Filter("sys_message_report_id__in", sysMessageReportIds).
-		All(&items)
-	return
-}
-
-func GetSysMessageReportCount(sysUserId, userId, messageType int) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(*) AS count FROM sys_message_report WHERE user_id=? AND message_type=? `
-	err = o.Raw(sql, userId, messageType).QueryRow(&count)
-	return
-}
-
-func GetSysMessageReportByCondition(condition string, pars []interface{}) (items []*SysMessageReport, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM sys_message_report WHERE 1=1`
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars...).QueryRows(&items)
-	return
-}
-
-func GetSysMessageReportCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(*) AS count FROM sys_message_report `
-	if condition != "" {
-		sql += condition
-	}
-	err = o.Raw(sql, pars...).QueryRow(&count)
-	return
-}

+ 1 - 1
models/sys_user.go

@@ -152,7 +152,7 @@ func GetSysUserListByCondition(condition string, pars []interface{}, startSize,
 }
 
 func GetSysUserListByIsEnabled(isEnabled bool) (items []*SysUser, err error) {
-	sql := `SELECT * FROM sys_user u WHERE 1=1 AND is_enabled=?`
+	sql := `SELECT * FROM sys_user u WHERE 1=1 AND is_enabled=? AND sys_user_id <> 1`
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, isEnabled).QueryRows(&items)
 	return

+ 0 - 359
models/user.go

@@ -1,359 +0,0 @@
-package models
-
-import (
-	"context"
-	"eta/eta_mini_crm/utils"
-	"fmt"
-	"strings"
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type User struct {
-	UserId               int       `orm:"pk" description:"用户id"`
-	OpenId               string    `description:"openid"`
-	UnionId              string    `description:"unionid"`
-	NickName             string    `description:"用户昵称"`
-	RealName             string    `description:"姓名"`
-	Phone                string    `description:"手机号"`
-	AreaCode             string    `description:"区号"`
-	Email                string    `description:"邮箱"`
-	SellerId             int       `description:"销售id(SysUserId)"`
-	SellerDepartmentId   int       `description:"营业部门id"`
-	SellerDepartmentName string    `description:"营业部门名称"`
-	Company              string    `description:"所属公司"`
-	ValidStartTime       time.Time `description:"有效期开始时间"`
-	ValidEndTime         time.Time `description:"有效期结束时间"`
-	Status               int       `description:"用户类型: 0表示禁用,1表示潜在客户,2表示正式客户"`
-	ApplyStatus          int       `description:"申请状态: 0表示未申请,1表示已申请"`
-	CreateTime           time.Time `description:"系统中首次新增用户的时间"`
-	ModifyTime           time.Time `description:"系统中用户信息变更的时间"`
-	RegisterTime         time.Time `description:"用户首次登录小程序的时间"`
-	ApplyTime            time.Time `description:"用户提交申请的时间"`
-	IsSubscribed         bool      `description:"是否关注公众号: 0表示没有关注,1表示关注"`
-	IsRegistered         bool      `description:"是否注册: 0表示没有注册,1表示注册"`
-	AccessToken          string    `description:"用户token"`
-	Headimgurl           string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
-}
-
-type UserView struct {
-	UserId               int    `orm:"pk" description:"用户id"`
-	RealName             string `description:"姓名"`
-	Phone                string `description:"手机号"`
-	AreaCode             string `description:"区号"`
-	Email                string `description:"邮箱"`
-	SellerDepartmentId   int    `description:"营业部门id"`
-	SellerDepartmentName string `description:"营业部门名称"`
-	Company              string `description:"所属公司"`
-	ValidStartTime       string `description:"有效期开始时间"`
-	ValidEndTime         string `description:"有效期结束时间"`
-	RestDate             int    `description:"剩余天数"`
-	Status               int    `description:"用户类型: 0表示禁用,1表示潜在客户,2表示正式客户"`
-	ApplyStatus          int    `description:"申请状态: 0表示未申请,1表示已申请"`
-	ReadCnt              int    `description:"用户阅读量"`
-	ApplyTime            string `description:"用户提交申请的时间"`
-	CreateTime           string `description:"系统中首次新增用户的时间"`
-	ModifyTime           string `description:"系统中用户信息变更的时间"`
-	LastUpdateTime       string `description:"最近一次阅读时间"`
-	RegisterTime         string `description:"用户首次登录小程序的时间"`
-	IsSubscribed         bool   `description:"是否关注公众号: 0表示没有关注,1表示关注"`
-	IsRegistered         bool   `description:"是否注册: 0表示没有注册,1表示注册"`
-}
-
-func (u *User) Save() (err error) {
-	o := orm.NewOrm()
-	_, err = o.InsertOrUpdate(u)
-	return
-}
-
-func (u *User) Update(cols []string) (err error) {
-	o := orm.NewOrm()
-	_, err = o.Update(u, cols...)
-	return
-}
-
-func UpdateUserStatus(condition string, pars []interface{}) (err error) {
-	o := orm.NewOrm()
-	sql := ` UPDATE user SET status=0 WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars).Exec()
-	return
-}
-
-func GetUserIdListByCondition(condition string, pars []interface{}) (items []int, err error) {
-	o := orm.NewOrm()
-	sql := ` SELECT user_id FROM user WHERE 1=1 `
-	if condition != "" {
-		sql += condition
-	}
-	_, err = o.Raw(sql, pars).QueryRows(&items)
-	return
-}
-
-func SaveUser(user *User, chartPermissionIds []int) (err error) {
-	o := orm.NewOrm()
-	err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
-		insertId, er := txOrm.InsertOrUpdate(user)
-		if er != nil {
-			return er
-		}
-		if user.UserId != 0 {
-			insertId = int64(user.UserId)
-		} else {
-			user.UserId = int(insertId)
-		}
-		// 先删除再增加
-		sql := `DELETE FROM user_chart_permission_mapping WHERE user_id=?`
-		_, er = txOrm.Raw(sql, insertId).Exec()
-		if er != nil {
-			return er
-		}
-		for _, id := range chartPermissionIds {
-			userChartPermissionMapping := new(UserChartPermissionMapping)
-			userChartPermissionMapping.UserId = int(insertId)
-			userChartPermissionMapping.ChartPermissionId = id
-			_, er = txOrm.Insert(userChartPermissionMapping)
-			if er != nil {
-				return er
-
-			}
-		}
-		return nil
-	})
-	return
-}
-
-func GetUserByPhone(phone, areaCode string) (item *User, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM user WHERE phone=? AND area_code=?`
-	err = o.Raw(sql, phone, areaCode).QueryRow(&item)
-	return
-}
-
-func GetUserByEmail(email string) (item *User, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM user WHERE email=? `
-	err = o.Raw(sql, email).QueryRow(&item)
-	return
-}
-
-func GetUserById(userId int) (item *User, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM user WHERE user_id=? `
-	err = o.Raw(sql, userId).QueryRow(&item)
-	return
-}
-
-func GetUserViewById(userId int) (item *UserView, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM user WHERE user_id=? `
-	err = o.Raw(sql, userId).QueryRow(&item)
-	return
-}
-
-func GetUserList(condition string, pars []interface{}, startSize, pageSize int) (items []*UserView, err error) {
-	sql := `SELECT u.*, su.sys_real_name AS seller_name FROM user AS u
-	LEFT JOIN sys_user AS su
-	ON u.seller_id = su.sys_user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) `
-	if condition != "" {
-		sql += condition
-	}
-	sql += ` ORDER BY modify_time DESC LIMIT ?,? `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	return
-}
-
-func GetUserListByConditonSort(condition, sortConditon string, pars []interface{}, startSize, pageSize int) (items []*UserView, err error) {
-	sql := `SELECT u.*, su.sys_real_name AS seller_name
-	FROM user AS u
-	LEFT JOIN sys_user AS su
-	ON u.seller_id = su.sys_user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) `
-	if condition != "" {
-		sql += condition
-	}
-	if sortConditon != "" {
-		sql += sortConditon
-	}
-	sql += ` LIMIT ?,? `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	return
-}
-
-func GetPotentialUserCountByConditon(condition string, pars []interface{}) (count int, err error) {
-	sql := `SELECT COUNT(DISTINCT u.user_id) AS count
-	FROM user AS u
-	LEFT JOIN user_read_record AS ur
-	ON u.user_id = ur.user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
-	if condition != "" {
-		sql += condition
-	}
-	o := orm.NewOrm()
-	err = o.Raw(sql, pars).QueryRow(&count)
-	return
-}
-
-func GetPotentialUserCountByConditonV2(condition string, pars []interface{}) (count int, err error) {
-	sql := `SELECT COUNT(u.user_id) AS count
-	FROM user AS u
-	LEFT JOIN (
-		SELECT user_id, MAX(create_time) AS create_time
-		FROM user_read_record
-		GROUP BY user_id
-	) AS ur
-	ON u.user_id = ur.user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
-	if condition != "" {
-		sql += condition
-	}
-	o := orm.NewOrm()
-	err = o.Raw(sql, pars).QueryRow(&count)
-	return
-}
-
-func GetPotentialUserIdsByConditonV2(condition string, pars []interface{}, sortConditon string, startSize, pageSize int) (items []*UserView, err error) {
-	sql := `SELECT DISTINCT u.*, ur.read_cnt, ur.create_time AS last_update_time
-	FROM user AS u
-	LEFT JOIN (
-		SELECT user_id, MAX(create_time) AS create_time, COUNT(user_id) AS read_cnt
-		FROM user_read_record
-		GROUP BY user_id
-	) AS ur
-	ON u.user_id = ur.user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
-	if condition != "" {
-		sql += condition
-	}
-	if sortConditon != "" {
-		sql += sortConditon
-	}
-	sql += ` LIMIT ?,? `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	return
-}
-
-func GetPotentialUserIdsByConditon(condition string, pars []interface{}) (userIds []string, err error) {
-	sql := `SELECT DISTINCT u.user_id AS user_id
-	FROM user AS u
-	LEFT JOIN user_read_record AS ur
-	ON u.user_id = ur.user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
-	if condition != "" {
-		sql += condition
-	}
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, pars).QueryRows(&userIds)
-	return
-}
-
-func GetPotentialUserListByConditonSort(userIds []string, sortConditon string, startSize, pageSize int) (items []*UserView, err error) {
-	sql := `SELECT u.*, COUNT(ur.user_id) AS read_cnt, Max(ur.create_time) AS last_update_time
-	FROM user AS u
-	LEFT JOIN user_read_record AS ur
-	ON u.user_id = ur.user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
-	if len(userIds) > 0 {
-		sql += fmt.Sprintf(" AND u.user_id IN (%s)", strings.Join(userIds, ","))
-	}
-	sql += ` GROUP BY u.user_id`
-	if sortConditon != "" {
-		sql += sortConditon
-	}
-	sql += ` LIMIT ?,? `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
-	return
-}
-
-func GetPotentialUserTotal() (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(*) AS count FROM user WHERE status=1`
-	err = o.Raw(sql).QueryRow(&count)
-	return
-}
-
-func GetUserReadList(condition, sortCondition string, pars []interface{}, startSize, pageSize int) (items []*UserView, err error) {
-	sql := `SELECT u.*, su.sys_real_name AS seller_name, COUNT(ur.user_id) AS read_cnt, Max(ur.create_time) AS last_update_time
-	FROM user AS u
-	LEFT JOIN sys_user AS su
-	ON u.seller_id = su.sys_user_id
-	LEFT JOIN user_read_record AS ur
-	ON u.user_id = ur.user_id
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) `
-	if condition != "" {
-		sql += condition
-	}
-	sql += ` GROUP BY u.user_id `
-	if sortCondition != "" {
-		sql += sortCondition
-	} else {
-		sql += ` ORDER BY read_cnt DESC `
-	}
-	sql += ` LIMIT ?,? `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	return
-}
-
-func GetUserReadCount(condition string, pars []interface{}) (count int, err error) {
-	sql := `SELECT COUNT(*) AS count 
-	FROM user  AS u
-	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) `
-	if condition != "" {
-		sql += condition
-	}
-	o := orm.NewOrm()
-	err = o.Raw(sql, pars...).QueryRow(&count)
-	return
-}
-
-func GetUserCount(condition string, pars []interface{}) (count int, err error) {
-	sql := `SELECT COUNT(*) AS count FROM user AS u WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) `
-	if condition != "" {
-		sql += condition
-	}
-	o := orm.NewOrm()
-	err = o.Raw(sql, pars...).QueryRow(&count)
-	return
-}
-
-func DeleteUserById(userId int) (err error) {
-	o := orm.NewOrm()
-	err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
-		sql := `DELETE FROM user WHERE user_id=?`
-		_, e := txOrm.Raw(sql, userId).Exec()
-		if e != nil {
-			return e
-		}
-		sql = `DELETE FROM user_chart_permission_mapping WHERE user_id=?`
-		_, e = txOrm.Raw(sql, userId).Exec()
-		if e != nil {
-			return e
-		}
-		return nil
-	})
-	return
-}
-
-func GetGlobalUserByCondition(userIds []int, sortCondition string, startSize, pageSize int) (items []*UserView, err error) {
-	if len(userIds) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	sql := `SELECT u.*, COUNT(ur.user_id) AS read_cnt, MAX(ur.create_time) AS last_update_time
-	FROM user AS u
-	LEFT JOIN user_read_record AS ur
-	ON u.user_id = ur.user_id 
-	WHERE u.user_id IN (` + utils.GetOrmReplaceHolder(len(userIds)) + `)
-	GROUP BY u.user_id ` + sortCondition + ` LIMIT ?,? `
-	_, err = o.Raw(sql, userIds, startSize, pageSize).QueryRows(&items)
-	return
-}

+ 0 - 41
models/user_change_record.go

@@ -1,41 +0,0 @@
-package models
-
-import (
-	"time"
-
-	"github.com/beego/beego/v2/client/orm"
-)
-
-type UserChangeRecord struct {
-	UserChangeRecordId int       `orm:"pk" description:"id"`
-	UserId             int       `description:"用户id"`
-	SysUserId          int       `description:"系统用户id"`
-	Content            string    `description:"内容"`
-	CreateTime         time.Time `description:"创建时间"`
-}
-
-func (u *UserChangeRecord) Insert() (err error) {
-	u.CreateTime = time.Now()
-	o := orm.NewOrm()
-	_, err = o.Insert(u)
-	return
-}
-func UserChangeRecordMultiInsert(list []*UserChangeRecord) (err error) {
-	o := orm.NewOrm()
-	_, err = o.InsertMulti(500, list)
-	return
-}
-
-func GetUserChangeRecordListById(userId int) (items []*UserChangeRecord, err error) {
-	sql := `SELECT * FROM user_change_record WHERE user_id=? ORDER BY create_time DESC `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, userId).QueryRows(&items)
-	return
-}
-
-func GetUserChangeRecordCount() (count int, err error) {
-	sql := `SELECT COUNT(*) AS count FROM user_change_record `
-	o := orm.NewOrm()
-	err = o.Raw(sql).QueryRow(&count)
-	return
-}

+ 0 - 16
models/user_chart_permission_mapping.go

@@ -1,16 +0,0 @@
-package models
-
-import "github.com/beego/beego/v2/client/orm"
-
-type UserChartPermissionMapping struct {
-	UserChartPermissionMappingId int `orm:"pk" description:"id"`
-	UserId                       int `description:"用户id"`
-	ChartPermissionId            int `description:"品种id"`
-}
-
-func GetChartPermissionIdByUserId(UserId int) (items []int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT chart_permission_id FROM user_chart_permission_mapping WHERE user_id=?`
-	_, err = o.Raw(sql, UserId).QueryRows(&items)
-	return
-}

+ 98 - 118
models/user_read_record.go

@@ -3,150 +3,130 @@ package models
 import (
 	"eta/eta_mini_crm/utils"
 	"fmt"
-	"time"
-
 	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
 )
 
+// UserReadRecord 用户阅读统计表
 type UserReadRecord struct {
-	UserReadRecordId int    `orm:"pk" description:"id"`
-	UserId           int    `description:"用户id"`
-	ReportId         int    `description:"报告id"`
-	ReportTitle      string `description:"报告标题"`
-	// ChartPermissionId1  string    `description:"一级品种id"`
-	// ChartPermissionId2  string    `description:"二级品种id"`
-	ChartPermissionName string    `description:"二级品种名称"`
-	ClassifyId1         int       `description:"一级级分类id"`
-	ClassifyName1       string    `description:"一级分类名称"`
-	ClassifyId2         int       `description:"二级分类id"`
-	ClassifyName2       string    `description:"二级分类名称"`
-	ClassifyId3         int       `description:"三级分类id"`
-	ClassifyName3       string    `description:"三级分类名称"`
-	Timestamp           int       `description:"阅读开始时间戳"`
-	EndTimestamp        int       `description:"阅读结束时间戳"`
-	CreateTime          time.Time `description:"创建时间"`
-	CreateDate          string    `description:"创建日期"`
-	StayTime            string    `description:"停留时间"`
-	StayTimestamp       string    `description:"停留时间戳"`
-	ReportType          int       `description:"报告类型:1-普通研报;2-pdf研报"`
+	Id                 int       `orm:"column(id);pk"`
+	UserId             int       `description:"用户ID"`
+	ReportId           int       `description:"报告ID"`
+	ReportTitle        string    `description:"报告标题"`
+	ClassifyIdFirst    int       `description:"一级分类ID"`
+	ClassifyNameFirst  string    `description:"一级分类名称"`
+	ClassifyIdSecond   int       `description:"二级分类ID"`
+	ClassifyNameSecond string    `description:"二级分类名称"`
+	ClassifyIdThird    int       `description:"三级分类ID"`
+	ClassifyNameThird  string    `description:"三级分类名称"`
+	StartTimestamp     int       `description:"阅读开始时间戳"`
+	EndTimestamp       int       `description:"阅读结束时间戳"`
+	ReportSource       int       `description:"报告来源:1-研报中心;2-文档管理库"`
+	CreateTime         time.Time `description:"创建时间"`
 }
 
-type UserReadRecordView struct {
-	UserReadRecordId int    `orm:"pk" description:"id"`
-	UserId           int    `description:"用户id"`
-	ReportId         int    `description:"报告id"`
-	ReportTitle      string `description:"报告标题"`
-	// ChartPermissionId1  string    `description:"一级品种id"`
-	// ChartPermissionId2  string    `description:"二级品种id"`
-	ChartPermissionName string `description:"二级品种名称"`
-	ClassifyId1         int    `description:"一级级分类id"`
-	ClassifyName1       string `description:"一级分类名称"`
-	ClassifyId2         int    `description:"二级分类id"`
-	ClassifyName2       string `description:"二级分类名称"`
-	ClassifyId3         int    `description:"三级分类id"`
-	ClassifyName3       string `description:"三级分类名称"`
-	Timestamp           int    `description:"阅读开始时间戳"`
-	EndTimestamp        int    `description:"阅读结束时间戳"`
-	CreateTime          string `description:"创建时间"`
-	CreateDate          string `description:"创建日期"`
-	StayTime            string `description:"停留时间"`
-	StayTimestamp       string `description:"停留时间戳"`
-	ReportType          int    `description:"报告类型:1-普通研报;2-pdf研报"`
+func (m *UserReadRecord) TableName() string {
+	return "user_read_record"
 }
 
-type ReadCntStaitc struct {
-	CreateDate string
-	Count      int
+type UserReadRecordCols struct {
+	PrimaryId          string
+	UserId             string
+	ReportId           string
+	ReportTitle        string
+	ClassifyIdFirst    string
+	ClassifyNameFirst  string
+	ClassifyIdSecond   string
+	ClassifyNameSecond string
+	ClassifyIdThird    string
+	ClassifyNameThird  string
+	StartTimestamp     string
+	EndTimestamp       string
+	ReportSource       string
+	CreateTime         string
 }
-type PermissionCntStaitc struct {
-	ChartPermissionId int
-	PermissionName    string
-	Count             int
-	Percent           float64
+
+func (m *UserReadRecord) Cols() UserReadRecordCols {
+	return UserReadRecordCols{
+		PrimaryId:          "id",
+		UserId:             "user_id",
+		ReportId:           "report_id",
+		ReportTitle:        "report_title",
+		ClassifyIdFirst:    "classify_id_first",
+		ClassifyNameFirst:  "classify_name_first",
+		ClassifyIdSecond:   "classify_id_second",
+		ClassifyNameSecond: "classify_name_second",
+		ClassifyIdThird:    "classify_id_third",
+		ClassifyNameThird:  "classify_name_third",
+		StartTimestamp:     "start_timestamp",
+		EndTimestamp:       "end_timestamp",
+		ReportSource:       "report_source",
+		CreateTime:         "create_time",
+	}
 }
 
-func GetUserReadRecordByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds []int, userId int, condition string, pars []interface{}, startSize, pageSize int) (items []*UserReadRecordView, err error) {
+func (m *UserReadRecord) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT DISTINCT ur.user_read_record_id, ur.report_id, ur.report_title, ur.chart_permission_name, ur.classify_name2, 
-		ur.create_time, ur.stay_time, ur.classify_id2, ur.classify_id3, ur.classify_name3, ur.classify_id1, ur.classify_name1
-	  	FROM user_read_record AS ur
-		LEFT JOIN user_read_permission2 AS urp2
-		ON ur.user_read_record_id = urp2.user_read_record_id
-		WHERE user_id = ? `
-	if condition != "" {
-		sql += condition
-	}
-	if len(firstClassifyIds) != 0 || len(secondClassifyIds) != 0 || len(thirdClassifyIds) != 0 {
-		sql += ` AND (1=2 `
-		if len(firstClassifyIds) > 0 {
-			sql += fmt.Sprintf(" OR ur.classify_id1 IN (%s) ", utils.GetOrmReplaceHolder(len(firstClassifyIds)))
-		}
-		if len(secondClassifyIds) > 0 {
-			sql += fmt.Sprintf(" OR ur.classify_id2 IN (%s) ", utils.GetOrmReplaceHolder(len(secondClassifyIds)))
-		}
-		if len(thirdClassifyIds) > 0 {
-			sql += fmt.Sprintf(" OR ur.classify_id3 IN (%s) ", utils.GetOrmReplaceHolder(len(thirdClassifyIds)))
-		}
-		sql += ` ) `
-	}
-	sql += ` ORDER BY create_time DESC LIMIT ?, ?`
-	_, err = o.Raw(sql, userId, pars, firstClassifyIds, secondClassifyIds, thirdClassifyIds, startSize, pageSize).QueryRows(&items)
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
 	return
 }
 
-func GetUserReadRecordCountByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds []int, userId int, condition string, pars []interface{}) (count int, err error) {
+func (m *UserReadRecord) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*UserReadRecord, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT COUNT(DISTINCT ur.user_read_record_id) AS count
-	  	FROM user_read_record AS ur
-		LEFT JOIN user_read_permission2 AS urp2
-		ON ur.user_read_record_id = urp2.user_read_record_id
-		WHERE user_id = ? `
-	if condition != "" {
-		sql += condition
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
 	}
-	if len(firstClassifyIds) != 0 || len(secondClassifyIds) != 0 || len(thirdClassifyIds) != 0 {
-		sql += ` AND (1=2 `
-		if len(firstClassifyIds) > 0 {
-			sql += fmt.Sprintf(" OR ur.classify_id1 IN (%s) ", utils.GetOrmReplaceHolder(len(firstClassifyIds)))
-		}
-		if len(secondClassifyIds) > 0 {
-			sql += fmt.Sprintf(" OR ur.classify_id2 IN (%s) ", utils.GetOrmReplaceHolder(len(secondClassifyIds)))
-		}
-		if len(thirdClassifyIds) > 0 {
-			sql += fmt.Sprintf(" OR ur.classify_id3 IN (%s) ", utils.GetOrmReplaceHolder(len(thirdClassifyIds)))
-		}
-		sql += ` ) `
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
 	}
-	err = o.Raw(sql, userId, pars, firstClassifyIds, secondClassifyIds, thirdClassifyIds).QueryRow(&count)
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
-func GetStaticReadCnt(condition string, pars []interface{}, startDate, endDate string) (items []*ReadCntStaitc, err error) {
+func (m *UserReadRecord) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*UserReadRecord, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT create_date, COUNT(*) AS count
-	FROM user_read_record AS ur
-	LEFT JOIN user_read_permission2 AS urp
-	ON ur.user_read_record_id = urp.user_read_record_id
-	WHERE 1=1  `
-	if condition != "" {
-		sql += condition
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
 	}
-	sql += ` AND (ur.create_date BETWEEN ? AND ?)  GROUP BY ur.create_date`
-	_, err = o.Raw(sql, pars, startDate, endDate).QueryRows(&items)
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
 
-func GetStaticPermissionCnt(condition string, pars []interface{}) (items []*PermissionCntStaitc, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT urp.chart_permission_id, urp.permission_name,COUNT(*) AS count
-	FROM user_read_permission1 AS urp
-	LEFT JOIN user_read_record AS ur
-	ON urp.user_read_record_id = ur.user_read_record_id
-	WHERE 1=1 `
-	if condition != "" {
-		sql += condition
+type UserReadRecordItem struct {
+	UserId             int    `description:"用户ID"`
+	ReportId           int    `description:"报告ID"`
+	ReportTitle        string `description:"报告标题"`
+	ClassifyNameFirst  string `description:"一级分类名称"`
+	ClassifyNameSecond string `description:"二级分类名称"`
+	ClassifyNameThird  string `description:"三级分类名称"`
+	ReadDuration       string `description:"阅读时长"`
+	ReportSource       int    `description:"报告来源:1-研报中心;2-文档管理库"`
+	CreateTime         string `description:"创建时间"`
+}
+
+func (m *UserReadRecord) Format2Item() (item *UserReadRecordItem) {
+	item = new(UserReadRecordItem)
+	item.UserId = m.UserId
+	item.ReportId = m.ReportId
+	item.ReportTitle = m.ReportTitle
+	item.ClassifyNameFirst = m.ClassifyNameFirst
+	item.ClassifyNameSecond = m.ClassifyNameSecond
+	item.ClassifyNameThird = m.ClassifyNameThird
+	if m.StartTimestamp > 0 && m.EndTimestamp > 0 {
+		item.ReadDuration = utils.SecondsToHMS(int64(m.EndTimestamp - m.StartTimestamp))
 	}
-	sql += ` GROUP BY urp.chart_permission_id`
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	item.ReportSource = m.ReportSource
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
 	return
 }

+ 171 - 0
models/user_record.go

@@ -0,0 +1,171 @@
+package models
+
+import (
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// UserRecord 用户表
+type UserRecord struct {
+	UserRecordId  int       `orm:"column(user_record_id);pk"`
+	UserId        int       `description:"用户ID"`
+	OpenId        string    `description:"open_id"`
+	UnionId       string    `description:"用户统一标识"`
+	Subscribe     int       `description:"公众号关注状态:0-未关注;1-已关注"`
+	SubscribeTime time.Time `description:"公众号关注/取消关注时间"`
+	NickName      string    `description:"用户昵称"`
+	RealName      string    `description:"用户姓名"`
+	Gender        int       `description:"性别"`
+	Avatar        string    `description:"用户头像"`
+	SessionKey    string    `description:"微信小程序会话密钥"`
+	CreateTime    time.Time `description:"创建时间"`
+	ModifyTime    time.Time `description:"更新时间"`
+}
+
+func (m *UserRecord) TableName() string {
+	return "user_record"
+}
+
+type UserRecordCols struct {
+	PrimaryId     string
+	UserId        string
+	OpenId        string
+	UnionId       string
+	Subscribe     string
+	SubscribeTime string
+	NickName      string
+	RealName      string
+	Gender        string
+	Avatar        string
+	SessionKey    string
+	CreateTime    string
+	ModifyTime    string
+}
+
+func (m *UserRecord) Cols() UserRecordCols {
+	return UserRecordCols{
+		PrimaryId:     "user_record_id",
+		UserId:        "user_id",
+		OpenId:        "open_id",
+		UnionId:       "union_id",
+		Subscribe:     "subscribe",
+		SubscribeTime: "subscribe_time",
+		NickName:      "nick_name",
+		RealName:      "real_name",
+		Gender:        "gender",
+		Avatar:        "avatar",
+		SessionKey:    "session_key",
+		CreateTime:    "create_time",
+		ModifyTime:    "modify_time",
+	}
+}
+
+func (m *UserRecord) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.UserRecordId = int(id)
+	return
+}
+
+func (m *UserRecord) CreateMulti(items []*UserRecord) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *UserRecord) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *UserRecord) Remove() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	_, err = o.Raw(sql, m.UserRecordId).Exec()
+	return
+}
+
+func (m *UserRecord) MultiRemove(ids []int) (err error) {
+	if len(ids) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	_, err = o.Raw(sql, ids).Exec()
+	return
+}
+
+func (m *UserRecord) RemoveByCondition(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
+	_, err = o.Raw(sql, pars).Exec()
+	return
+}
+
+func (m *UserRecord) GetItemById(id int) (item *UserRecord, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *UserRecord) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *UserRecord, err error) {
+	o := orm.NewOrm()
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *UserRecord) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *UserRecord) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*UserRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *UserRecord) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*UserRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 294 - 0
models/users.go

@@ -0,0 +1,294 @@
+package models
+
+import (
+	"eta/eta_mini_crm/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// Users 用户表
+type Users struct {
+	UserId          int       `orm:"column(user_id);pk"`
+	RealName        string    `description:"用户姓名"`
+	Mobile          string    `description:"手机号"`
+	AreaCode        string    `description:"区号"`
+	SellerId        int       `description:"销售ID"`
+	SellerName      string    `description:"销售名称"`
+	SysUserId       int       `description:"操作人ID"`
+	SysUserRealName string    `description:"操作人姓名"`
+	CompanyId       int       `description:"所属机构ID"`
+	CompanyName     string    `description:"所属机构名称"`
+	Status          int       `description:"用户类型:1-试用用户;2-正式用户"`
+	AuthStatus      int       `description:"权限状态:0-关闭;1-开启"`
+	IsRegistered    int       `description:"注册状态:0-未注册;1-已注册"`
+	RegisterTime    time.Time `description:"注册时间"`
+	Subscribe       int       `description:"是否关注公众号:0-未关注;1-已关注"`
+	LastReadTime    time.Time `description:"最后一次阅读时间"`
+	ReadTimes       int       `description:"阅读次数"`
+	OpenId          string    `description:"open_id"`
+	UnionId         string    `description:"用户统一标识"`
+	IsDeleted       int       `description:"删除状态:0-正常;1-已删除"`
+	CreateTime      time.Time `description:"创建时间"`
+	ModifyTime      time.Time `description:"修改时间"`
+}
+
+func (m *Users) TableName() string {
+	return "users"
+}
+
+type UsersCols struct {
+	PrimaryId       string
+	RealName        string
+	Mobile          string
+	AreaCode        string
+	SellerId        string
+	SellerName      string
+	SysUserId       string
+	SysUserRealName string
+	CompanyId       string
+	CompanyName     string
+	Status          string
+	AuthStatus      string
+	IsRegistered    string
+	RegisterTime    string
+	LastReadTime    string
+	ReadTimes       string
+	OpenId          string
+	UnionId         string
+	IsDeleted       string
+	CreateTime      string
+	ModifyTime      string
+}
+
+func (m *Users) Cols() UsersCols {
+	return UsersCols{
+		PrimaryId:       "user_id",
+		RealName:        "real_name",
+		Mobile:          "mobile",
+		AreaCode:        "area_code",
+		SellerId:        "seller_id",
+		SellerName:      "seller_name",
+		SysUserId:       "sys_user_id",
+		SysUserRealName: "sys_user_real_name",
+		CompanyId:       "company_id",
+		CompanyName:     "company_name",
+		Status:          "status",
+		AuthStatus:      "auth_status",
+		IsRegistered:    "is_registered",
+		RegisterTime:    "register_time",
+		LastReadTime:    "last_read_time",
+		ReadTimes:       "read_times",
+		OpenId:          "open_id",
+		UnionId:         "union_id",
+		IsDeleted:       "is_deleted",
+		CreateTime:      "create_time",
+		ModifyTime:      "modify_time",
+	}
+}
+
+func (m *Users) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.UserId = int(id)
+	return
+}
+
+func (m *Users) CreateMulti(items []*Users) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *Users) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *Users) Remove() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeleted, m.Cols().PrimaryId)
+	_, err = o.Raw(sql, m.UserId).Exec()
+	return
+}
+
+func (m *Users) MultiRemove(ids []int) (err error) {
+	if len(ids) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s IN (%s)`, m.TableName(), m.Cols().IsDeleted, RowDeleted, m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	_, err = o.Raw(sql, ids).Exec()
+	return
+}
+
+func (m *Users) RemoveByCondition(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s`, m.TableName(), m.Cols().IsDeleted, RowDeleted, condition)
+	_, err = o.Raw(sql, pars).Exec()
+	return
+}
+
+func (m *Users) GetItemById(id int) (item *Users, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d AND %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, m.Cols().PrimaryId)
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *Users) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *Users, err error) {
+	o := orm.NewOrm()
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d %s %s LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *Users) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE %s = %d %s`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *Users) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Users, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *Users) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*Users, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s LIMIT ?,?`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// UsersItem 用户信息
+type UsersItem struct {
+	UserId       int    `description:"用户ID"`
+	RealName     string `description:"用户姓名"`
+	Mobile       string `description:"手机号"`
+	MobileHidden string `description:"手机号(隐藏中间四位)"`
+	AreaCode     string `description:"区号"`
+	SellerName   string `description:"销售名称"`
+	CompanyName  string `description:"所属机构名称"`
+	Status       int    `description:"用户类型:1-试用用户;2-正式用户"`
+	AuthStatus   int    `description:"权限状态:0-关闭;1-开启"`
+	IsRegistered int    `description:"注册状态:0-未注册;1-已注册"`
+	RegisterTime string `description:"注册时间"`
+	Subscribe    int    `description:"是否关注公众号:0-未关注;1-已关注"`
+	LastReadTime string `description:"最后一次阅读时间"`
+	ReadTimes    int    `description:"阅读次数"`
+	TrialExpired bool   `description:"试用到期:true-已到期"`
+	CreateTime   string `description:"创建时间"`
+	ModifyTime   string `description:"修改时间"`
+}
+
+func (m *Users) Format2Item() (item *UsersItem) {
+	item = new(UsersItem)
+	item.UserId = m.UserId
+	item.RealName = m.RealName
+	item.Mobile = m.Mobile
+	item.MobileHidden = utils.HideMobileMiddle(m.Mobile)
+	item.AreaCode = m.AreaCode
+	item.SellerName = m.SellerName
+	item.CompanyName = m.CompanyName
+	item.Status = m.Status
+	item.AuthStatus = m.AuthStatus
+	item.IsRegistered = m.IsRegistered
+	item.RegisterTime = utils.TimeTransferString(utils.FormatDateTime, m.RegisterTime)
+	item.Subscribe = m.Subscribe
+	item.LastReadTime = utils.TimeTransferString(utils.FormatDateTime, m.LastReadTime)
+	item.ReadTimes = m.ReadTimes
+	// 试用到期
+	if m.Status == UserStatusTrial && !m.RegisterTime.IsZero() {
+		expiredTime := m.RegisterTime.Add(3 * 24 * time.Hour)
+		if expiredTime.Before(time.Now().Local()) {
+			item.TrialExpired = true
+		}
+	}
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
+	item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
+	return
+}
+
+func (m *Users) UpdateCompanyNameById(companyId int, companyName string) (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, m.TableName(), m.Cols().CompanyName, m.Cols().CompanyId)
+	_, err = o.Raw(sql, companyName, companyId).Exec()
+	return
+}
+
+func (m *Users) GetCompanyIdsByKeywords(keywords string) (companyIds []int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT DISTINCT %s FROM %s WHERE %s LIKE ? OR %s LIKE ? AND %s > 0`, m.Cols().CompanyId, m.TableName(), m.Cols().RealName, m.Cols().Mobile, m.Cols().CompanyId)
+	_, err = o.Raw(sql, keywords, keywords).QueryRows(&companyIds)
+	return
+}
+
+func (m *Users) RemoveUsersAndUserRecord(userId int) (err error) {
+	if userId <= 0 {
+		err = fmt.Errorf("user id is zero")
+		return
+	}
+	o := orm.NewOrm()
+	tx, e := o.Begin()
+	if e != nil {
+		err = fmt.Errorf("orm begin err: %v", e)
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, m.Cols().PrimaryId)
+	if _, e = tx.Raw(sql, RowDeleted, userId).Exec(); e != nil {
+		err = fmt.Errorf("delete user err: %v", e)
+		return
+	}
+
+	// 移除微信用户的UserId关联
+	recordOb := new(UserRecord)
+	sql = fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, recordOb.TableName(), recordOb.Cols().UserId, recordOb.Cols().UserId)
+	if _, e = tx.Raw(sql, 0, userId).Exec(); e != nil {
+		err = fmt.Errorf("delete company users err: %v", e)
+		return
+	}
+	return
+}

+ 59 - 194
routers/commentsRouter.go

@@ -7,25 +7,7 @@ import (
 
 func init() {
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ChartPermissionController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ChartPermissionController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ClassifyController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
             Method: "Add",
             Router: `/add`,
@@ -34,25 +16,7 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
-        beego.ControllerComments{
-            Method: "Author",
-            Router: `/author`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
-        beego.ControllerComments{
-            Method: "Delete",
-            Router: `/delete`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
             Method: "Detail",
             Router: `/detail`,
@@ -61,7 +25,7 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
             Method: "Edit",
             Router: `/edit`,
@@ -70,91 +34,64 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
-            Method: "Publish",
-            Router: `/publish`,
+            Method: "OperateRecords",
+            Router: `/operate_records`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
-            Method: "PublishCancel",
-            Router: `/publishCancel`,
+            Method: "PageList",
+            Router: `/page_list`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPdfController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
-            Method: "UploadPdf",
-            Router: `/uploadPdf`,
+            Method: "Remove",
+            Router: `/remove`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
-            Method: "BatchPush",
-            Router: `/batch/push`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"],
-        beego.ControllerComments{
-            Method: "BatchPushCancel",
-            Router: `/batch/pushCancel`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
+            Method: "Search",
+            Router: `/search`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:CompanyController"],
         beego.ControllerComments{
-            Method: "Push",
-            Router: `/push`,
+            Method: "TransAuth",
+            Router: `/trans_auth`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportPushStatusController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportController"],
         beego.ControllerComments{
-            Method: "PushCancel",
-            Router: `/pushCancel`,
-            AllowHTTPMethods: []string{"post"},
+            Method: "ClassifyTree",
+            Router: `/classify_tree`,
+            AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SellerController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SellerController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:ReportController"],
         beego.ControllerComments{
-            Method: "DepartmentList",
-            Router: `/department/list`,
+            Method: "ReadRecord",
+            Router: `/read_record`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -214,24 +151,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SysMessageReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SysMessageReportController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SysMessageReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SysMessageReportController"],
-        beego.ControllerComments{
-            Method: "Read",
-            Router: `/read`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SysRoleController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:SysRoleController"],
         beego.ControllerComments{
             Method: "Add",
@@ -385,43 +304,43 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"],
         beego.ControllerComments{
-            Method: "Add",
-            Router: `/add`,
-            AllowHTTPMethods: []string{"post"},
+            Method: "AreaCodeList",
+            Router: `/area_code/list`,
+            AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"],
         beego.ControllerComments{
-            Method: "ChangeList",
-            Router: `/change_list`,
-            AllowHTTPMethods: []string{"get"},
+            Method: "Login",
+            Router: `/login`,
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "Check",
-            Router: `/check`,
+            Method: "Add",
+            Router: `/add`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "Delete",
-            Router: `/delete`,
+            Method: "CheckAdd",
+            Router: `/add/check`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
             Method: "Detail",
             Router: `/detail`,
@@ -430,7 +349,7 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
             Method: "Edit",
             Router: `/edit`,
@@ -439,112 +358,58 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "EditEnabled",
-            Router: `/editEnabled`,
+            Method: "Move",
+            Router: `/move`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "GlobalSearch",
-            Router: `/global/list`,
+            Method: "OperateRecords",
+            Router: `/operate_records`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
+            Method: "PageList",
+            Router: `/page_list`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "PotentialEdit",
-            Router: `/potential/edit`,
+            Method: "Remove",
+            Router: `/remove`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "ExportPotentialExcel",
-            Router: `/potential/export/excel`,
+            Method: "Search",
+            Router: `/search`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UsersController"],
         beego.ControllerComments{
-            Method: "PotentialList",
-            Router: `/potential/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"],
-        beego.ControllerComments{
-            Method: "AreaCodeList",
-            Router: `/area_code/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"],
-        beego.ControllerComments{
-            Method: "Login",
-            Router: `/login`,
+            Method: "TransFormal",
+            Router: `/trans_formal`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"],
-        beego.ControllerComments{
-            Method: "Detail",
-            Router: `/detail`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"],
-        beego.ControllerComments{
-            Method: "ReadCntChart",
-            Router: `/readCntChart`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserReadRecordController"],
-        beego.ControllerComments{
-            Method: "ReadPermissionChart",
-            Router: `/readPermissionChart`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
 }

+ 6 - 26
routers/router.go

@@ -32,44 +32,24 @@ func init() {
 				&controllers.SysRoleController{},
 			),
 		),
-		beego.NSNamespace("/chart_permission",
-			beego.NSInclude(
-				&controllers.ChartPermissionController{},
-			),
-		),
-		beego.NSNamespace("/user",
-			beego.NSInclude(
-				&controllers.UserController{},
-			),
-		),
-		beego.NSNamespace("/sys_message",
-			beego.NSInclude(
-				&controllers.SysMessageReportController{},
-			),
-		),
 		beego.NSNamespace("/seller",
 			beego.NSInclude(
 				&controllers.SellerController{},
 			),
 		),
-		beego.NSNamespace("/classify",
-			beego.NSInclude(
-				&controllers.ClassifyController{},
-			),
-		),
-		beego.NSNamespace("/read",
+		beego.NSNamespace("/report",
 			beego.NSInclude(
-				&controllers.UserReadRecordController{},
+				&controllers.ReportController{},
 			),
 		),
-		beego.NSNamespace("/report_pdf",
+		beego.NSNamespace("/users",
 			beego.NSInclude(
-				&controllers.ReportPdfController{},
+				&controllers.UsersController{},
 			),
 		),
-		beego.NSNamespace("/report_push",
+		beego.NSNamespace("/company",
 			beego.NSInclude(
-				&controllers.ReportPushStatusController{},
+				&controllers.CompanyController{},
 			),
 		),
 	)

+ 43 - 290
scheduler/task.go

@@ -1,302 +1,55 @@
 package scheduler
 
 import (
-	"context"
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/utils"
 	"fmt"
-	"time"
-
 	"github.com/beego/beego/v2/task"
 )
 
 func InitJob() {
-	fmt.Println("消息推送任务开启。。。")
-	// 每天凌晨12点10分检测, 发送消息
-	tk1 := task.NewTask("SendReminderMsg", "0 10 0 * * *", SendReminderMsg)
-	task.AddTask("发送消息提醒", tk1)
+	fmt.Println("start task")
 	// 每天凌晨12点检测, 修改用户状态
-	tk2 := task.NewTask("ModifyUserStatus", "5 0 0 * * *", ModifyUserStatus)
-	task.AddTask("定时修改用户状态", tk2)
-	// 每隔5分钟,同步报告状态
-	tk3 := task.NewTask("SyncReportPushStatus", "0 0/5 * * * *", SyncReportPushStatus)
-	task.AddTask("定时同步报告推送状态", tk3)
+	//tk2 := task.NewTask("ModifyUserStatus", "5 0 0 * * *", ModifyUserStatus)
+	//task.AddTask("定时修改用户状态", tk2)
 	task.StartTask()
 }
 
-func SyncReportPushStatus(ctx context.Context) (err error) {
-	defer func() {
-		if err != nil {
-			utils.FileLog.Info("同步研报推送状态出错,Err: %s", err)
-		}
-		if err := recover(); err != nil {
-			utils.FileLog.Warn("同步研报推送状态出错,定时任务出错,Err: %s", err)
-		}
-	}()
-
-	// 获取前30分钟修改的数据
-	startTime := time.Now().Add(-30 * time.Minute).Format(utils.FormatDateTime)
-	conditon := " AND modify_time >= ?"
-	var pars []interface{}
-	pars = append(pars, startTime)
-	reportList, err := models.GetReportByCondition(conditon, pars)
-	var reportIds []int
-	for _, v := range reportList {
-		reportIds = append(reportIds, v.Id)
-	}
-	reportPushList, err := models.GetReportPushStatusByReportIds(utils.ReportTypeEta, reportIds)
-	if err != nil {
-		return
-	}
-	reportPushMap := make(map[int]*models.ReportPushStatus)
-	for _, v := range reportPushList {
-		reportPushMap[v.ReportId] = v
-	}
-	var insertReportPushList []*models.ReportPushStatus
-	for _, v := range reportList {
-		var updateCols []string
-		if reportPush, ok := reportPushMap[v.Id]; ok {
-			if reportPush.Title != v.Title {
-				reportPush.Title = v.Title
-				updateCols = append(updateCols, "title")
-			}
-			if reportPush.Abstract != v.Abstract {
-				reportPush.Abstract = v.Abstract
-				updateCols = append(updateCols, "abstract")
-			}
-			if reportPush.Stage != v.Stage {
-				reportPush.Stage = v.Stage
-				updateCols = append(updateCols, "stage")
-			}
-			if reportPush.ClassifyIdFirst != v.ClassifyIdFirst {
-				reportPush.ClassifyIdFirst = v.ClassifyIdFirst
-				updateCols = append(updateCols, "classify_id_first")
-			}
-			if reportPush.ClassifyNameFirst != v.ClassifyNameFirst {
-				reportPush.ClassifyNameFirst = v.ClassifyNameFirst
-				updateCols = append(updateCols, "classify_name_first")
-			}
-			if reportPush.ClassifyIdSecond != v.ClassifyIdSecond {
-				reportPush.ClassifyIdSecond = v.ClassifyIdSecond
-				updateCols = append(updateCols, "classify_id_second")
-			}
-			if reportPush.ClassifyNameSecond != v.ClassifyNameSecond {
-				reportPush.ClassifyNameSecond = v.ClassifyNameSecond
-				updateCols = append(updateCols, "classify_name_second")
-			}
-			if reportPush.ClassifyIdThird != v.ClassifyIdThird {
-				reportPush.ClassifyIdThird = v.ClassifyIdThird
-				updateCols = append(updateCols, "classify_id_third")
-			}
-			if reportPush.ClassifyNameThird != v.ClassifyNameThird {
-				reportPush.ClassifyNameThird = v.ClassifyNameThird
-				updateCols = append(updateCols, "classify_name_third")
-			}
-			if reportPush.Author != v.Author {
-				reportPush.Author = v.Author
-				updateCols = append(updateCols, "author")
-			}
-			if reportPush.PublishTime != v.PublishTime {
-				reportPush.PublishTime = v.PublishTime
-				updateCols = append(updateCols, "publish_time")
-			}
-			if len(updateCols) > 0 {
-				reportPush.Update(updateCols)
-			}
-		} else {
-			insertReportPushList = append(insertReportPushList, &models.ReportPushStatus{
-				ReportId:           v.Id,
-				State:              0,
-				Title:              v.Title,
-				Abstract:           v.Abstract,
-				Stage:              v.Stage,
-				ClassifyIdFirst:    v.ClassifyIdFirst,
-				ClassifyNameFirst:  v.ClassifyNameFirst,
-				ClassifyIdSecond:   v.ClassifyIdSecond,
-				ClassifyNameSecond: v.ClassifyNameSecond,
-				ClassifyIdThird:    v.ClassifyIdThird,
-				ClassifyNameThird:  v.ClassifyNameThird,
-				Author:             v.Author,
-				ReportType:         1,
-				PublishTime:        v.PublishTime,
-				CreateTime:         time.Now(),
-				ModifyTime:         time.Now(),
-			})
-		}
-	}
-
-	err = models.BatchAddReportPushStatus(insertReportPushList)
-	if err != nil {
-		return
-	}
-	return
-}
-
-func ModifyUserStatus(ctx context.Context) (err error) {
-	defer func() {
-		if err != nil {
-			utils.ApiLog.Info("修改用户状态,定时任务出错,Err: %s", err)
-		}
-		if err := recover(); err != nil {
-			utils.ApiLog.Warn("修改用户状态,定时任务出错,Err: %s", err)
-		}
-	}()
-	curTime := time.Now()
-	var pars []interface{}
-	condition := ` AND valid_end_time<?`
-	pars = append(pars, curTime)
-	condition += ` AND status=? `
-	pars = append(pars, 2)
-	userIds, err := models.GetUserIdListByCondition(condition, pars)
-	if err != nil {
-		return
-	}
-	err = models.UpdateUserStatus(condition, pars)
-	if err != nil {
-		return
-	}
-	userRecordList := make([]*models.UserChangeRecord, 0)
-	for _, v := range userIds {
-		record := &models.UserChangeRecord{}
-		record.UserId = v
-		record.SysUserId = 0
-		record.Content = "有效期到期禁用用户"
-		record.CreateTime = time.Now()
-		userRecordList = append(userRecordList, record)
-	}
-	if len(userRecordList) > 0 {
-		err = models.UserChangeRecordMultiInsert(userRecordList)
-		if err != nil {
-			return
-		}
-	}
-	return
-}
-
-func SendReminderMsg(ctx context.Context) (err error) {
-	defer func() {
-		if err != nil {
-			utils.ApiLog.Info("发送提醒消息,定时任务出错,Err: %s", err)
-		}
-		if err := recover(); err != nil {
-			utils.ApiLog.Warn("发送提醒消息,定时任务出错,Err: %s", err)
-		}
-	}()
-	var userPars7 []interface{}
-	var userPars15 []interface{}
-	var userPars30 []interface{}
-	var userPars60 []interface{}
-	var msgPars7 []interface{}
-	var msgPars15 []interface{}
-	var msgPars30 []interface{}
-	var msgPars60 []interface{}
-
-	userTime7 := time.Now().AddDate(0, 0, 7)
-	userTime15 := time.Now().AddDate(0, 0, 15)
-	userTime30 := time.Now().AddDate(0, 0, 30)
-	userTime60 := time.Now().AddDate(0, 0, 60)
-	msgTime7 := time.Now().AddDate(0, 0, -7)
-	msgTime15 := time.Now().AddDate(0, 0, -15)
-	msgTime30 := time.Now().AddDate(0, 0, -30)
-	msgTime60 := time.Now().AddDate(0, 0, -60)
-
-	userCondition1 := ` AND valid_end_time<? `
-	userCondition2 := ` AND valid_end_time<? AND valid_end_time>? `
-	msgCondition := ` AND create_time>? `
-	userPars7 = append(userPars7, userTime7)
-	userPars15 = append(userPars15, userTime15, userTime7)
-	userPars30 = append(userPars30, userTime30, userTime15)
-	userPars60 = append(userPars60, userTime60, userTime30)
-	msgPars7 = append(msgPars7, msgTime7)
-	msgPars15 = append(msgPars15, msgTime15)
-	msgPars30 = append(msgPars30, msgTime30)
-	msgPars60 = append(msgPars60, msgTime60)
-
-	err = SendMsgToSysUser(userCondition1, msgCondition, userPars7, msgPars7, 7)
-	if err != nil {
-		utils.ApiLog.Warn("发送提醒消息,定时任务出错,Err: %s", err.Error())
-	}
-	err = SendMsgToSysUser(userCondition2, msgCondition, userPars15, msgPars15, 15)
-	if err != nil {
-		utils.ApiLog.Warn("发送提醒消息,定时任务出错,Err: %s", err.Error())
-	}
-	err = SendMsgToSysUser(userCondition2, msgCondition, userPars30, msgPars30, 30)
-	if err != nil {
-		utils.ApiLog.Warn("发送提醒消息,定时任务出错,Err: %s", err.Error())
-	}
-	err = SendMsgToSysUser(userCondition2, msgCondition, userPars60, msgPars60, 60)
-	if err != nil {
-		utils.ApiLog.Warn("发送提醒消息,定时任务出错,Err: %s", err.Error())
-	}
-	return
-}
-
-func SendMsgToSysUser(userCondition, msgCondition string, userPars, msgPars []interface{}, messagetType int) (err error) {
-	total, err := models.GetUserCount(userCondition, userPars)
-	if err != nil {
-		utils.ApiLog.Warn("获取用户列表失败 task err: %s", err.Error())
-	}
-	if total == 0 {
-		return
-	}
-	// 获得待发送用户的列表
-	userList, err := models.GetUserList(userCondition, userPars, 0, total)
-	if err != nil {
-		return
-	}
-
-	// 获得待通知系统用户的列表
-	sysUserIds, err := models.GetSysUserIdList()
-	if err != nil {
-		return
-	}
-
-	messageList, err := models.GetSysMessageReportByCondition(msgCondition, msgPars)
-	if err != nil {
-		return
-	}
-	layout := "【%s】到期%d天提醒,请及时跟进"
-	messageMap := make(map[int]map[int]struct{})
-	for _, v := range messageList {
-		if mv, ok := messageMap[v.ReceiveSysUserId]; ok {
-			mv[v.UserId] = struct{}{}
-		} else {
-			messageMap[v.ReceiveSysUserId] = make(map[int]struct{})
-			messageMap[v.ReceiveSysUserId][v.UserId] = struct{}{}
-		}
-	}
-	sendMsg := make([]*models.SysMessageReport, 0)
-	for _, v := range sysUserIds {
-		if userMap, ok := messageMap[v]; ok {
-			for _, u := range userList {
-				if _, ok := userMap[u.UserId]; !ok {
-					sendMsg = append(sendMsg, &models.SysMessageReport{
-						UserId:           u.UserId,
-						ReceiveSysUserId: v,
-						MessageType:      messagetType,
-						IsRead:           false,
-						CreateTime:       time.Now(),
-						ModifyTime:       time.Now(),
-						Content:          fmt.Sprintf(layout, u.RealName, messagetType),
-					})
-				}
-			}
-		} else {
-			for _, u := range userList {
-				sendMsg = append(sendMsg, &models.SysMessageReport{
-					UserId:           u.UserId,
-					ReceiveSysUserId: v,
-					MessageType:      messagetType,
-					IsRead:           false,
-					CreateTime:       time.Now(),
-					ModifyTime:       time.Now(),
-					Content:          fmt.Sprintf(layout, u.RealName, messagetType),
-				})
-			}
-		}
-	}
-	if len(sendMsg) > 0 {
-		err = models.InsertMultiSysMessageReport(sendMsg)
-	}
-	return
-}
+//func ModifyUserStatus(ctx context.Context) (err error) {
+//	defer func() {
+//		if err != nil {
+//			utils.ApiLog.Info("修改用户状态,定时任务出错,Err: %s", err)
+//		}
+//		if err := recover(); err != nil {
+//			utils.ApiLog.Warn("修改用户状态,定时任务出错,Err: %s", err)
+//		}
+//	}()
+//	curTime := time.Now()
+//	var pars []interface{}
+//	condition := ` AND valid_end_time<?`
+//	pars = append(pars, curTime)
+//	condition += ` AND status=? `
+//	pars = append(pars, 2)
+//	userIds, err := models.GetUserIdListByCondition(condition, pars)
+//	if err != nil {
+//		return
+//	}
+//	err = models.UpdateUserStatus(condition, pars)
+//	if err != nil {
+//		return
+//	}
+//	userRecordList := make([]*models.UserChangeRecord, 0)
+//	for _, v := range userIds {
+//		record := &models.UserChangeRecord{}
+//		record.UserId = v
+//		record.SysUserId = 0
+//		record.Content = "有效期到期禁用用户"
+//		record.CreateTime = time.Now()
+//		userRecordList = append(userRecordList, record)
+//	}
+//	if len(userRecordList) > 0 {
+//		err = models.UserChangeRecordMultiInsert(userRecordList)
+//		if err != nil {
+//			return
+//		}
+//	}
+//	return
+//}

+ 0 - 31
services/chart_permission.go

@@ -1,31 +0,0 @@
-package services
-
-import "eta/eta_mini_crm/models"
-
-// 获得全部的权限结构列表树形结构
-func GetChartPermissionListTree(list []*models.ChartPermissionListTree, parentId int) []*models.ChartPermissionListTree {
-	res := make([]*models.ChartPermissionListTree, 0)
-	for _, v := range list {
-		if v.ParentId == parentId {
-			t := new(models.ChartPermissionListTree)
-			t.ChartPermissionId = v.ChartPermissionId
-			t.PermissionName = v.PermissionName
-			t.ParentId = v.ParentId
-			for _, j := range list {
-				if j.ParentId == v.ChartPermissionId {
-					c := new(models.ChartPermissionListTree)
-					c.ChartPermissionId = j.ChartPermissionId
-					c.PermissionName = j.PermissionName
-					c.ParentId = j.ParentId
-					if j.IsPublic == 1 {
-						t.PublicChild = append(t.PublicChild, c)
-					} else {
-						t.PrivateChild = append(t.PrivateChild, c)
-					}
-				}
-			}
-			res = append(res, t)
-		}
-	}
-	return res
-}

+ 23 - 0
services/classify.go

@@ -0,0 +1,23 @@
+package services
+
+import "eta/eta_mini_crm/models"
+
+// GetClassifyTreeRecursive 递归获取分类树
+func GetClassifyTreeRecursive(classifies []*models.ClassifyItem, parentId int) []*models.ClassifyItem {
+	res := make([]*models.ClassifyItem, 0)
+	for _, v := range classifies {
+		if v.ParentId == parentId {
+			t := new(models.ClassifyItem)
+			t.Id = v.Id
+			t.ClassifyName = v.ClassifyName
+			t.ParentId = v.ParentId
+			t.CreateTime = v.CreateTime
+			t.ModifyTime = v.ModifyTime
+			t.Level = v.Level
+			t.Enabled = v.Enabled
+			t.Child = GetClassifyTreeRecursive(classifies, v.Id)
+			res = append(res, t)
+		}
+	}
+	return res
+}

+ 13 - 0
services/company.go

@@ -0,0 +1,13 @@
+package services
+
+//// CheckCompanyOptAuth 校验机构操作权限
+//func CheckCompanyOptAuth(roleId, sysUserId, createUserId, sellerId int) (ok bool, err error) {
+//	if roleId == utils.AdminRoleId {
+//		return
+//	}
+//	if sysUserId != createUserId && sysUserId != sellerId {
+//		return
+//	}
+//	ok = true
+//	return
+//}

+ 154 - 167
services/elastic/elastic.go

@@ -1,171 +1,158 @@
 package elastic
 
-import (
-	"context"
-	"encoding/json"
-	"errors"
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/utils"
-	"fmt"
-	"strconv"
-	"strings"
-
-	"github.com/olivere/elastic/v7"
-)
-
 // indexName:索引名称
 // mappingJson:表结构
-func EsCreateIndex(indexName, mappingJson string) (err error) {
-	client := utils.EsClient
-
-	//定义表结构
-	exists, err := client.IndexExists(indexName).Do(context.Background()) //<5>
-	if err != nil {
-		return
-	}
-	if !exists {
-		resp, err := client.CreateIndex(indexName).BodyJson(mappingJson).Do(context.Background())
-		//BodyJson(bodyJson).Do(context.Background())
-		if err != nil {
-			fmt.Println("CreateIndex Err:" + err.Error())
-			return err
-		}
-		fmt.Println(resp.Index, resp.ShardsAcknowledged, resp.Acknowledged)
-	} else {
-		fmt.Println(indexName + " 已存在")
-	}
-	return
-}
-
-// EsDeleteData 删除es中的指标数据
-func EsDeleteData(indexName, docId string) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
-		}
-	}()
-	client := utils.EsClient
-
-	resp, err := client.Delete().Index(indexName).Id(docId).Do(context.Background())
-	fmt.Println(resp)
-	if err != nil {
-		return
-	}
-	if resp.Status == 0 {
-		fmt.Println("删除成功")
-	} else {
-		fmt.Println("AddData", resp.Status, resp.Result)
-	}
-	return
-}
-
-// EsAddOrEditReport 新增编辑es报告
-func EsAddOrEditReportPdf(indexName, docId string, item *models.ReportPdfView) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println("EsAddOrEditReport Err:", err.Error())
-		}
-	}()
-	client := utils.EsClient
-
-	// docId为报告ID+章节ID
-	searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background())
-	if err != nil && !strings.Contains(err.Error(), "404") {
-		fmt.Println("Get Err" + err.Error())
-		return
-	}
-	if searchById != nil && searchById.Found {
-		resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{
-			"ReportPdfId":        item.ReportPdfId,
-			"PdfUrl":             item.PdfUrl,
-			"PdfName":            item.PdfName,
-			"Title":              item.Title,
-			"Abstract":           item.Abstract,
-			"PublishTime":        item.PublishTime,
-			"ModifyTime":         item.ModifyTime,
-			"SysUserId":          item.SysUserId,
-			"SysRealName":        item.SysRealName,
-			"Author":             item.Author,
-			"State":              item.State,
-			"ClassifyIdFirst":    item.ClassifyIdFirst,
-			"ClassifyNameFirst":  item.ClassifyNameFirst,
-			"ClassifyIdSecond":   item.ClassifyIdSecond,
-			"ClassifyNameSecond": item.ClassifyNameSecond,
-			"ClassifyIdThird":    item.ClassifyIdThird,
-			"ClassifyNameThird":  item.ClassifyNameThird,
-			"Stage":              item.Stage,
-		}).Do(context.Background())
-		if err != nil {
-			return err
-		}
-		//fmt.Println(resp.Status, resp.Result)
-		if resp.Status == 0 {
-			fmt.Println("修改成功" + docId)
-			err = nil
-		} else {
-			fmt.Println("EditData", resp.Status, resp.Result)
-		}
-	} else {
-		resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
-		if err != nil {
-			fmt.Println("新增失败:", err.Error())
-			return err
-		}
-		if resp.Status == 0 && resp.Result == "created" {
-			fmt.Println("新增成功" + docId)
-			return nil
-		} else {
-			fmt.Println("AddData", resp.Status, resp.Result)
-		}
-	}
-	return
-}
-
-// AnalyzeResp 分词接口返回结构体
-type AnalyzeResp struct {
-	Tokens []struct {
-		EndOffset   int64  `json:"end_offset"`
-		Position    int64  `json:"position"`
-		StartOffset int64  `json:"start_offset"`
-		Token       string `json:"token"`
-		Type        string `json:"type"`
-	} `json:"tokens"`
-}
-
-// Analyze 根据输入的文字获取分词后的文字
-func Analyze(content string) (contentList []string, err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println("Analyze Err:", err.Error())
-		}
-	}()
-	client := utils.EsClient
-
-	queryMap := map[string]string{
-		"text":     content,
-		"analyzer": "ik_max_word",
-	}
-	res, err := client.PerformRequest(
-		context.Background(),
-		elastic.PerformRequestOptions{
-			Method: "GET",
-			Path:   "/_analyze",
-			Body:   queryMap,
-			Stream: false,
-		},
-	)
-	if res.StatusCode == 200 {
-		var analyzeResp AnalyzeResp
-		tmpErr := json.Unmarshal(res.Body, &analyzeResp)
-		if tmpErr != nil {
-			err = errors.New("返回数据转结构体失败:" + tmpErr.Error())
-			return
-		}
-		for _, v := range analyzeResp.Tokens {
-			contentList = append(contentList, v.Token)
-		}
-	} else {
-		err = errors.New("分词失败,返回code异常:" + strconv.Itoa(res.StatusCode))
-	}
-	return
-}
+//func EsCreateIndex(indexName, mappingJson string) (err error) {
+//	client := utils.EsClient
+//
+//	//定义表结构
+//	exists, err := client.IndexExists(indexName).Do(context.Background()) //<5>
+//	if err != nil {
+//		return
+//	}
+//	if !exists {
+//		resp, err := client.CreateIndex(indexName).BodyJson(mappingJson).Do(context.Background())
+//		//BodyJson(bodyJson).Do(context.Background())
+//		if err != nil {
+//			fmt.Println("CreateIndex Err:" + err.Error())
+//			return err
+//		}
+//		fmt.Println(resp.Index, resp.ShardsAcknowledged, resp.Acknowledged)
+//	} else {
+//		fmt.Println(indexName + " 已存在")
+//	}
+//	return
+//}
+//
+//// EsDeleteData 删除es中的指标数据
+//func EsDeleteData(indexName, docId string) (err error) {
+//	defer func() {
+//		if err != nil {
+//			fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
+//		}
+//	}()
+//	client := utils.EsClient
+//
+//	resp, err := client.Delete().Index(indexName).Id(docId).Do(context.Background())
+//	fmt.Println(resp)
+//	if err != nil {
+//		return
+//	}
+//	if resp.Status == 0 {
+//		fmt.Println("删除成功")
+//	} else {
+//		fmt.Println("AddData", resp.Status, resp.Result)
+//	}
+//	return
+//}
+//
+//// EsAddOrEditReport 新增编辑es报告
+//func EsAddOrEditReportPdf(indexName, docId string, item *models.ReportPdfView) (err error) {
+//	defer func() {
+//		if err != nil {
+//			fmt.Println("EsAddOrEditReport Err:", err.Error())
+//		}
+//	}()
+//	client := utils.EsClient
+//
+//	// docId为报告ID+章节ID
+//	searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background())
+//	if err != nil && !strings.Contains(err.Error(), "404") {
+//		fmt.Println("Get Err" + err.Error())
+//		return
+//	}
+//	if searchById != nil && searchById.Found {
+//		resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{
+//			"ReportPdfId":        item.ReportPdfId,
+//			"PdfUrl":             item.PdfUrl,
+//			"PdfName":            item.PdfName,
+//			"Title":              item.Title,
+//			"Abstract":           item.Abstract,
+//			"PublishTime":        item.PublishTime,
+//			"ModifyTime":         item.ModifyTime,
+//			"SysUserId":          item.SysUserId,
+//			"SysRealName":        item.SysRealName,
+//			"Author":             item.Author,
+//			"State":              item.State,
+//			"ClassifyIdFirst":    item.ClassifyIdFirst,
+//			"ClassifyNameFirst":  item.ClassifyNameFirst,
+//			"ClassifyIdSecond":   item.ClassifyIdSecond,
+//			"ClassifyNameSecond": item.ClassifyNameSecond,
+//			"ClassifyIdThird":    item.ClassifyIdThird,
+//			"ClassifyNameThird":  item.ClassifyNameThird,
+//			"Stage":              item.Stage,
+//		}).Do(context.Background())
+//		if err != nil {
+//			return err
+//		}
+//		//fmt.Println(resp.Status, resp.Result)
+//		if resp.Status == 0 {
+//			fmt.Println("修改成功" + docId)
+//			err = nil
+//		} else {
+//			fmt.Println("EditData", resp.Status, resp.Result)
+//		}
+//	} else {
+//		resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
+//		if err != nil {
+//			fmt.Println("新增失败:", err.Error())
+//			return err
+//		}
+//		if resp.Status == 0 && resp.Result == "created" {
+//			fmt.Println("新增成功" + docId)
+//			return nil
+//		} else {
+//			fmt.Println("AddData", resp.Status, resp.Result)
+//		}
+//	}
+//	return
+//}
+//
+//// AnalyzeResp 分词接口返回结构体
+//type AnalyzeResp struct {
+//	Tokens []struct {
+//		EndOffset   int64  `json:"end_offset"`
+//		Position    int64  `json:"position"`
+//		StartOffset int64  `json:"start_offset"`
+//		Token       string `json:"token"`
+//		Type        string `json:"type"`
+//	} `json:"tokens"`
+//}
+//
+//// Analyze 根据输入的文字获取分词后的文字
+//func Analyze(content string) (contentList []string, err error) {
+//	defer func() {
+//		if err != nil {
+//			fmt.Println("Analyze Err:", err.Error())
+//		}
+//	}()
+//	client := utils.EsClient
+//
+//	queryMap := map[string]string{
+//		"text":     content,
+//		"analyzer": "ik_max_word",
+//	}
+//	res, err := client.PerformRequest(
+//		context.Background(),
+//		elastic.PerformRequestOptions{
+//			Method: "GET",
+//			Path:   "/_analyze",
+//			Body:   queryMap,
+//			Stream: false,
+//		},
+//	)
+//	if res.StatusCode == 200 {
+//		var analyzeResp AnalyzeResp
+//		tmpErr := json.Unmarshal(res.Body, &analyzeResp)
+//		if tmpErr != nil {
+//			err = errors.New("返回数据转结构体失败:" + tmpErr.Error())
+//			return
+//		}
+//		for _, v := range analyzeResp.Tokens {
+//			contentList = append(contentList, v.Token)
+//		}
+//	} else {
+//		err = errors.New("分词失败,返回code异常:" + strconv.Itoa(res.StatusCode))
+//	}
+//	return
+//}

+ 25 - 25
services/sys_department.go

@@ -24,7 +24,7 @@ func GetSysDepartmentTree(list []*models.SysDepartmentList, parentId int) []*mod
 
 // DeleteSysDepartmentById 根据部门id去删除部门下的所有子目录,并清除用户的关联信息
 func DeleteSysDepartmentById(sysDepartmentId, level int) (msg string, err error) {
-	sysDepartment, err := models.GetSysDepartmentById(sysDepartmentId)
+	_, err = models.GetSysDepartmentById(sysDepartmentId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
 			msg = "部门不存在"
@@ -32,30 +32,30 @@ func DeleteSysDepartmentById(sysDepartmentId, level int) (msg string, err error)
 		}
 		return
 	}
-	if sysDepartment.SysDepartmentName == "营业部" {
-		msg = "营业部不能被删除"
-		return
-	}
-	parentDep, err := models.GetSysDepartmentById(sysDepartment.ParentId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			msg = "父部门不存在"
-			return
-		}
-		return
-	}
-	if parentDep.SysDepartmentName == "营业部" {
-		condition := ` AND seller_department_id=? `
-		count, er := models.GetUserCount(condition, []interface{}{sysDepartment.SysDepartmentId})
-		if er != nil {
-			err = er
-			return
-		}
-		if count > 0 {
-			msg = "该营业部有关联用户,无法删除"
-			return
-		}
-	}
+	//if sysDepartment.SysDepartmentName == "营业部" {
+	//	msg = "营业部不能被删除"
+	//	return
+	//}
+	//parentDep, err := models.GetSysDepartmentById(sysDepartment.ParentId)
+	//if err != nil {
+	//	if err.Error() == utils.ErrNoRow() {
+	//		msg = "父部门不存在"
+	//		return
+	//	}
+	//	return
+	//}
+	//if parentDep.SysDepartmentName == "营业部" {
+	//	condition := ` AND seller_department_id=? `
+	//	count, er := models.GetUserCount(condition, []interface{}{sysDepartment.SysDepartmentId})
+	//	if er != nil {
+	//		err = er
+	//		return
+	//	}
+	//	if count > 0 {
+	//		msg = "该营业部有关联用户,无法删除"
+	//		return
+	//	}
+	//}
 	sysDepartmentIds := make([]int, 0)
 	sysDepartmentIds = append(sysDepartmentIds, sysDepartmentId)
 	var curIds = sysDepartmentIds

+ 0 - 165
services/task.go

@@ -2,177 +2,12 @@ package services
 
 import (
 	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/services/elastic"
 	"eta/eta_mini_crm/utils"
 	"fmt"
-	"time"
 )
 
 func InitTask() {
-	fmt.Println("start task")
-	// 创建Es索引
-	CreateIndex()
-	// 初始化研报推送状态
-	InitEtaReportPushStatus()
-	// 初始化pdf报告推送状态
-	InitPdfReportPushStatus()
-	// 初始化系统用户权限
-	InitSystemUserPermission()
-	fmt.Println("end task!")
-}
-
-func CreateIndex() {
-	var mappingJson = `{
-  "mappings": {
-    "properties": {
-      "ReportPdfId": {"type": "integer"},
-      "PdfUrl": {"type": "text"},
-      "PdfName": {"type": "text"},
-      "Title": {"type": "text"},
-      "Author": {"type": "text"},
-      "Abstract": {"type": "text"},
-      "ClassifyIdFirst": {"type": "integer"},
-      "ClassifyNameFirst": {"type": "text"},
-      "ClassifyIdSecond": {"type": "integer"},
-      "ClassifyNameSecond": {"type": "text"},
-      "Stage": {"type": "integer"},
-      "PublishTime": {
-        "type": "text",
-        "fields": {
-          "keyword": {
-            "type": "keyword",
-            "ignore_above": 256
-          }
-        }
-      },
-      "ModifyTime": {"type": "date"},
-      "Pv": {"type": "integer"},
-      "Uv": {"type": "integer"},
-      "SysUserId": {"type": "integer"},
-      "SysRealName": {"type": "text"},
-      "State": {"type": "integer"}
-	}
-   }
-}`
-	err := elastic.EsCreateIndex(utils.MINI_REPORT_INDEX_NAME, mappingJson)
-	if err != nil {
-		fmt.Println(err)
-	}
-}
-
-func InitEtaReportPushStatus() {
-	for {
-		maxId, err := models.GetMaxSyncIdReportPush(1)
-		fmt.Println("同步研报开始, maxId:", maxId)
-		if err != nil {
-			fmt.Println("同步研报失败, Err:", err)
-		}
-		reportList, err := models.GetBatchReport(maxId, 100)
-		if err != nil {
-			fmt.Println("同步研报失败, Err:", err)
-		}
-		var reportIds []int
-		for _, v := range reportList {
-			reportIds = append(reportIds, v.Id)
-		}
-		reportPushList, err := models.GetReportPushStatusByReportIds(utils.ReportTypeEta, reportIds)
-		if err != nil {
-			return
-		}
-		reportPushMap := make(map[int]struct{})
-		for _, v := range reportPushList {
-			reportPushMap[v.ReportId] = struct{}{}
-		}
-		var insertReportPushList []*models.ReportPushStatus
-		for _, v := range reportList {
-			if _, ok := reportPushMap[v.Id]; !ok {
-				insertReportPushList = append(insertReportPushList, &models.ReportPushStatus{
-					ReportId:           v.Id,
-					State:              0,
-					Title:              v.Title,
-					Abstract:           v.Abstract,
-					Stage:              v.Stage,
-					ClassifyIdFirst:    v.ClassifyIdFirst,
-					ClassifyNameFirst:  v.ClassifyNameFirst,
-					ClassifyIdSecond:   v.ClassifyIdSecond,
-					ClassifyNameSecond: v.ClassifyNameSecond,
-					ClassifyIdThird:    v.ClassifyIdThird,
-					ClassifyNameThird:  v.ClassifyNameThird,
-					Author:             v.Author,
-					ReportType:         utils.ReportTypeEta,
-					PublishTime:        v.PublishTime,
-					CreateTime:         time.Now(),
-					ModifyTime:         time.Now(),
-				})
-			}
-		}
-		err = models.BatchAddReportPushStatus(insertReportPushList)
-		if err != nil {
-			return
-		}
-		if len(reportList) != 100 {
-			fmt.Println("同步研报完成")
-			return
-		}
-	}
-}
 
-// 初始化pdf报告的推送状态
-func InitPdfReportPushStatus() {
-	for {
-		maxId, err := models.GetMaxSyncIdReportPush(2)
-		fmt.Println("同步pdf研报开始, maxId:", maxId)
-		if err != nil {
-			fmt.Println("同步研pdf报失败, Err:", err)
-		}
-		reportList, err := models.GetBatchPdfReport(maxId, 100)
-		if err != nil {
-			fmt.Println("同步pdf研报失败, Err:", err)
-		}
-		var reportIds []int
-		for _, v := range reportList {
-			reportIds = append(reportIds, v.ReportPdfId)
-		}
-		reportPushList, err := models.GetReportPushStatusByReportIds(utils.ReportTypePdf, reportIds)
-		if err != nil {
-			return
-		}
-		reportPushMap := make(map[int]struct{})
-		for _, v := range reportPushList {
-			reportPushMap[v.ReportId] = struct{}{}
-		}
-		var insertReportPushList []*models.ReportPushStatus
-		for _, v := range reportList {
-			if _, ok := reportPushMap[v.ReportPdfId]; !ok {
-				insertReportPushList = append(insertReportPushList, &models.ReportPushStatus{
-					ReportId:           v.ReportPdfId,
-					State:              0,
-					Title:              v.Title,
-					Abstract:           v.Abstract,
-					Stage:              v.Stage,
-					ClassifyIdFirst:    v.ClassifyIdFirst,
-					ClassifyNameFirst:  v.ClassifyNameFirst,
-					ClassifyIdSecond:   v.ClassifyIdSecond,
-					ClassifyNameSecond: v.ClassifyNameSecond,
-					ClassifyIdThird:    v.ClassifyIdThird,
-					ClassifyNameThird:  v.ClassifyNameThird,
-					Author:             v.Author,
-					ReportType:         utils.ReportTypePdf,
-					PublishTime:        v.PublishTime,
-					CreateTime:         time.Now(),
-					ModifyTime:         time.Now(),
-				})
-			}
-		}
-		err = models.BatchAddReportPushStatus(insertReportPushList)
-		if err != nil {
-			return
-		}
-		if len(reportList) != 100 {
-			fmt.Println("同步pdf研报完成")
-			return
-		}
-	}
 }
 
 func InitSystemUserPermission() {

+ 0 - 164
services/user.go

@@ -1,164 +0,0 @@
-package services
-
-import (
-	"eta/eta_mini_crm/models"
-	"eta/eta_mini_crm/utils"
-	"time"
-)
-
-func GetUserPermissionById(userId int) (items []*models.ChartPermissionView, err error) {
-	permissionIds, err := models.GetChartPermissionIdByUserId(userId)
-	if err != nil {
-		return
-	}
-	if len(permissionIds) == 0 {
-		return
-	}
-	items, err = models.GetChartPermissionListByIds(permissionIds)
-	if err != nil {
-		return
-	}
-
-	return
-}
-
-func GetPotentialList(keyWord string, sellerDepartmentId int, applyStatus string, pageSize int, currentIndex int, sortParam string, sortType string, registerStartDate string, registerEndDate string, lastUpdateStartDate string, lastUpdateEndDate string, applyStartDate string, applyEndDate string) (userList []*models.UserView, total int, errMsg, msg string, err error) {
-	var sortCondition string
-	var condition string
-	var pars []interface{}
-
-	if keyWord != "" {
-		condition += ` AND ( u.phone LIKE ? OR u.email LIKE ?) `
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
-	}
-
-	if sellerDepartmentId != 0 {
-		condition += ` AND u.seller_department_id=? `
-		pars = append(pars, sellerDepartmentId)
-	}
-	if applyStatus != "" {
-		condition += ` AND u.apply_status=? `
-		pars = append(pars, applyStatus)
-	}
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-
-	if sortParam != "" && sortType != "" {
-		sortCondition = " ORDER BY "
-		var param, sort string
-		switch sortParam {
-		case "RegisterTime":
-			param = "u.register_time"
-		case "LastUpdateTime":
-			param = "last_update_time"
-		case "ReadCnt":
-			param = "read_cnt"
-		case "ApplyTime":
-			param = "u.apply_time"
-		}
-		switch sortType {
-		case "asc":
-			sort = " ASC "
-		case "desc":
-			sort = " DESC "
-		}
-		if param != "" && sort != "" {
-			sortCondition += param + " " + sort
-		} else {
-			sortCondition = ""
-		}
-	}
-
-	if registerStartDate != "" {
-		registerStartTime, er := time.Parse(utils.FormatDate, registerStartDate)
-		if er != nil {
-			err = er
-			msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.register_time>=? "
-		registerStartDateStr := registerStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, registerStartDateStr)
-	}
-	if registerEndDate != "" {
-		registerEndTime, er := time.Parse(utils.FormatDate, registerEndDate)
-		if er != nil {
-			err = er
-			msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.register_time<=? "
-		// 结束时间包含今天
-		registerEndTime = registerEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		registerEndDateStr := registerEndTime.Format(utils.FormatDateTime)
-		pars = append(pars, registerEndDateStr)
-	}
-	if lastUpdateStartDate != "" {
-		lastUpdateStartTime, er := time.Parse(utils.FormatDate, lastUpdateStartDate)
-		if er != nil {
-			err = er
-			msg = "日期格式有误"
-			return
-		}
-		condition += " AND ur.create_time>=? "
-
-		lastUpdateStartDateStr := lastUpdateStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, lastUpdateStartDateStr)
-	}
-	if lastUpdateEndDate != "" {
-		lastUpdateEndTime, er := time.Parse(utils.FormatDate, lastUpdateEndDate)
-		if er != nil {
-			err = er
-			msg = "日期格式有误"
-			return
-		}
-		// 结束时间包含今天
-		lastUpdateEndTime = lastUpdateEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		lastUpdateEndDateStr := lastUpdateEndTime.Format(utils.FormatDateTime)
-		condition += " AND ur.create_time<=? "
-		pars = append(pars, lastUpdateEndDateStr)
-	}
-	if applyStartDate != "" {
-		applyStartTime, er := time.Parse(utils.FormatDate, applyStartDate)
-		if er != nil {
-			err = er
-			msg = "日期格式有误"
-			return
-		}
-		condition += " AND u.apply_time>=? "
-		applyStartDateStr := applyStartTime.Format(utils.FormatDateTime)
-		pars = append(pars, applyStartDateStr)
-	}
-	if applyEndDate != "" {
-		applyEndTime, er := time.Parse(utils.FormatDate, applyEndDate)
-		if er != nil {
-			err = er
-			msg = "日期格式有误"
-			return
-		}
-		// 结束时间包含今天
-		applyEndTime = applyEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
-		applyEndDateStr := applyEndTime.Format(utils.FormatDateTime)
-		condition += " AND u.apply_time<=? "
-		pars = append(pars, applyEndDateStr)
-	}
-	startSize := utils.StartIndex(currentIndex, pageSize)
-
-	total, err = models.GetPotentialUserCountByConditonV2(condition, pars)
-	if err != nil {
-		errMsg = "获取用户列表统计失败"
-		return
-	}
-	userList, err = models.GetPotentialUserIdsByConditonV2(condition, pars, sortCondition, startSize, pageSize)
-	if err != nil {
-		errMsg = "获取用户列表失败"
-		return
-	}
-	return
-
-}

+ 45 - 0
utils/common.go

@@ -3,6 +3,7 @@ package utils
 import (
 	"crypto/md5"
 	"encoding/hex"
+	"fmt"
 	"math/rand"
 	"regexp"
 	"strconv"
@@ -109,3 +110,47 @@ func Unique[T comparable](slice []T) []T {
 	}
 	return unique
 }
+
+// GetOrmInReplace 获取orm的in查询替换?的方法
+func GetOrmInReplace(num int) string {
+	template := make([]string, num)
+	for i := 0; i < num; i++ {
+		template[i] = "?"
+	}
+	return strings.Join(template, ",")
+}
+
+func TimeTransferString(format string, t time.Time) string {
+	str := t.Format(format)
+	if t.IsZero() {
+		return ""
+	}
+	return str
+}
+
+// HideMobileMiddle 隐藏大陆手机号中间四位
+func HideMobileMiddle(mobile string) string {
+	if !ValidateMobileFormatat(mobile) {
+		return mobile
+	}
+	return fmt.Sprintf("%s****%s", mobile[:3], mobile[7:])
+}
+
+func SecondsToHMS(seconds int64) string {
+	duration := time.Duration(seconds) * time.Second
+	hours := int64(duration.Hours())
+	minutes := int64(duration.Minutes()) % 60
+	secs := int64(duration.Seconds()) % 60
+
+	var result string
+	if hours > 0 {
+		result += fmt.Sprintf("%d时", hours)
+	}
+	if minutes > 0 || (hours > 0 && secs > 0) {
+		result += fmt.Sprintf("%d分", minutes)
+	}
+	if secs > 0 || (hours == 0 && minutes == 0) {
+		result += fmt.Sprintf("%d秒", secs)
+	}
+	return result
+}

+ 36 - 31
utils/config.go

@@ -2,6 +2,7 @@ package utils
 
 import (
 	"fmt"
+	"strconv"
 
 	beeLogger "github.com/beego/bee/v2/logger"
 	"github.com/beego/beego/v2/server/web"
@@ -16,6 +17,7 @@ var (
 	REDIS_CACHE string      //缓存地址
 	Rc          RedisClient //redis缓存
 )
+
 var ObjectStorageClient string // 目前有oss minio,默认oss
 
 // 阿里云配置
@@ -55,22 +57,17 @@ var (
 
 // 基础配置
 var (
-	STATIC_DIR      string
-	RESOURCE_DIR    string
-	UPLOAD_PDF_SIZE string // 单位MB
+	STATIC_DIR string
+	//RESOURCE_DIR    string
+	//UPLOAD_PDF_SIZE string // 单位MB
 )
 
-// ES配置
-var (
-	ES_URL      string // ES服务器地址
-	ES_USERNAME string // ES账号
-	ES_PASSWORD string // ES密码
-)
-
-// ES索引配置
-var (
-	MINI_REPORT_INDEX_NAME string // 小程序的pdf报告索引
-)
+//// ES配置
+//var (
+//	ES_URL      string // ES服务器地址
+//	ES_USERNAME string // ES账号
+//	ES_PASSWORD string // ES密码
+//)
 
 var (
 	LogPath    string //调用过程中的日志存放地址
@@ -132,6 +129,7 @@ func init() {
 		AccessKeyId = config["access_key_id"]
 		AccessKeySecret = config["access_key_secret"]
 	}
+
 	// MinIo相关
 	{
 		MinIoEndpoint = config["minio_endpoint"]
@@ -157,34 +155,41 @@ func init() {
 		STSTokenCacheKey = config["sts_token_cache_key"]
 	}
 
-	// ES配置
+	//日志配置
 	{
-		ES_URL = config["es_url"]
-		ES_USERNAME = config["es_username"]
-		ES_PASSWORD = config["es_password"]
+		LogPath = config["log_path"]
+		LogFile = config["log_file"]
+		BinLogPath = config["binlog_path"]
+		BinLogFile = config["binlog_file"]
+		ApiLogPath = config["apilog_path"]
+		ApiLogFile = config["apilog_file"]
+		logMaxDaysStr := config["log_max_day"]
+		LogMaxDays, _ = strconv.Atoi(logMaxDaysStr)
 	}
 
-	// ES 索引
-	{
-		MINI_REPORT_INDEX_NAME = config["mini_report_index_name"]
-	}
+	// ES配置
+	//{
+	//	ES_URL = config["es_url"]
+	//	ES_USERNAME = config["es_username"]
+	//	ES_PASSWORD = config["es_password"]
+	//}
 
 	// 初始化ES
-	initEs()
+	//initEs()
 
 	// 静态文件目录
 	STATIC_DIR = config["static_dir"]
 	if STATIC_DIR == "" {
 		STATIC_DIR = "./static"
 	}
-	RESOURCE_DIR = config["resource_dir"]
-	if RESOURCE_DIR == "" {
-		RESOURCE_DIR = "dongwu/"
-	}
-	UPLOAD_PDF_SIZE = config["upload_pdf_size"]
-	if UPLOAD_PDF_SIZE == "" {
-		UPLOAD_PDF_SIZE = "15"
-	}
+	//RESOURCE_DIR = config["resource_dir"]
+	//if RESOURCE_DIR == "" {
+	//	RESOURCE_DIR = "dongwu/"
+	//}
+	//UPLOAD_PDF_SIZE = config["upload_pdf_size"]
+	//if UPLOAD_PDF_SIZE == "" {
+	//	UPLOAD_PDF_SIZE = "15"
+	//}
 
 	// 初始化缓存
 	redisClient, err := initRedis(config["redis_type"], config["beego_cache"])

+ 8 - 22
utils/constants.go

@@ -47,24 +47,6 @@ const (
 // DIR_MOD 目录创建权限
 const DIR_MOD fs.FileMode = 0766 // Unix permission bits
 
-// 用户状态定义
-const (
-	UserStatusNo        = 0 //禁用
-	UserStatusPotential = 1 //潜在用户
-	UserStatusFormal    = 2 //正式用户
-)
-
-// Pdf研报状态定义
-const (
-	ReportStatusUp   = 1 // 研报已发布
-	ReportStatusDown = 2 // 研报未发布
-)
-
-const (
-	ReportTypeEta = 1 // eta研报
-	ReportTypePdf = 2 // pdf研报
-)
-
 const (
 	STORAGESOURCE_OSS_NAME   = "oss"
 	STORAGESOURCE_MINIO_NAME = "minio"
@@ -76,11 +58,15 @@ var NoAuthApiMap = map[string]bool{
 	"/role/menu/list":         true,
 	"/department/list":        true,
 	"/sys_user/reset_my_pass": true,
-	"/chart_permission/list":  true,
-	"/user/change_list":       true,
-	"/classify/list":          true,
+	//"/chart_permission/list":  true,
+	//"/user/change_list":       true,
+	//"/classify/list":          true,
 	"/seller/list":            true,
 	"/seller/department/list": true,
 }
 
-var APPNAME string = "东吴CRM"
+var APPNAME string = "金瑞CRM"
+
+var AreaCodeMainland = "86" // 大陆区号
+
+var AdminRoleId = 1 // 超管角色ID

+ 14 - 18
utils/elastic.go

@@ -1,21 +1,17 @@
 package utils
 
-import (
-	"github.com/olivere/elastic/v7"
-)
-
 // EsClient es客户端
-var EsClient *elastic.Client
-
-func initEs() {
-	client, err := elastic.NewClient(
-		elastic.SetURL(ES_URL),
-		elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
-		elastic.SetSniff(false))
-	EsClient = client
-	if err != nil {
-		panic("ElasticSearch连接失败,err:" + err.Error())
-		//go alarm_msg.SendAlarmMsg("ElasticSearch连接失败", 2)
-	}
-	return
-}
+//var EsClient *elastic.Client
+//
+//func initEs() {
+//	client, err := elastic.NewClient(
+//		elastic.SetURL(ES_URL),
+//		elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
+//		elastic.SetSniff(false))
+//	EsClient = client
+//	if err != nil {
+//		panic("ElasticSearch连接失败,err:" + err.Error())
+//		//go alarm_msg.SendAlarmMsg("ElasticSearch连接失败", 2)
+//	}
+//	return
+//}

+ 3 - 3
utils/logs.go

@@ -9,9 +9,9 @@ import (
 )
 
 const (
-	DefaultBinlogPath = "./etalogs/binlog"
-	DefaultApiLogPath = "./etalogs/apilog"
-	DefaultLogPath    = "./etalogs/filelog"
+	DefaultBinlogPath = "./logs/binlog"
+	DefaultApiLogPath = "./logs/apilog"
+	DefaultLogPath    = "./logs/filelog"
 )
 
 var (