import ( "github.com/360EntSecGroup-Skylar/excelize" "github.com/gin-gonic/gin" )control层:
func exportLxProduct(c *gin.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
baseReturn(c, -1, "上传文件出错")
return
}
//读excel流
xlsx, err := excelize.OpenReader(file)
if err != nil {
Logger.Error("open excel error:[%s]", err.Error())
baseReturn(c, 0, "读取excel文件失败")
return
}
//解析excel的数据
lxProducts, lxRrr := readExcel(xlsx)
if lxRrr != nil {
Logger.Error("read excel error:[%s]", lxRrr.Error())
baseReturn(c, 0, "解析excel文件失败")
return
}
lxService := LxProductService{}
errCode := lxService.ExportLxProduct(lxProducts)
baseReturn(c, errCode, len(lxProducts))
}
//ReadExcel .读取excel 转成切片
func readExcel(xlsx *excelize.File) ([]LxProduct, error) {
//根据名字获取cells的内容,返回的是一个[][]string
rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
//声明一个数组
var lxProducts []LxProduct
for i, row := range rows {
// 去掉第一行是excel表头部分
if i == 0 {
continue
}
var data LxProduct
for k, v := range row {
// 第一列是展示位名称
if k == 0 {
data.TypeName = v
}
// 第二列是产品主标题
if k == 1 {
data.ProductMasterTitle = v
}
// 第三列是产品副标题
if k == 2 {
data.ProductSlaveTitle = v
}
}
//将数据追加到集合中
lxProducts = append(lxProducts, data)
}
return lxProducts, nil
}
3. service层代码
func (LxProductService) ExportLxProduct(lxProducts []LxProduct) int {
timeUnix := time.Now().Unix()
strInt64 := strconv.FormatInt(timeUnix, 10)
createTime, _ := strconv.Atoi(strInt64)
for i := range lxProducts {
lxProducts[i].ProductType = getProductTypeByName(lxProducts[i].TypeName)
lxProducts[i].ProductNo = i + 1
lxProducts[i].CreateTime = createTime
}
lxProductDao := LxProductDao{}
err := lxProductDao.BatchInsertData(lxProducts)
if err != nil {
return ErrDBError
}
return ErrOk
}
4. dao层代码
unc (LxProductDao) BatchInsertData(products []LxProduct) error {
var buffer bytes.Buffer
//清空表数据
GetSoDbInstance().Exec("delete from `study_abroad_product`")
sql := "insert into `study_abroad_product` (`product_type`,`type_name`,`product_master_title`,`product_slave_title`,`product_no`,`create_time`) values"
if _, err := buffer.WriteString(sql); err != nil {
return err
}
for i := range products {
if i == len(products)-1 {
buffer.WriteString(fmt.Sprintf("('%d','%v','%v','%v','%d','%d');", products[i].ProductType, products[i].TypeName, products[i].ProductMasterTitle, products[i].ProductSlaveTitle, products[i].ProductNo, products[i].CreateTime))
} else {
buffer.WriteString(fmt.Sprintf("('%d','%v','%v','%v','%d','%d'),", products[i].ProductType, products[i].TypeName, products[i].ProductMasterTitle, products[i].ProductSlaveTitle, products[i].ProductNo, products[i].CreateTime))
}
}
return GetSoDbInstance().Exec(buffer.String()).Error
}
5.建表语句
#新增留学产品表
CREATE TABLE `study_abroad_product` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`product_type` int(2) NOT NULL DEFAULT '0' COMMENT '产品类型(1推荐 2美国 3英国 4加拿大 5澳大利亚 6新西兰 7日本',
`type_name` varchar(20) NOT NULL DEFAULT '0' COMMENT '类型名称',
`product_master_title` varchar(100) NOT NULL DEFAULT '0' COMMENT '产品主标题',
`product_slave_title` varchar(200) NOT NULL DEFAULT '0' COMMENT '产品副标题',
`product_no` int(2) DEFAULT '0' COMMENT '产品编号(保证导入的顺序',
`create_time` int(10) NOT NULL DEFAULT '0' COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='留学产品表';
6. excel文件模板:
7.数据库表最终效果:
因为公司需要,刚从Java转到Go 写篇文章备注下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)