使用 GoZero 实现读取绩效表格 Excel 并打分

embedded/2024/11/19 16:26:24/

以下是一个使用GoZero框架读取Excel并进行打分的简化示例。假设我们有一个Excel文件,其中第一列包含绩效数据,我们将根据这些数据给出打分。

首先,需要安装GoZero依赖:

go get -u github.com/tal-tech/go-zero/tools/goctl

然后,使用goctl生成代码:

goctl rpc proto -dir ./excelrpc -pkg excelrpc

接下来,编写服务逻辑:

package excelrpc

import (

    "context"

    "fmt"

    "github.com/tal-tech/go-zero/core/logx"

    "github.com/xuri/excelize/v2"

)

type ExcelRpcServer struct {}

func NewExcelRpcServer() *ExcelRpcServer {

    return &ExcelRpcServer{}

}

func (s *ExcelRpcServer) ScoreExcel(ctx context.Context, in *ScoreExcelRequest) (*ScoreExcelResponse, error) {

    // 打开Excel文件

    f, err := excelize.OpenFile(in.GetExcelFile())

    if err != nil {

        logx.Errorf("open excel error: %v", err)

        return nil, err

    }

    // 读取第一个工作表

    sheet := f.GetSheetName(0)

    rows, err := f.GetRows(sheet)

    if err != nil {

        logx.Errorf("get rows error: %v", err)

        return nil, err

    }

    // 假设第一行是标题行,从第二行开始读取数据并打分

    scores := make([]int32, 0)

    for _, row := range rows[1:] {

        // 假设第一列是绩效数据

        performance := row[0]

        score := s.score(performance)

        scores = append(scores, score)

    }

    return &ScoreExcelResponse{Scores: scores}, nil

}

func (s *ExcelRpcServer) score(performance string) int32 {

    // 这里是一个简化的打分逻辑,实际情况需要根据业务规则来定

    if performance == "优秀" {

        return 90

    } else if performance == "合格" {

        return 60

    }

    return 0

}

最后,定义RPC请求和响应的protobuf模型:

syntax = "proto3";

package excelrpc;

service ExcelRpc {

  rpc ScoreExcel (ScoreExcelRequest) returns (ScoreExcelResponse);

}

message ScoreExcelRequest {

  string excelFile = 1;

}

message ScoreExcelResponse {

  repeated int32 scores = 1;

}

这个示例展示了如何使用GoZero框架和excelize库来读取Excel文件并进行简单的分数打分。在实际应用中,你需要根据自己的需求来调整打分逻辑和Excel文件的读取方式。


http://www.ppmy.cn/embedded/138813.html

相关文章

基于YOLOv8深度学习的智慧城市管理井盖状态检测系统(PyQt5界面+数据集+训练代码)

本研究设计并实现了一种基于YOLOv8深度学习的智慧城市管理井盖状态检测系统,旨在提高城市井盖管理的效率与安全性,减少因井盖缺失或损坏而可能带来的安全隐患。井盖作为城市基础设施的重要组成部分,其状态直接关系到行人和车辆的安全。传统的…

【分布式技术】分布式缓存技术-旁路缓存模式(Cache Aside Pattern)

旁路缓存模式介绍 概述1. 读取操作(Read)2. 写入操作(Write)3. 一致性问题4. 解决方案 适用于哪些场景?如何保证数据一致性?1. 延时双删策略具体是怎么工作的?写操作(更新或删除数据…

CSS 样式的优先级?

在CSS中,样式的优先级决定了当多个样式规则应用于同一个元素时,哪个样式会被最终使用。以下是一些决定CSS样式优先级的规则: 就近原则: 最后应用在元素上的样式具有最高优先级。这意味着如果两个选择器都应用了相同的样式&#xf…

根据 Maven 的不同 profiles 来改变 Spring Boot 应用程序的配置

在 Maven 的 pom.xml 文件中,你可以定义多个 profiles,每个 profile 可以包含一组特定的配置属性。这些属性可以被传递到 Spring Boot 的 application.properties 或 application.yml 文件中,以便根据不同的环境(如开发、测试、生…

机器学习3

六、朴素贝叶斯分类 背景知识:第三大点的第4点:概率 基础定义_数学概率中事件的定义-CSDN博客 1、条件概率 𝑃(𝐴|𝐵)𝑃(𝐴∩𝐵)/𝑃(𝐵) :A事件在…

一文速学---红黑树

文章目录 一、红黑树简介二、 红黑树特性三、红黑树插入3.1 红黑树为空3.2 父节点为黑色3.3 父节点为红色3.3.1 父亲和叔叔都是红色3.3.2 父节点为红色,叔叔节点为黑色3.3.2.1 父节点在左节点,插入节点在父亲左节点3.3.2.2 父节点在左节点,插…

树莓派(Raspberry Pi)picotool

树莓派(Raspberry Pi)picotool 安装直接安装从源码安装工具介绍显示信息保存程序二进制信息基本信息引脚完整信息 链接 安装 直接安装 在archlinux上,使用yay直接安装 yay -S picotool从源码安装 安装libusb sudo pacman -S libusb下载 …

SQL,力扣题目1369,获取最近第二次的活动

一、力扣链接 LeetCode_1369 二、题目描述 表: UserActivity ------------------------ | Column Name | Type | ------------------------ | username | varchar | | activity | varchar | | startDate | Date | | endDate | Date | -----…