在GoZero中实现一个在职继承和离职交接的通用模块,涉及到顾问离职交接客户、领导离职交接审批单据等功能。为了使这个模块通用且易于扩展,我们可以分成几个部分:
- 数据模型设计:我们首先需要设计离职交接相关的数据模型。
- API设计:需要设计API供前端和其他服务调用。
- 业务逻辑:实现离职交接的业务逻辑,包括顾问的客户交接和领导的审批单据交接。
- GoZero框架支持:GoZero提供了一些框架特性,我们将利用其进行高效的开发。
以下是基于GoZero的一个简化实现方案:
1. 数据模型设计
我们首先设计数据库模型,用于存储交接记录和相关数据。你可以使用GoZero的ORM(gorm
)来管理这些模型。
顾问(Consultant)离职交接表模型:
go
package model
import "time"
// 顾问离职交接表
type ConsultantTransfer struct {
Id int64 `gorm:"primary_key;auto_increment;column:id" json:"id"`
ConsultantId int64 `gorm:"column:consultant_id" json:"consultant_id"` // 顾问ID
CustomerId int64 `gorm:"column:customer_id" json:"customer_id"` // 客户ID
TransferToId int64 `gorm:"column:transfer_to_id" json:"transfer_to_id"` // 交接给的顾问ID
Status int32 `gorm:"column:status" json:"status"` // 交接状态 0:待交接, 1:已交接
CreateTime time.Time `gorm:"column:create_time" json:"create_time"`
UpdateTime time.Time `gorm:"column:update_time" json:"update_time"`
}
// 设置数据库表名
func (ConsultantTransfer) TableName() string {
return "consultant_transfer"
}
领导(Leader)离职交接表模型:
go
package model
import "time"
// 领导离职交接表
type LeaderTransfer struct {
Id int64 `gorm:"primary_key;auto_increment;column:id" json:"id"`
LeaderId int64 `gorm:"column:leader_id" json:"leader_id"` // 领导ID
DocumentId int64 `gorm:"column:document_id" json:"document_id"` // 审批单据ID
TransferToId int64 `gorm:"column:transfer_to_id" json:"transfer_to_id"` // 交接给的领导ID
Status int32 `gorm:"column:status" json:"status"` // 交接状态 0:待交接, 1:已交接
CreateTime time.Time `gorm:"column:create_time" json:"create_time"`
UpdateTime time.Time `gorm:"column:update_time" json:"update_time"`
}
// 设置数据库表名
func (LeaderTransfer) TableName() string {
return "leader_transfer"
}
2. API设计
我们需要设计以下几个API接口:
- 顾问离职交接客户
POST /consultant/transfer
: 用于顾问离职时,进行客户交接。GET /consultant/transfer/{id}
: 查看某个顾问的交接状态。
- 领导离职交接审批单据
POST /leader/transfer
: 用于领导离职时,进行审批单据交接。GET /leader/transfer/{id}
: 查看某个领导的交接状态。
3. 业务逻辑实现
在GoZero中,我们通过service和logic来组织业务逻辑。以下是顾问离职交接和领导离职交接的业务逻辑实现。
顾问离职交接业务逻辑实现
go
package logic
import (
"context"
"myapp/model"
"myapp/service"
"github.com/tal-tech/go-zero/core/logx"
)
type TransferConsultantLogic struct {
logx.Logger
ctx context.Context
svcCtx *service.ServiceContext
}
func NewTransferConsultantLogic(ctx context.Context, svcCtx *service.ServiceContext) *TransferConsultantLogic {
return &TransferConsultantLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
// 顾问离职交接客户
func (l *TransferConsultantLogic) TransferConsultant(customerId int64, consultantId int64, transferToId int64) error {
transfer := model.ConsultantTransfer{
ConsultantId: consultantId,
CustomerId: customerId,
TransferToId: transferToId,
Status: 0, // 默认待交接
}
// 保存交接记录
if err := l.svcCtx.DB.Create(&transfer).Error; err != nil {
return err
}
// 更新顾问的状态、客户归属等逻辑...
return nil
}
领导离职交接业务逻辑实现
go
package logic
import (
"context"
"myapp/model"
"myapp/service"
"github.com/tal-tech/go-zero/core/logx"
)
type TransferLeaderLogic struct {
logx.Logger
ctx context.Context
svcCtx *service.ServiceContext
}
func NewTransferLeaderLogic(ctx context.Context, svcCtx *service.ServiceContext) *TransferLeaderLogic {
return &TransferLeaderLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
// 领导离职交接审批单据
func (l *TransferLeaderLogic) TransferLeader(documentId int64, leaderId int64, transferToId int64) error {
transfer := model.LeaderTransfer{
LeaderId: leaderId,
DocumentId: documentId,
TransferToId: transferToId,
Status: 0, // 默认待交接
}
// 保存交接记录
if err := l.svcCtx.DB.Create(&transfer).Error; err != nil {
return err
}
// 更新审批单据状态、领导交接等逻辑...
return nil
}
4. API路由与控制器
GoZero框架使用handler
来处理路由请求。我们将定义ConsultantHandler
和LeaderHandler
,以处理相应的交接请求。
顾问交接接口
go
package handler
import (
"context"
"myapp/service"
"github.com/tal-tech/go-zero/rest/httpx"
"myapp/logic"
"myapp/model"
"net/http"
)
type ConsultantHandler struct {
svcCtx *service.ServiceContext
}
func NewConsultantHandler(svcCtx *service.ServiceContext) *ConsultantHandler {
return &ConsultantHandler{svcCtx: svcCtx}
}
// 顾问离职交接客户接口
func (h *ConsultantHandler) TransferConsultant(w http.ResponseWriter, r *http.Request) {
var req model.ConsultantTransfer
if err := httpx.Parse(r, &req); err != nil {
httpx.Error(w, err)
return
}
logic := logic.NewTransferConsultantLogic(r.Context(), h.svcCtx)
if err := logic.TransferConsultant(req.CustomerId, req.ConsultantId, req.TransferToId); err != nil {
httpx.Error(w, err)
return
}
httpx.Ok(w)
}
领导交接接口
go
package handler
import (
"context"
"myapp/service"
"github.com/tal-tech/go-zero/rest/httpx"
"myapp/logic"
"myapp/model"
"net/http"
)
type LeaderHandler struct {
svcCtx *service.ServiceContext
}
func NewLeaderHandler(svcCtx *service.ServiceContext) *LeaderHandler {
return &LeaderHandler{svcCtx: svcCtx}
}
// 领导离职交接审批单据接口
func (h *LeaderHandler) TransferLeader(w http.ResponseWriter, r *http.Request) {
var req model.LeaderTransfer
if err := httpx.Parse(r, &req); err != nil {
httpx.Error(w, err)
return
}
logic := logic.NewTransferLeaderLogic(r.Context(), h.svcCtx)
if err := logic.TransferLeader(req.DocumentId, req.LeaderId, req.TransferToId); err != nil {
httpx.Error(w, err)
return
}
httpx.Ok(w)
}
总结
这个模块实现了在职继承和离职交接的通用框架,能够适用于教务CRM系统中的顾问客户交接和领导审批单据交接功能。你可以根据实际需求进行定制和扩展。