当前位置: 首页 > news >正文

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

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

1. **数据模型设计**:我们首先需要设计离职交接相关的数据模型。
2. **API设计**:需要设计API供前端和其他服务调用。
3. **业务逻辑**:实现离职交接的业务逻辑,包括顾问的客户交接和领导的审批单据交接。
4. **GoZero框架支持**:GoZero提供了一些框架特性,我们将利用其进行高效的开发。

以下是基于GoZero的一个简化实现方案:

### 1. 数据模型设计

我们首先设计数据库模型,用于存储交接记录和相关数据。你可以使用GoZero的ORM(`gorm`)来管理这些模型。#### 顾问(Consultant)离职交接表模型:
```go

package modelimport "time"// 顾问离职交接表
type ConsultantTransfer struct {Id            int64     `gorm:"primary_key;auto_increment;column:id" json:"id"`ConsultantId  int64     `gorm:"column:consultant_id" json:"consultant_id"` // 顾问IDCustomerId    int64     `gorm:"column:customer_id" json:"customer_id"`     // 客户IDTransferToId  int64     `gorm:"column:transfer_to_id" json:"transfer_to_id"` // 交接给的顾问IDStatus        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 modelimport "time"// 领导离职交接表
type LeaderTransfer struct {Id          int64     `gorm:"primary_key;auto_increment;column:id" json:"id"`LeaderId    int64     `gorm:"column:leader_id" json:"leader_id"`         // 领导IDDocumentId  int64     `gorm:"column:document_id" json:"document_id"`     // 审批单据IDTransferToId int64    `gorm:"column:transfer_to_id" json:"transfer_to_id"` // 交接给的领导IDStatus      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 logicimport ("context""myapp/model""myapp/service""github.com/tal-tech/go-zero/core/logx"
)type TransferConsultantLogic struct {logx.Loggerctx    context.ContextsvcCtx *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 logicimport ("context""myapp/model""myapp/service""github.com/tal-tech/go-zero/core/logx"
)type TransferLeaderLogic struct {logx.Loggerctx    context.ContextsvcCtx *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 handlerimport ("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.ConsultantTransferif 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 handlerimport ("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.LeaderTransferif 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系统中的顾问客户交接和领导审批单据交接功能。你可以根据实际需求进行定制和扩展。

相关文章:

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

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

C# 设计模式(结构型模式):桥接模式

C# 设计模式(结构型模式):桥接模式 在软件设计中,我们经常会遇到系统的变化频繁,或者需要灵活扩展功能的场景。这时,桥接模式(Bridge Pattern)便显得尤为重要。桥接模式是一个结构型…...

C# 设计模式(行为型模式):解释器模式

C# 设计模式(行为型模式):解释器模式 (Interpreter Pattern) 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义一种语言的语法表示,并提供一个解释…...

如何 cURL Elasticsearch:进入 Shell

作者:来自 Elastic Philipp Krenn Kibana 的控制台是开始使用 Elasticsearch 的 REST API 的最简单方法 - 语法突出显示、自动完成、格式化、导出 cURL、JavaScript 或 Python。而且你不必担心正确的端点、身份验证等。但是有时,如果 Kibana 不可用、你…...

深信服云桌面系统的终端安全准入设置

深信服的云桌面系统在默认状态下没有终端的安全准入设置,这也意味着同样的虚拟机,使用云桌面终端或者桌面套件都可以登录,但这也给系统带来了一些安全隐患,所以,一般情况下需要设置终端的安全准入策略,防止…...

Node.js 模块系统

Node.js 模块系统 1. 引言 Node.js,作为一个轻量级、高效的服务器端 JavaScript 运行环境,其模块系统是其最核心的特性之一。Node.js 的模块系统允许开发者将代码组织成多个文件,每个文件都是一个模块,这样可以提高代码的可维护性和可重用性。本文将详细介绍 Node.js 的模…...

数据结构知识收集尊享版(迅速了解回顾相关知识)

1、单链表、循环链表、双向链表,存储、逻辑结构 单链表、循环链表和双向链表都是线性表的链式存储结构,它们在存储和逻辑结构上有一些共同点和不同点。 存储结构 单链表:每个节点包含一个数据域和一个指针域,指针域指向下一个节…...

SpringMVC启动与请求处理流程解析

目录 SpringMVC的基本结构 1.MVC简介 2.基本结构 什么是Handler? 什么是HandlerMapping? 什么是HandlerAdapter? RequestMapping方法参数解析 DispatcherServlet的init()方法 DispatcherServlet的doService()方法 SpringBoot整合SpringMVC …...

C++ 日志库 spdlog 使用教程

Spdlog是一个快速、异步、线程安全的C日志库,他可以方便地记录应用程序的运行状态,并提供多种输出格式。官网:https://github.com/gabime/spdlog 安装教程可以参考:https://blog.csdn.net/Harrytsz/article/details/144887297 S…...

`http_port_t

http_port_t 是 SELinux(Security-Enhanced Linux)中的一种端口类型标签,用于标识哪些端口可以被 HTTP 和 HTTPS 服务使用。SELinux 是一种强制访问控制(MAC)安全模块,它通过定义安全策略来限制进程对系统资…...

SpringBoot中实现拦截器和过滤器

【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor,在功能方面很类似,但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器,实现Filter接口(SpringBoot 3.0 开始,jak…...

不锈钢均温板结合强力粘合技术革新手机内部架构

摘要: 本文介绍了一种创新性的手机内部架构设计方案,其中不锈钢均温板不仅作为高效的散热元件,还充当了手机中框的主要结构件。通过使用强力不可拆胶水将主板、尾插和其他关键部件直接粘合到均温板上,该方案实现了更为紧密的热耦合…...

Docker安装使用

文章目录 Docker安装Docker的基础使用搜索&拉取镜像 Docker的生命周期利用Docker切换不同OSDocker容器 镜像的保存&分享Docker存储Docker网络 Docker安装 更新apt索引 sudo apt-get update添加Docker所需要的依赖 apt-get install ca-certificates curl gnupg lsb-r…...

React 如何进行路由变化监听

一、使用react-router库(以react-router-dom为例) 1. 历史(history)对象监听 1.1 原理 react-router内部使用history对象来管理路由历史记录。可以通过访问history对象来监听路由变化。在基于类的组件中,可以通过组…...

Unity UGUI使用技巧与经验总结(不定期更新)

Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…...

中国乡镇界shp全境arcgis格式shp数据乡镇名称下载后内容测评

下载乡镇界shp链接:https://download.csdn.net/download/zhongguonanren99/19354855 标题中的“中国乡镇界shp全境arcgis格式shp数据乡镇名称2012年”揭示了这个数据集的核心内容。它是一个地理信息系统(GIS)数据,具体来说是使用…...

第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析

写入源码分析 接收与处理 请求首先会被 Netty4HttpServerTransport 接收,接着交由 RestController 进行路由分发。 private void tryAllHandlers(final RestRequest request, final RestChannel channel, final ThreadContext threadContext) throws Exception {…...

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 node-v20.18.0-x64 工具下载安装设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...

小于n的最大数 - 贪心算法 - C++

字节经典面试题 给定一个整数n,并从1~9中给定若干个可以使用的数字,根据上述两个条件,得到每一位都为给定可使用数字的、最大的小于整数n的数,例如,给定可以使用的数字为 {2,3,8} 三个数:给定 n3589&#x…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现

目录 1 三种多头编码(MHE)实现1.1 多头乘积(MHP)1.2 多头级联(MHC)1.3 多头采样(MHS)1.4 标签分解策略 论文:Multi-Head Encoding for Extreme Label Classification 作者…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...