Browse Source

CRM销售分组信息、合规登记调整

hsun 2 years ago
parent
commit
21f0e4784e

+ 3 - 1
controller/contract/register.go

@@ -237,6 +237,7 @@ func (rg *RegisterController) Add(c *gin.Context) {
 	ob.Remark = req.Remark
 	ob.ServiceRemark = req.ServiceRemark
 	ob.HasPayment = req.HasPayment
+	ob.NewCompany = req.NewCompany
 	ob.Set()
 	// 存在代付的直接完成登记, 且不允许进行开票/到款登记
 	if req.HasPayment == 1 {
@@ -350,7 +351,7 @@ func (rg *RegisterController) Edit(c *gin.Context) {
 	updateCols := []string{
 		"ContractCode", "RelateContractCode", "CrmContractId", "ContractSource", "CompanyName", "ActualCompanyName",
 		"SellerId", "SellerName", "ContractType", "ContractAmount", "StartDate", "EndDate", "SignDate", "AgreedPayTime",
-		"ContractStatus", "RegisterStatus", "Remark", "ServiceRemark", "HasPayment", "ModifyTime",
+		"ContractStatus", "RegisterStatus", "Remark", "ServiceRemark", "HasPayment", "NewCompany", "ModifyTime",
 	}
 	nowTime := time.Now().Local()
 	item.ContractCode = req.ContractCode
@@ -372,6 +373,7 @@ func (rg *RegisterController) Edit(c *gin.Context) {
 	item.Remark = req.Remark
 	item.ServiceRemark = req.ServiceRemark
 	item.HasPayment = req.HasPayment
+	item.NewCompany = req.NewCompany
 	item.ModifyTime = nowTime
 	// 存在代付的直接完成登记, 且不允许进行开票/到款登记
 	if req.HasPayment == 1 {

+ 52 - 0
models/crm/admin.go

@@ -0,0 +1,52 @@
+package crm
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+// Admin 系统管理员表
+type Admin struct {
+	AdminId                   int       `gorm:"primaryKey;column:admin_id;type:bigint(20);not null" json:"admin_id"`
+	AdminName                 string    `gorm:"uniqueIndex:un;index:name;index:admin_pass;column:admin_name;type:varchar(60);not null" json:"admin_name"`
+	AdminAvatar               string    `gorm:"column:admin_avatar;type:varchar(255);not null;default:''" json:"admin_avatar"` // 用户头像
+	RealName                  string    `gorm:"column:real_name;type:varchar(60)" json:"real_name"`
+	Password                  string    `gorm:"index:password;index:admin_pass;column:password;type:varchar(60);not null" json:"password"`
+	LastUpdatedPasswordTime   time.Time `gorm:"column:last_updated_password_time;type:datetime" json:"last_updated_password_time"`
+	Enabled                   int       `gorm:"uniqueIndex:un;column:enabled;type:tinyint(1);not null;default:1" json:"enabled"` // 1:有效,0:禁用
+	Email                     string    `gorm:"column:email;type:varchar(60)" json:"email"`
+	LastLoginTime             time.Time `gorm:"column:last_login_time;type:datetime" json:"last_login_time"`                                        // 最近登陆时间
+	CreatedTime               time.Time `gorm:"index:created_time;column:created_time;type:datetime;default:CURRENT_TIMESTAMP" json:"created_time"` // 创建时间
+	LastUpdatedTime           time.Time `gorm:"index:last_updated_time;column:last_updated_time;type:timestamp;not null;default:CURRENT_TIMESTAMP" json:"last_updated_time"`
+	Role                      string    `gorm:"column:role;type:varchar(30);default:saller" json:"role"`                 // 用户角色
+	Mobile                    string    `gorm:"column:mobile;type:varchar(20)" json:"mobile"`                            // 手机号
+	RoleType                  int       `gorm:"column:role_type;type:tinyint(4);default:0" json:"role_type"`             // 角色类型:1需要录入指标,0:不需要
+	RoleId                    int       `gorm:"column:role_id;type:int(11);default:0" json:"role_id"`                    // 角色id
+	RoleName                  string    `gorm:"column:role_name;type:varchar(100)" json:"role_name"`                     // 角色名称
+	RoleTypeCode              string    `gorm:"column:role_type_code;type:varchar(20);default:''" json:"role_type_code"` // 角色编码
+	DepartmentId              int       `gorm:"column:department_id;type:int(11);default:0" json:"department_id"`        // 部门id
+	DepartmentName            string    `gorm:"column:department_name;type:varchar(100)" json:"department_name"`         // 部门名称
+	GroupId                   int       `gorm:"column:group_id;type:int(11);default:0" json:"group_id"`                  // 分组id
+	GroupName                 string    `gorm:"column:group_name;type:varchar(100)" json:"group_name"`                   // 分组名称
+	Authority                 int       `gorm:"column:authority;type:tinyint(4);default:0" json:"authority"`             // 管理权限,0:无,1:部门负责人,2:小组负责人,或者ficc销售主管,4:ficc销售组长
+	Position                  string    `gorm:"column:position;type:varchar(100)" json:"position"`                       // 职位
+	DirectorId                int       `gorm:"column:director_id;type:int(11)" json:"director_id"`
+	DisableTime               time.Time `gorm:"column:disable_time;type:datetime" json:"disable_time"`                                                    // 禁用时间
+	ChartPermission           int       `gorm:"column:chart_permission;type:tinyint(9) unsigned;default:0" json:"chart_permission"`                       // 图表指标操作权限,0:只能操作 自己的,1:所有图表可操作
+	EdbPermission             int       `gorm:"column:edb_permission;type:tinyint(9) unsigned;default:0" json:"edb_permission"`                           // 指标库操作权限,0:只能操作 自己的,1:所有图表可操作
+	MysteelChemicalPermission int       `gorm:"column:mysteel_chemical_permission;type:tinyint(9) unsigned;default:0" json:"mysteel_chemical_permission"` // 钢联化工指标操作权限,0:只能操作 自己的,1:所有指标可操作
+	OpenId                    string    `gorm:"column:open_id;type:varchar(100);default:''" json:"open_id"`                                               // 弘则部门公众号的openid
+	UnionId                   string    `gorm:"column:union_id;type:varchar(100);default:''" json:"union_id"`                                             // 微信公众平台唯一标识
+}
+
+func (m *Admin) TableName() string {
+	return "admin"
+}
+
+func (m *Admin) List(condition string, pars []interface{}) (list []*Admin, err error) {
+	list = make([]*Admin, 0)
+	err = global.MYSQL["report"].Model(m).
+		Where(condition, pars...).
+		Find(&list).Error
+	return
+}

+ 10 - 0
models/crm/company_seller.go

@@ -26,3 +26,13 @@ func GetCompanySellerByRoleCodes(condition string, pars []interface{}) (results
 	err = query.Find(&results).Error
 	return
 }
+
+// SellerAdminWithGroupTeam 系统销售(包含大小分组)
+type SellerAdminWithGroupTeam struct {
+	SellerId   int    `json:"seller_id" description:"销售ID"`
+	SellerName string `json:"seller_name" description:"销售名称"`
+	GroupId    int    `json:"group_id" description:"分组ID"`
+	GroupName  string `json:"group_name" description:"分组名称"`
+	TeamId     int    `json:"team_id" description:"小组ID"`
+	TeamName   string `json:"team_name" description:"小组名称"`
+}

+ 3 - 0
models/crm/constants.go

@@ -45,6 +45,9 @@ const (
 	// 合同业务类型
 	ContractTypeBusiness = "业务合同"
 	ContractTypePayment  = "代付合同"
+
+	// 销售部门ID
+	SellerDepartmentId = 2
 )
 
 // ContractTypeFmsMap CRM系统合同类型/FMS系统合同类型

+ 25 - 0
models/crm/sys_department.go

@@ -0,0 +1,25 @@
+package crm
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+// SysDepartment 系统部门表
+type SysDepartment struct {
+	DepartmentId   int       `gorm:"primaryKey;column:department_id;type:int(11);not null" json:"department_id"`
+	DepartmentName string    `gorm:"unique;column:department_name;type:varchar(255);default:''" json:"department_name"` // 部门名称
+	CreateTime     time.Time `gorm:"column:create_time;type:datetime" json:"create_time"`                               // 创建时间
+}
+
+func (m *SysDepartment) TableName() string {
+	return "sys_department"
+}
+
+func (m *SysDepartment) List(condition string, pars []interface{}) (list []*SysDepartment, err error) {
+	list = make([]*SysDepartment, 0)
+	err = global.MYSQL["report"].Model(m).
+		Where(condition, pars...).
+		Find(&list).Error
+	return
+}

+ 27 - 0
models/crm/sys_group.go

@@ -0,0 +1,27 @@
+package crm
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+// SysGroup 系统分组表
+type SysGroup struct {
+	GroupId      int       `gorm:"primaryKey;column:group_id;type:int(11);not null" json:"group_id"`
+	DepartmentId int       `gorm:"index:idx_department_id;column:department_id;type:int(11)" json:"department_id"` // 部门id
+	GroupName    string    `gorm:"column:group_name;type:varchar(255);default:''" json:"group_name"`               // 分组名称
+	CreateTime   time.Time `gorm:"column:create_time;type:datetime" json:"create_time"`
+	ParentId     int       `gorm:"column:parent_id;type:int(11);default:0" json:"parent_id"`
+}
+
+func (m *SysGroup) TableName() string {
+	return "sys_group"
+}
+
+func (m *SysGroup) List(condition string, pars []interface{}) (list []*SysGroup, err error) {
+	list = make([]*SysGroup, 0)
+	err = global.MYSQL["report"].Model(m).
+		Where(condition, pars...).
+		Find(&list).Error
+	return
+}

+ 2 - 0
models/fms/contract_register.go

@@ -32,6 +32,7 @@ type ContractRegister struct {
 	Remark             string    `gorm:"column:remark" json:"remark" description:"备注信息"`
 	ServiceRemark      string    `gorm:"column:service_remark" json:"service_remark" description:"套餐备注信息"`
 	HasPayment         int       `gorm:"column:has_payment" json:"has_payment" description:"是否有代付: 0-无; 1-有"`
+	NewCompany         int       `gorm:"column:new_company" json:"new_company" description:"是否为新客户: 0-否; 1-是"`
 	IsDeleted          int       `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"`
 	base.TimeBase
 }
@@ -168,6 +169,7 @@ type ContractRegisterAddReq struct {
 	ProductId          int                     `json:"product_id" binding:"oneof=1 2" description:"产品ID"`
 	ServiceRemark      string                  `json:"service_remark" description:"套餐备注"`
 	HasPayment         int                     `json:"has_payment" description:"是否有代付: 0-无; 1-有"`
+	NewCompany         int                     `json:"new_company" description:"是否为新客户: 0-否; 1-是"`
 	Services           []ContractServiceAddReq `json:"services" description:"服务套餐内容"`
 }
 

+ 62 - 0
services/crm/company_seller.go

@@ -0,0 +1,62 @@
+package crm
+
+import (
+	"errors"
+	"hongze/fms_api/models/crm"
+)
+
+// GetSellerDepartmentAndGroupMap 获取销售部门列表-包含大组和小组
+func GetSellerDepartmentListWithGroupAndTeam() (sellerList []*crm.SellerAdminWithGroupTeam, err error) {
+	sellerList = make([]*crm.SellerAdminWithGroupTeam, 0)
+	// 获取组别列表
+	groupCond := "department_id = ?"
+	groupPars := make([]interface{}, 0)
+	groupPars = append(groupPars, crm.SellerDepartmentId)
+	groupOB := new(crm.SysGroup)
+	groupList, e := groupOB.List(groupCond, groupPars)
+	if e != nil {
+		err = errors.New("获取组别列表失败, Err: " + e.Error())
+		return
+	}
+	groupMap := make(map[int]*crm.SysGroup)
+	for i := range groupList {
+		groupMap[groupList[i].GroupId] = groupList[i]
+	}
+
+	// 获取销售部门所有销售信息
+	adminCond := "department_id = ? AND enabled = 1"
+	adminPars := make([]interface{}, 0)
+	adminPars = append(adminPars, crm.SellerDepartmentId)
+	adminOB := new(crm.Admin)
+	adminList, e := adminOB.List(adminCond, adminPars)
+	if e != nil {
+		err = errors.New("获取销售列表失败, Err: " + e.Error())
+		return
+	}
+
+	// 销售列表
+	for i := range adminList {
+		v := new(crm.SellerAdminWithGroupTeam)
+		v.SellerId = adminList[i].AdminId
+		v.SellerName = adminList[i].RealName
+		g := groupMap[adminList[i].GroupId]
+		if g != nil {
+			// 三级分组
+			if g.ParentId > 0 {
+				p := groupMap[g.ParentId]
+				if p != nil {
+					v.GroupId = p.GroupId
+					v.GroupName = p.GroupName
+					v.TeamId = g.GroupId
+					v.TeamName = g.GroupName
+				}
+				continue
+			}
+			// 二级分组
+			v.GroupId = g.GroupId
+			v.GroupName = g.GroupName
+		}
+		sellerList = append(sellerList, v)
+	}
+	return
+}