go语言zero框架中教务crm系统的在职继承和离职交接的设计与实践

在GoZero中实现一个在职继承和离职交接的通用模块,涉及到顾问离职交接客户、领导离职交接审批单据等功能。为了使这个模块通用且易于扩展,我们可以分成几个部分:

  1. 数据模型设计:我们首先需要设计离职交接相关的数据模型。
  2. API设计:需要设计API供前端和其他服务调用。
  3. 业务逻辑:实现离职交接的业务逻辑,包括顾问的客户交接和领导的审批单据交接。
  4. 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接口:

  1. 顾问离职交接客户
    • POST /consultant/transfer: 用于顾问离职时,进行客户交接。
    • GET /consultant/transfer/{id}: 查看某个顾问的交接状态。
  2. 领导离职交接审批单据
    • 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来处理路由请求。我们将定义ConsultantHandlerLeaderHandler,以处理相应的交接请求。

顾问交接接口

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系统中的顾问客户交接和领导审批单据交接功能。你可以根据实际需求进行定制和扩展。

相关推荐
惜鸟5 分钟前
# LLM统一网关:LiteLLM 详细介绍(实践篇)
后端·openai
寒山李白9 分钟前
Java 依赖注入、控制反转与面向切面:面试深度解析
java·开发语言·面试·依赖注入·控制反转·面向切面
程序员老刘12 分钟前
20%的选择决定80%的成败
flutter·架构·客户端
ZzMemory13 分钟前
藏起来的JS(四) - GC(垃圾回收机制)
前端·javascript·面试
RainbowJie144 分钟前
Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
spring boot·后端·单元测试
suke1 小时前
MinIO社区版"挥刀自宫":Web管理功能全砍,社区信任岌岌可危
后端·程序员·开源
美团技术团队1 小时前
可信实验白皮书系列04:随机轮转实验
后端
想用offer打牌1 小时前
面试回答喜欢用构造器注入,面试官很满意😎...
后端·spring·面试
发愤图强的羔羊1 小时前
SpringBoot异步导出文件
spring boot·后端
渔夫Lee1 小时前
OLTP分库分表数据CDC到Doris的架构设计
架构