版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010918487/article/details/85523563
之前公司已经做好了一套系统,但是最近要把这套系统给别的公司,需要把别的公司的账号密码导入到db。以前我们是通过手机号,手机号短信验证码登录,现在的别的公司的账号体系是有账号密码。
于是db新增字段。给她们提供了一个注册接口,注册的时候提供账号密码等字段。
有3个层级。一级(国代),二级,三级。我们公司产品要求:如果一级下没有二级,只有三级的,那么这个三级直接隶属于当前一级。如果一级下有二级。二级下也有三级,那么就是正常的流程:三级隶属于二级,二级隶属于一级。
问题来了,新公司提供的账号有600多条,虽说已经提供了注册接口,但是我不可能一个个的c v 调用注册接口。直接写sql也是不合理的,因为这些账号之前的上下级关系,以及需要给每个账号生成不同的编号,用sql实现起来也是很复杂的。
部门老大给我说,用3个map[string]interface{},每个interface{}也分别是map[string]interface{}。其实最简单的就是把excel的数据做个整理,按照我代码能读取的简易格式,使用特定的符号拆分.
使用的第三方库:https://github.com/360EntSecGroup-Skylar/excelize.git
先看下这个excel大致长啥样。每个级别都存在为Null的情况
废话不多说,直接上代码
type Data struct {
FirstClass string `json:"first_class"`// 一级
SecondClass string `json:"second_class"`// 二级
ThirdClass string `json:"third_class"` //三级
}
func ReadExcel(filepath string) () {
// 首先读excel
xlsx, err := excelize.OpenFile(filepath)
if err != nil {
fmt.Println(err)
return
}
// Get all the rows in the Sheet2.
rows := xlsx.GetRows("Sheet2")
var datas []Data
for i, row := range rows {
// 去掉第一行,第一行是表头
if i == 0 {
continue
}
var data Data
for j, colCell := range row {
// 去掉前后空格(自己封装的方法,去掉字符串前后的特殊字符)
colCell = tools.TrimPrefixSuffix(colCell, " ")
// 排除第一列为Null
if j == 0 && colCell == "Null" {
continue
}
// 第一列即是一级
if j == 0 && colCell != "Null" {
data.FirstClass = colCell
}
// 第二列即是二级
if j == 1 {
data.SecondClass = colCell
}
// 三级
if j == 2 {
data.ThirdClass = colCell
}
}
fmt.Println(util.StringifyJson(data))
datas = append(datas, data)
}
}