beego_Excel 文件上传

beego文件(xls,xlsx)上传功能。

func (t *LPotentialController) UploadfileAndImport() {
var result gutils.LResultAjax
// //filename := t.GetString("filename")
picdata := t.GetString("picdata")//base64编码
extname := t.GetString("extname") //后缀名字的判断
if extname != "xls" && extname != "xlsx" {
result.Code = 0
result.Info = "文件格式不对!"
t.Data["json"] = result
t.ServeJSON()
return
}
if picdata == "" {
result.Code = 0
result.Info = "picdata不能为空"
t.Data["json"] = result
t.ServeJSON()
return
}
buf, _ := base64.StdEncoding.DecodeString(picdata) //文件写入到buffer
path := utils.GetApplicationFullName()// 得到当前执行的exe的全路径文件名,如果失败返回""
dir := utils.ExtractFileDir(path) + "\\Cache\\"//缓存目录
utils.ForceDirectories(dir)//创建一个新目录
dest := fmt.Sprintf("%d", gutils.CreateGUID()) + ".xls"//生成一个临时服务器存放文件goSnowFlake算法
src := dir + dest
err2 := ioutil.WriteFile(src, buf, 0666) //buffer输出到xls文件中(不做处理,直接写到文件)
if err2 != nil {
result.Code = 0
result.Info = err2.Error()
return
}
//读取里面的数据
//数据切割组合
//数据数据库操作 去重等的判断 删除文件
excelFileName := src
xlFile, err := xlsx.OpenFile(excelFileName)//打开服务器文件
if err != nil {
os.Remove(src) //删除文件
result.Code = 0
result.Info = err.Error()
t.Data["json"] = result
t.ServeJSON()
return
}
var resinfo config.LJSON
for _, sheet := range xlFile.Sheets {//切割
k := 0
for _, row := range sheet.Rows {//列切割
i := 0
item := resinfo.AddItem()
for _, cell := range row.Cells {//行切割
s, _ := cell.String()
if k <= 1 {
} else {
item.Set("cells" + fmt.Sprintf("%d", i)).SetString(s)//单元格数据加入到数组中
}
i = i + 1
}
k = k + 1
}
}
os.Remove(src) //删除文件
res := resinfo
ressulringo, err3 := Importexcel(res
,chainid) //这里格式化导入数据
if ressulringo.ItemCount() <= 0 {
result.Code = 0
result.Info = "没有要处理的数据"
t.Data["json"] = result
t.ServeJSON()
}
if err3.Msg != nil { //获取数据有问题提示
result.Code = 0
result.Info = err3.Msg.Error()
result.List = ressulringo.Interface()
t.Data["json"] = result
t.ServeJSON()
} else { //没有问题提交了
ressul := t.CheckJ(ImportSure(ressulringo)) //没有问题确实导入
t.Data["json"] = ressul
t.ServeJSON()
}


}


//参数校验函数

func Importexcel(param config.LJSON, chainid string) (resinfo config.LJSON, err gutils.LError) {
//var resinfo config.LJSON
var comres config.LJSON
var trans *config.LJSON
var x2 config.LJSON
for i := 2; i < param.ItemCount(); i++ {
item := param.Item(i)
clincname := item.Get("cells0").String()
usernum := item.Get("cells1").String()  
cusname := item.Get("cells2").String()   
cusmobile := item.Get("cells3").String() 
remarks := item.Get("cells4").String()  
//表格内的数据重复判定  诊所和手机号
for m := 0; m < x2.ItemCount(); m++ {
mitem := x2.Item(m)
// mitem.Get("clincname").String() == clincname &&
if mitem.Get("mobile").String() == cusmobile {
err.Errorf(gutils.ParamError, "第"+fmt.Sprintf("%d", i+1)+"行与第"+fmt.Sprintf("%d", m+3)+"行数据重复")
return
}
}
trans = x2.AddItem()
trans.Set("clincname").SetString(clincname)
trans.Set("mobile").SetString(cusmobile)


//正则表达式
pattern := `1[3|4|5|7|8|][\d]{9}`
reg := regexp.MustCompile(pattern)
str := reg.MatchString(cusmobile)
if str == false {
err.Errorf(gutils.ParamError, "第"+fmt.Sprintf("%d", i+1)+"行手机号码格式错误")
return
}
if clincname == "" || usernum == "" || cusname == "" || cusmobile == "" {
err.Errorf(gutils.ParamError, "第"+fmt.Sprintf("%d", i+1)+"行数据不完整")
return
}
if len(remarks) > 20 {
err.Errorf(gutils.ParamError, "第"+fmt.Sprintf("%d", i+1)+"行备注长度过长")
return
}
item1 := resinfo.AddItem()
item1.Set("clincname").SetString(clincname)
item1.Set("usernum").SetString(usernum)
item1.Set("cusmobile").SetString(cusmobile)
item1.Set("name").SetString(cusname)
item1.Set("remarks").SetString(remarks)
item1.Set("chainid").SetString(chainid) //22525851358728192
comres, err = DoimportBefore(item1, i)
if err.Msg != nil {
err.Errorf(gutils.ParamError, err.Msg.Error())
return
}
item1.Set("clinicid").SetString(comres.Get("clinicid").String())
item1.Set("marketid").SetString(comres.Get("marketid").String())
}
return
}

//导入到数据表

func ImportSure(param config.LJSON) (result gutils.LResultModel, err gutils.LError) {
err.Caption = "ImportSure"
var xt config.LJSON
o := orm.NewOrm()
o.Using("db_koala")
//o.Begin()
//循环添加数据
for i := 0; i < param.ItemCount(); i++ {
//先判断手动添加的
item := param.Item(i)
xt.Set("datastatus").SetInt(0)                                          //激活状态
xt.Set("createtime").SetString(createtime)                              //更新时间
sql := `insert into t_potential_customer( DataStatus,CreateTime) value(:datastatus,:createtime)`
_, err.Msg = o.RawJSON(sql, xt).ValuesJSON(&result.List)
if err.Msg != nil {
err.Errorf(gutils.ParamError, "导入失败!")
return
}
}
return
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值