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

相关推荐
崔婉凝3 分钟前
Ruby语言的工业物联网
开发语言·后端·golang
Aphasia3114 分钟前
面试题整合——html篇
面试·html
小杨4045 分钟前
springboot框架项目实践应用九(多数据源路由)
spring boot·后端·架构
uhakadotcom1 小时前
FPGA编程语言入门:从基础到实践
后端·面试·github
王小菲2 小时前
JavaScript 装箱机制与解构赋值深度解析
前端·javascript·面试
无知的前端2 小时前
一文读懂 iOS 程序生命周期和视图生命周期
ios·面试·swift
Hommi2 小时前
dify 向量数据库为es kibana无法连接解决方案
后端·ai 编程
neoooo2 小时前
Spring Boot 整合 Redis 实现附近位置查找 (LBS功能)
java·redis·后端
顾言2 小时前
23种设计模式中的状态模式
java·后端
拳布离手2 小时前
AutoDL 常用环境默认路径修改
面试