Browse Source

temp commit

hsun 1 year ago
parent
commit
f454b1aeb9

+ 837 - 0
controllers/eta_business/eta_business.go

@@ -0,0 +1,837 @@
+package eta_business
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hz_crm_api/controllers"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/eta_business"
+	etaBusinessService "hongze/hz_crm_api/services/eta_business"
+	"hongze/hz_crm_api/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// EtaBusinessController ETA商家
+type EtaBusinessController struct {
+	controllers.BaseAuthController
+}
+
+// PageList
+// @Title 商家列表-分页
+// @Description 商家列表-分页
+// @Param   Keyword			query	string	false	"关键词: 商家名称/社会信用码/商家编码"
+// @Param   SellerIds		query	string	false	"销售IDs"
+// @Param   SigningStatus	query	string	false	"签约状态: 1-首次签约; 2-续约中; 3-已终止"
+// @Success 200 Ret=200 获取成功
+// @router /page_list [get]
+func (this *EtaBusinessController) 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
+	}
+	// 权限校验
+	resp := make([]*eta_business.EtaBusinessItem, 0)
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Data = resp
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+
+	cond := ``
+	pars := make([]interface{}, 0)
+	order := ``
+	// 关键词
+	keyword := this.GetString("Keyword", "")
+	keyword = strings.TrimSpace(keyword)
+	if keyword != "" {
+		kw := fmt.Sprint("%", keyword, "%")
+		cond += fmt.Sprintf(` AND (%s = ? OR %s = ? OR %s = ?)`, eta_business.EtaBusinessColumns.BusinessName, eta_business.EtaBusinessColumns.BusinessCode, eta_business.EtaBusinessColumns.CreditCode)
+		pars = append(pars, kw, kw, kw)
+	}
+	// 销售
+	sellerIds := this.GetString("SellerIds", "")
+	if sellerIds != "" {
+		arr := strings.Split(sellerIds, ",")
+		ids := make([]int, 0)
+		for _, s := range arr {
+			v, e := strconv.Atoi(s)
+			if e != nil {
+				br.Msg = "销售ID有误"
+				return
+			}
+			ids = append(ids, v)
+		}
+		if len(ids) == 0 {
+			br.Data = resp
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "获取成功"
+			return
+		}
+		cond += fmt.Sprintf(` AND %s IN (%s)`, eta_business.EtaBusinessColumns.SellerId, utils.GetOrmInReplace(len(ids)))
+		pars = append(pars, ids)
+	}
+	// 签约状态
+	signingStatus, _ := this.GetInt("SigningStatus", 0)
+	if signingStatus > 0 {
+		cond += fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessColumns.SigningStatus)
+		pars = append(pars, signingStatus)
+	}
+	// TODO:商家地址(多选)
+
+	// 获取列表
+	businessOb := new(eta_business.EtaBusiness)
+	list, e := businessOb.GetItemsByCondition(cond, pars, []string{}, order)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取商家列表失败, Err: " + e.Error()
+		return
+	}
+	for _, v := range list {
+		b := new(eta_business.EtaBusinessItem)
+		b.EtaBusinessId = v.EtaBusinessId
+		b.BusinessName = v.BusinessName
+		b.BusinessCode = v.BusinessCode
+		b.CreditCode = v.CreditCode
+		b.RegionType = v.RegionType
+		b.Address = v.Address
+		b.SellerId = v.SellerId
+		b.SellerName = v.SellerName
+		b.Leader = v.Leader
+		b.IndustryId = v.IndustryId
+		b.IndustryName = v.IndustryName
+		b.CapitalScale = v.CapitalScale
+		b.ResearchTeamSize = v.ResearchTeamSize
+		b.UserMax = v.UserMax
+		b.SigningStatus = v.SigningStatus
+		b.Enable = v.Enable
+		b.SigningTime = v.SigningTime.Format(utils.FormatDate)
+		b.ExpiredTime = v.ExpiredTime.Format(utils.FormatDate)
+		b.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
+		b.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
+		resp = append(resp, b)
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// Add
+// @Title 新增商家
+// @Description 新增商家
+// @Param	request	body eta_business.EtaBusinessAddReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /add [post]
+func (this *EtaBusinessController) 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 eta_business.EtaBusinessAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	req.BusinessName = strings.TrimSpace(req.BusinessName)
+	if req.BusinessName == "" {
+		br.Msg = "商家名称不可为空"
+		return
+	}
+	if req.CreditCode == "" {
+		br.Msg = "社会统一信用码不可为空"
+		return
+	}
+	if req.Address == "" {
+		br.Msg = "商家地址不可为空"
+		return
+	}
+	if req.Leader == "" {
+		br.Msg = "决策人不可为空"
+		return
+	}
+	if req.IndustryId <= 0 || req.IndustryName == "" {
+		br.Msg = "所属行业不可为空"
+		return
+	}
+	if req.ResearchTeamSize == "" {
+		br.Msg = "研究团队规模不可为空"
+		return
+	}
+	if req.UserMax <= 0 {
+		br.Msg = "用户上限不可小于0"
+		return
+	}
+
+	// 权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 重名校验
+	{
+		item := new(eta_business.EtaBusiness)
+		cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessColumns.BusinessName)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.BusinessName)
+		exist, e := item.GetItemByCondition(cond, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取重名商家失败, Err: " + e.Error()
+			return
+		}
+		if exist != nil {
+			br.Msg = "商家名称已存在"
+			return
+		}
+	}
+
+	// 商家编码
+	businessCode, e := eta_business.CreateEtaBusinessCode()
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "生成商家编码失败, Err: " + e.Error()
+		return
+	}
+	business := new(eta_business.EtaBusiness)
+	business.BusinessName = req.BusinessName
+	business.BusinessCode = businessCode
+	business.CreditCode = req.CreditCode
+	business.Address = req.Address
+	business.SellerId = req.SellerId
+	business.SellerName = req.SellerName
+	business.Leader = req.Leader
+	business.IndustryId = req.IndustryId
+	business.IndustryName = req.IndustryName
+	business.CapitalScale = req.CapitalScale
+	business.ResearchTeamSize = req.ResearchTeamSize
+	business.UserMax = req.UserMax
+	business.Enable = 1
+	business.CreateTime = time.Now().Local()
+	business.CreateTime = time.Now().Local()
+	if e := business.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "新增商家失败, Err: " + e.Error()
+		return
+	}
+
+	// 操作日志
+	go func() {
+		recordOb := new(eta_business.EtaBusinessOperationRecord)
+		recordOb.EtaBusinessId = business.EtaBusinessId
+		recordOb.SellerId = business.SellerId
+		recordOb.SysUserId = sysUser.AdminId
+		recordOb.SysRealName = sysUser.RealName
+		recordOb.OperationType = eta_business.EtaBusinessOperationTypeAdd
+		recordOb.OperationRemark = fmt.Sprintf("%s新增商户", sysUser.RealName)
+		recordOb.CreateTime = time.Now().Local()
+		_ = recordOb.Create()
+	}()
+
+	br.Data = business.EtaBusinessId
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Edit
+// @Title 编辑商家
+// @Description 编辑商家
+// @Param	request	body eta_business.EtaBusinessEditReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /edit [post]
+func (this *EtaBusinessController) 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 eta_business.EtaBusinessEditReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.EtaBusinessId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, 商家ID为空"
+		return
+	}
+	if req.Address == "" {
+		br.Msg = "商家地址不可为空"
+		return
+	}
+	if req.Leader == "" {
+		br.Msg = "决策人不可为空"
+		return
+	}
+	if req.IndustryId <= 0 || req.IndustryName == "" {
+		br.Msg = "所属行业不可为空"
+		return
+	}
+	if req.ResearchTeamSize == "" {
+		br.Msg = "研究团队规模不可为空"
+		return
+	}
+	if req.UserMax <= 0 {
+		br.Msg = "用户上限不可小于0"
+		return
+	}
+
+	// 权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	ob := new(eta_business.EtaBusiness)
+	item, e := ob.GetItemById(req.EtaBusinessId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "商家不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
+		return
+	}
+	item.Address = req.Address
+	item.Leader = req.Leader
+	item.IndustryId = req.IndustryId
+	item.IndustryName = req.IndustryName
+	item.CapitalScale = req.CapitalScale
+	item.ResearchTeamSize = req.ResearchTeamSize
+	item.UserMax = req.UserMax
+	item.ModifyTime = time.Now().Local()
+	cols := []string{
+		"Address", "Leader", "IndustryId", "IndustryName", "CapitalScale", "ResearchTeamSize", "UserMax", "ModifyTime",
+	}
+	if e := item.Update(cols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "编辑商家失败, Err: " + e.Error()
+		return
+	}
+
+	// 操作日志
+	go func() {
+		recordOb := new(eta_business.EtaBusinessOperationRecord)
+		recordOb.EtaBusinessId = item.EtaBusinessId
+		recordOb.SellerId = item.SellerId
+		recordOb.SysUserId = sysUser.AdminId
+		recordOb.SysRealName = sysUser.RealName
+		recordOb.OperationType = eta_business.EtaBusinessOperationTypeEdit
+		recordOb.OperationRemark = fmt.Sprintf("%s编辑商户", sysUser.RealName)
+		recordOb.CreateTime = time.Now().Local()
+		_ = recordOb.Create()
+	}()
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Signing
+// @Title 签约续约
+// @Description 签约续约
+// @Param	request	body eta_business.EtaBusinessSigningReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /signing [post]
+func (this *EtaBusinessController) Signing() {
+	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 eta_business.EtaBusinessSigningReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.EtaBusinessId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, 商家ID为空"
+		return
+	}
+	if req.SigningTime == "" {
+		br.Msg = "签约时间不可为空"
+		return
+	}
+	if req.ExpiredTime == "" {
+		br.Msg = "到期时间不可为空"
+		return
+	}
+	signTime, e := time.ParseInLocation(utils.FormatDate, req.SigningTime, time.Local)
+	if e != nil {
+		br.Msg = "签约时间格式有误"
+		br.ErrMsg = "签约时间格式有误, Err: " + e.Error()
+		return
+	}
+	expiredTime, e := time.ParseInLocation(utils.FormatDate, req.ExpiredTime, time.Local)
+	if e != nil {
+		br.Msg = "到期时间格式有误"
+		br.ErrMsg = "到期时间格式有误, Err: " + e.Error()
+		return
+	}
+	if !expiredTime.After(signTime) {
+		br.Msg = "到期时间不得早于签约时间"
+		return
+	}
+
+	// 权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 获取商家信息
+	businessOb := new(eta_business.EtaBusiness)
+	business, e := businessOb.GetItemById(req.EtaBusinessId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "商家不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
+		return
+	}
+
+	// 获取历史签约, 签约日期不可交叠
+	contract := new(eta_business.EtaBusinessContract)
+	cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessContractColumns.EtaBusinessId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, req.EtaBusinessId)
+	contracts, e := contract.GetItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取商家签约列表失败, Err: " + e.Error()
+		return
+	}
+
+	// 本次签约是否属于终止期
+	now := time.Now().Local()
+	isTerminate := true
+	if now.Equal(signTime) || now.Equal(expiredTime) {
+		isTerminate = false
+	}
+	if now.After(signTime) && now.Before(expiredTime) {
+		isTerminate = false
+	}
+
+	// 是否为首次签约
+	isFirst := true
+	if len(contracts) > 0 {
+		isFirst = false
+		for _, c := range contracts {
+			// 校验签约时间是否重叠
+			pass := false
+			if expiredTime.Before(c.SigningTime) {
+				pass = true
+			}
+			if signTime.After(c.ExpiredTime) {
+				pass = true
+			}
+			if !pass {
+				br.Msg = "签约时间在存续期内, 请检查"
+				return
+			}
+			// 上面判断若为终止, 则判断是否在历史签约存续期间
+			if !isTerminate {
+				continue
+			}
+			if now.Equal(c.SigningTime) || now.Equal(c.ExpiredTime) {
+				isTerminate = false
+				continue
+			}
+			if now.After(c.SigningTime) && now.Before(c.ExpiredTime) {
+				isTerminate = false
+				continue
+			}
+		}
+	}
+
+	// 是否更新签约状态
+	status := eta_business.EtaBusinessSigningStatusContinue
+	if isTerminate {
+		status = eta_business.EtaBusinessSigningStatusTerminate
+	}
+	if !isTerminate && isFirst {
+		status = eta_business.EtaBusinessSigningStatusFirst
+	}
+	if business.SigningStatus != status {
+		business.SigningStatus = status
+		business.ModifyTime = now
+		cols := []string{"SigningStatus", "ModifyTime"}
+		if e = business.Update(cols); e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "更新签约状态失败, Err: " + e.Error()
+			return
+		}
+	}
+
+	// 新增签约
+	contract.EtaBusinessId = req.EtaBusinessId
+	contract.SigningTime = signTime
+	contract.ExpiredTime = expiredTime
+	contract.CreateTime = now
+	contract.ModifyTime = now
+	if e = contract.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "新增签约失败, Err: " + e.Error()
+		return
+	}
+
+	// 续约操作日志
+	if !isFirst {
+		go func() {
+			recordOb := new(eta_business.EtaBusinessOperationRecord)
+			recordOb.EtaBusinessId = business.EtaBusinessId
+			recordOb.SellerId = business.SellerId
+			recordOb.SysUserId = sysUser.AdminId
+			recordOb.SysRealName = sysUser.RealName
+			recordOb.OperationType = eta_business.EtaBusinessOperationTypeRenewalContract
+			recordOb.OperationRemark = fmt.Sprintf("%s添加续约", sysUser.RealName)
+			recordOb.CreateTime = time.Now().Local()
+			_ = recordOb.Create()
+		}()
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Enable
+// @Title 禁用启用
+// @Description 禁用启用
+// @Param	request	body eta_business.EtaBusinessEnableReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /enable [post]
+func (this *EtaBusinessController) Enable() {
+	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 eta_business.EtaBusinessEnableReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.EtaBusinessId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, 商家ID为空"
+		return
+	}
+
+	// 权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 获取商家信息
+	businessOb := new(eta_business.EtaBusiness)
+	business, e := businessOb.GetItemById(req.EtaBusinessId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "商家不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
+		return
+	}
+
+	// 禁启用
+	typeMap := map[int]int{
+		0: eta_business.EtaBusinessOperationTypeEnable,
+		1: eta_business.EtaBusinessOperationTypeDisable,
+	}
+	typeRemarkMap := map[int]string{
+		0: "启用",
+		1: "禁用",
+	}
+	operateType := typeMap[business.Enable]
+	operateRemark := typeRemarkMap[business.Enable]
+
+	business.Enable = business.Enable ^ 1
+	business.ModifyTime = time.Now().Local()
+	cols := []string{"Enable", "ModifyTime"}
+	if e = business.Update(cols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新商家状态失败, Err: " + e.Error()
+		return
+	}
+
+	// 操作日志
+	go func() {
+		recordOb := new(eta_business.EtaBusinessOperationRecord)
+		recordOb.EtaBusinessId = business.EtaBusinessId
+		recordOb.SellerId = business.SellerId
+		recordOb.SysUserId = sysUser.AdminId
+		recordOb.SysRealName = sysUser.RealName
+		recordOb.OperationType = operateType
+		recordOb.OperationRemark = fmt.Sprintf("%s%s商户", sysUser.RealName, operateRemark)
+		recordOb.CreateTime = time.Now().Local()
+		_ = recordOb.Create()
+	}()
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// MoveSeller
+// @Title 移动销售
+// @Description 移动销售
+// @Param	request	body eta_business.EtaBusinessMoveSellerReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /move_seller [post]
+func (this *EtaBusinessController) MoveSeller() {
+	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 eta_business.EtaBusinessMoveSellerReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.EtaBusinessId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, 商家ID为空"
+		return
+	}
+	if req.SellerId <= 0 || req.SellerName == "" {
+		br.Msg = "销售不可为空"
+		return
+	}
+
+	// 权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 获取商家信息
+	businessOb := new(eta_business.EtaBusiness)
+	business, e := businessOb.GetItemById(req.EtaBusinessId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "商家不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
+		return
+	}
+
+	// 更新销售
+	business.SellerId = req.SellerId
+	business.SellerName = req.SellerName
+	business.ModifyTime = time.Now().Local()
+	cols := []string{"SellerId", "SellerName", "ModifyTime"}
+	if e = business.Update(cols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "移动至销售失败, Err: " + e.Error()
+		return
+	}
+
+	// 操作日志
+	go func() {
+		recordOb := new(eta_business.EtaBusinessOperationRecord)
+		recordOb.EtaBusinessId = business.EtaBusinessId
+		recordOb.SellerId = req.SellerId
+		recordOb.SysUserId = sysUser.AdminId
+		recordOb.SysRealName = sysUser.RealName
+		recordOb.OperationType = eta_business.EtaBusinessOperationTypeMoveSeller
+		recordOb.OperationRemark = fmt.Sprintf("%s移动到: %s", sysUser.RealName, req.SellerName)
+		recordOb.CreateTime = time.Now().Local()
+		_ = recordOb.Create()
+	}()
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// ContractList
+// @Title 商家签约列表
+// @Description 商家签约列表
+// @Param   EtaBusinessId	query	int		true	"商家ID"
+// @Success 200 Ret=200 获取成功
+// @router /contract_list [get]
+func (this *EtaBusinessController) ContractList() {
+	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
+	}
+	// 权限校验
+	resp := make([]*eta_business.EtaBusinessContractItem, 0)
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Data = resp
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+	businessId, _ := this.GetInt("EtaBusinessId", 0)
+	if businessId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, 商家ID"
+		return
+	}
+
+	cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessContractColumns.EtaBusinessId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, businessId)
+	order := `signing_time DESC`
+
+	contractOb := new(eta_business.EtaBusinessContract)
+	list, e := contractOb.GetItemsByCondition(cond, pars, []string{}, order)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取商家列表失败, Err: " + e.Error()
+		return
+	}
+	for _, v := range list {
+		b := new(eta_business.EtaBusinessContractItem)
+		b.EtaBusinessId = v.EtaBusinessId
+		b.SigningTime = v.SigningTime.Format(utils.FormatDate)
+		b.ExpiredTime = v.ExpiredTime.Format(utils.FormatDate)
+		// TODO:到期天数,当前合约
+		resp = append(resp, b)
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 13 - 0
models/db.go

@@ -15,6 +15,7 @@ import (
 	future_good2 "hongze/hz_crm_api/models/data_manage/future_good"
 	"hongze/hz_crm_api/models/data_manage/supply_analysis"
 	"hongze/hz_crm_api/models/day_new"
+	"hongze/hz_crm_api/models/eta_business"
 	"hongze/hz_crm_api/models/eta_trial"
 	"hongze/hz_crm_api/models/roadshow"
 	"hongze/hz_crm_api/models/seal"
@@ -182,6 +183,9 @@ func init() {
 
 	//AI 聊天记录
 	initAiChat()
+
+	// ETA商家
+	initEtaBusiness()
 }
 
 // initSystem 系统表 数据表
@@ -631,3 +635,12 @@ func initAiChat() {
 		new(aimod.AiChat),      //聊天
 	)
 }
+
+// initEtaBusiness ETA商家相关表
+func initEtaBusiness() {
+	orm.RegisterModel(
+		new(eta_business.EtaBusiness),                // ETA商家表
+		new(eta_business.EtaBusinessContract),        // ETA合同表
+		new(eta_business.EtaBusinessOperationRecord), // ETA操作记录表
+	)
+}

+ 242 - 0
models/eta_business/eta_business.go

@@ -0,0 +1,242 @@
+package eta_business
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
+	"strings"
+	"time"
+)
+
+const (
+	EtaBusinessSigningStatusFirst = iota + 1
+	EtaBusinessSigningStatusContinue
+	EtaBusinessSigningStatusTerminate
+)
+
+type EtaBusiness struct {
+	EtaBusinessId    int       `orm:"column(eta_business_id);pk"`
+	BusinessName     string    `description:"商家名称"`
+	BusinessCode     string    `description:"商家编码"`
+	CreditCode       string    `description:"社会统一信用码"`
+	RegionType       string    `description:"所属区域:国内;海外"`
+	Address          string    `description:"商家地址"`
+	SellerId         int       `description:"销售ID"`
+	SellerName       string    `description:"销售名称"`
+	Leader           string    `description:"决策人"`
+	IndustryId       int       `description:"行业ID"`
+	IndustryName     string    `description:"行业名称"`
+	CapitalScale     string    `description:"资金规模"`
+	ResearchTeamSize string    `description:"研究团队规模"`
+	UserMax          int       `description:"用户上限"`
+	SigningStatus    int       `description:"签约状态:1-首次签约;2-续约中;3-已终止"`
+	Enable           int       `description:"状态:0-禁用;1-启用"`
+	SigningTime      time.Time `description:"当前合约的签约时间"`
+	ExpiredTime      time.Time `description:"当前合约的到期时间"`
+	CreateTime       time.Time `description:"创建时间"`
+	ModifyTime       time.Time `description:"更新时间"`
+}
+
+func (m *EtaBusiness) TableName() string {
+	return "eta_business"
+}
+
+func (m *EtaBusiness) PrimaryId() string {
+	return EtaBusinessColumns.EtaBusinessId
+}
+
+var EtaBusinessColumns = struct {
+	EtaBusinessId    string
+	BusinessName     string
+	BusinessCode     string
+	CreditCode       string
+	RegionType       string
+	Address          string
+	SellerId         string
+	SellerName       string
+	Leader           string
+	IndustryId       string
+	IndustryName     string
+	CapitalScale     string
+	ResearchTeamSize string
+	UserMax          string
+	SigningStatus    string
+	Enable           string
+	SigningTime      string
+	ExpiredTime      string
+	CreateTime       string
+	ModifyTime       string
+}{
+	EtaBusinessId:    "eta_business_id",
+	BusinessName:     "business_name",
+	BusinessCode:     "business_code",
+	CreditCode:       "credit_code",
+	RegionType:       "region_type",
+	Address:          "address",
+	SellerId:         "seller_id",
+	SellerName:       "seller_name",
+	Leader:           "leader",
+	IndustryId:       "industry_id",
+	IndustryName:     "industry_name",
+	CapitalScale:     "capital_scale",
+	ResearchTeamSize: "research_team_size",
+	UserMax:          "user_max",
+	SigningStatus:    "signing_status",
+	Enable:           "enable",
+	SigningTime:      "signing_time",
+	ExpiredTime:      "expired_time",
+	CreateTime:       "create_time",
+	ModifyTime:       "modify_time",
+}
+
+func (m *EtaBusiness) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EtaBusinessId = int(id)
+	return
+}
+
+func (m *EtaBusiness) CreateMulti(items []*EtaBusiness) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *EtaBusiness) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *EtaBusiness) Del() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.EtaBusinessId).Exec()
+	return
+}
+
+func (m *EtaBusiness) GetItemById(id int) (item *EtaBusiness, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *EtaBusiness) GetItemByCondition(condition string, pars []interface{}) (item *EtaBusiness, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *EtaBusiness) 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 *EtaBusiness) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EtaBusiness, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	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
+}
+
+// EtaBusinessAddReq 新增商家请求体
+type EtaBusinessAddReq struct {
+	BusinessName     string `description:"商家名称"`
+	CreditCode       string `description:"社会统一信用码"`
+	RegionType       string `description:"所属区域:国内;海外"`
+	Address          string `description:"商家地址"`
+	SellerId         int    `description:"销售ID"`
+	SellerName       string `description:"销售名称"`
+	Leader           string `description:"决策人"`
+	IndustryId       int    `description:"行业ID"`
+	IndustryName     string `description:"行业名称"`
+	CapitalScale     string `description:"资金规模"`
+	ResearchTeamSize string `description:"研究团队规模"`
+	UserMax          int    `description:"用户上限"`
+}
+
+// EtaBusinessEditReq 编辑商家请求体
+type EtaBusinessEditReq struct {
+	EtaBusinessId    int    `description:"商家ID"`
+	Address          string `description:"商家地址"`
+	Leader           string `description:"决策人"`
+	IndustryId       int    `description:"行业ID"`
+	IndustryName     string `description:"行业名称"`
+	CapitalScale     string `description:"资金规模"`
+	ResearchTeamSize string `description:"研究团队规模"`
+	UserMax          int    `description:"用户上限"`
+}
+
+// EtaBusinessSigningReq 商家签约请求体
+type EtaBusinessSigningReq struct {
+	EtaBusinessId int    `description:"商家ID"`
+	SigningTime   string `description:"当前合约的签约时间"`
+	ExpiredTime   string `description:"当前合约的到期时间"`
+}
+
+// EtaBusinessEnableReq 禁启用商家请求体
+type EtaBusinessEnableReq struct {
+	EtaBusinessId int `description:"商家ID"`
+}
+
+// EtaBusinessMoveSellerReq 移动商家销售请求体
+type EtaBusinessMoveSellerReq struct {
+	EtaBusinessId int    `description:"商家ID"`
+	SellerId      int    `description:"销售ID"`
+	SellerName    string `description:"销售名称"`
+}
+
+// CreateEtaBusinessCode 生成ETA商家编码
+func CreateEtaBusinessCode() (code string, err error) {
+	var num int
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS num FROM eta_business WHERE created_time >= ? `
+	err = o.Raw(sql, time.Now().Format(utils.FormatDate)).QueryRow(&num)
+	if err != nil {
+		return
+	}
+	code = "BZ" + time.Now().Format("20060102") + fmt.Sprintf("%03d", num)
+	return
+}
+
+// EtaBusinessItem ETA商家信息
+type EtaBusinessItem struct {
+	EtaBusinessId    int
+	BusinessName     string `description:"商家名称"`
+	BusinessCode     string `description:"商家编码"`
+	CreditCode       string `description:"社会统一信用码"`
+	RegionType       string `description:"所属区域:国内;海外"`
+	Address          string `description:"商家地址"`
+	SellerId         int    `description:"销售ID"`
+	SellerName       string `description:"销售名称"`
+	Leader           string `description:"决策人"`
+	IndustryId       int    `description:"行业ID"`
+	IndustryName     string `description:"行业名称"`
+	CapitalScale     string `description:"资金规模"`
+	ResearchTeamSize string `description:"研究团队规模"`
+	UserMax          int    `description:"用户上限"`
+	SigningStatus    int    `description:"签约状态:1-首次签约;2-续约中;3-已终止"`
+	Enable           int    `description:"状态:0-禁用;1-启用"`
+	SigningTime      string `description:"当前合约的签约时间"`
+	ExpiredTime      string `description:"当前合约的到期时间"`
+	CreateTime       string `description:"创建时间"`
+	ModifyTime       string `description:"更新时间"`
+}

+ 120 - 0
models/eta_business/eta_business_contract.go

@@ -0,0 +1,120 @@
+package eta_business
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// EtaBusinessContract ETA商家合同表
+type EtaBusinessContract struct {
+	EtaBusinessContractId int       `orm:"column(eta_business_contract_id);pk"`
+	EtaBusinessId         int       `description:"ETA商家ID"`
+	SigningTime           time.Time `description:"签约时间"`
+	ExpiredTime           time.Time `description:"到期时间"`
+	CreateTime            time.Time `description:"创建时间"`
+	ModifyTime            time.Time `description:"更新时间"`
+}
+
+func (m *EtaBusinessContract) TableName() string {
+	return "eta_business_contract"
+}
+
+func (m *EtaBusinessContract) PrimaryId() string {
+	return EtaBusinessContractColumns.EtaBusinessContractId
+}
+
+var EtaBusinessContractColumns = struct {
+	EtaBusinessContractId string
+	EtaBusinessId         string
+	SigningTime           string
+	ExpiredTime           string
+	CreateTime            string
+	ModifyTime            string
+}{
+	EtaBusinessContractId: "eta_business_contract_id",
+	EtaBusinessId:         "eta_business_id",
+	SigningTime:           "signing_time",
+	ExpiredTime:           "expired_time",
+	CreateTime:            "create_time",
+	ModifyTime:            "modify_time",
+}
+
+func (m *EtaBusinessContract) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EtaBusinessContractId = int(id)
+	return
+}
+
+func (m *EtaBusinessContract) CreateMulti(items []*EtaBusinessContract) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *EtaBusinessContract) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *EtaBusinessContract) Del() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.EtaBusinessContractId).Exec()
+	return
+}
+
+func (m *EtaBusinessContract) GetItemById(id int) (item *EtaBusinessContract, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *EtaBusinessContract) GetItemByCondition(condition string, pars []interface{}) (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&m)
+	return
+}
+
+func (m *EtaBusinessContract) 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 *EtaBusinessContract) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EtaBusinessContract, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	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
+}
+
+// EtaBusinessContractItem 商家签约信息
+type EtaBusinessContractItem struct {
+	EtaBusinessContractId int
+	EtaBusinessId         int    `description:"ETA商家ID"`
+	SigningTime           string `description:"签约时间"`
+	ExpiredTime           string `description:"到期时间"`
+	ExpireDay             int    `description:"到期天数"`
+	Using                 bool   `description:"是否当前合约"`
+}

+ 126 - 0
models/eta_business/eta_business_operation_record.go

@@ -0,0 +1,126 @@
+package eta_business
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// 操作类型
+const (
+	EtaBusinessOperationTypeAdd = iota + 1
+	EtaBusinessOperationTypeEdit
+	EtaBusinessOperationTypeDisable
+	EtaBusinessOperationTypeEnable
+	EtaBusinessOperationTypeMoveSeller
+	EtaBusinessOperationTypeRenewalContract
+)
+
+// EtaBusinessOperationRecord ETA商家合同表
+type EtaBusinessOperationRecord struct {
+	Id              int       `orm:"column(id);pk"`
+	EtaBusinessId   int       `description:"ETA商家ID"`
+	SellerId        int       `description:"操作时所对应的销售ID"`
+	SysUserId       int       `description:"操作人ID"`
+	SysRealName     string    `description:"操作人姓名"`
+	OperationType   int       `description:"操作类型:1-新增;2-编辑;3-禁用;4-启用;5-移动销售;6-添加续约"`
+	OperationRemark string    `description:"操作内容"`
+	CreateTime      time.Time `description:"创建时间"`
+}
+
+func (m *EtaBusinessOperationRecord) TableName() string {
+	return "eta_business_contract"
+}
+
+func (m *EtaBusinessOperationRecord) PrimaryId() string {
+	return EtaBusinessOperationRecordColumns.Id
+}
+
+var EtaBusinessOperationRecordColumns = struct {
+	Id              string
+	EtaBusinessId   string
+	SellerId        string
+	SysUserId       string
+	SysRealName     string
+	OperationType   string
+	OperationRemark string
+	CreateTime      string
+}{
+	Id:              "id",
+	EtaBusinessId:   "eta_business_id",
+	SellerId:        "seller_id",
+	SysUserId:       "sys_user_id",
+	SysRealName:     "sys_real_name",
+	OperationType:   "operation_type",
+	OperationRemark: "operation_remark",
+	CreateTime:      "create_time",
+}
+
+func (m *EtaBusinessOperationRecord) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.Id = int(id)
+	return
+}
+
+func (m *EtaBusinessOperationRecord) CreateMulti(items []*EtaBusinessOperationRecord) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *EtaBusinessOperationRecord) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *EtaBusinessOperationRecord) Del() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.Id).Exec()
+	return
+}
+
+func (m *EtaBusinessOperationRecord) GetItemById(id int) (item *EtaBusinessOperationRecord, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *EtaBusinessOperationRecord) GetItemByCondition(condition string, pars []interface{}) (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&m)
+	return
+}
+
+func (m *EtaBusinessOperationRecord) 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 *EtaBusinessOperationRecord) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EtaBusinessOperationRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	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
+}

+ 6 - 0
routers/router.go

@@ -21,6 +21,7 @@ import (
 	"hongze/hz_crm_api/controllers/data_manage/line_feature"
 	"hongze/hz_crm_api/controllers/data_manage/supply_analysis"
 	"hongze/hz_crm_api/controllers/english_report"
+	"hongze/hz_crm_api/controllers/eta_business"
 	"hongze/hz_crm_api/controllers/roadshow"
 	"hongze/hz_crm_api/controllers/seal"
 	"hongze/hz_crm_api/controllers/yb"
@@ -298,6 +299,11 @@ func init() {
 				&english_report.EnPermissionController{},
 			),
 		),
+		web.NSNamespace("/eta_business",
+			web.NSInclude(
+				&eta_business.EtaBusinessController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 27 - 0
services/eta_business/eta_business.go

@@ -0,0 +1,27 @@
+package eta_business
+
+import (
+	"fmt"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/utils"
+	"strings"
+)
+
+// CheckEtaBusinessOperateAuth 校验ETA商家操作权限
+func CheckEtaBusinessOperateAuth(roleCode string) (ok bool, err error) {
+	confKey := "eta_business_auth_role"
+	conf, e := company.GetConfigDetailByCode(confKey)
+	if e != nil {
+		err = fmt.Errorf("获取权限配置失败, Err: %s", e.Error())
+		return
+	}
+	if conf.ConfigValue == "" {
+		err = fmt.Errorf("权限配置信息有误")
+		return
+	}
+	authArr := strings.Split(conf.ConfigValue, ",")
+	if utils.InArrayByStr(authArr, roleCode) {
+		ok = true
+	}
+	return
+}