|
@@ -2,8 +2,6 @@ package customerService
|
|
|
|
|
|
import "C"
|
|
|
import (
|
|
|
- "bytes"
|
|
|
- "encoding/gob"
|
|
|
"errors"
|
|
|
"github.com/baiy/Cadmin-server-go/admin"
|
|
|
"github.com/tealeg/xlsx"
|
|
@@ -97,7 +95,7 @@ func ImportUser(context *admin.Context) (interface{}, error) {
|
|
|
"datalist": []interface{}{}, // 读取到的用户id信息
|
|
|
"errUrl": "", // 失败的原因
|
|
|
}
|
|
|
- log.Println("888999")
|
|
|
+ recordCount, successCount, errCount := 0, 0, 0
|
|
|
mf, _, err := context.HttpRequest.FormFile("file")
|
|
|
if err != nil {
|
|
|
log.Println(err, "获取表格失败")
|
|
@@ -123,52 +121,75 @@ func ImportUser(context *admin.Context) (interface{}, error) {
|
|
|
return returnRs, errors.New("请确认内容是否正确,至少需要有一条用户信息")
|
|
|
}
|
|
|
|
|
|
- userData := fileData[0][7:] // 截取有效id
|
|
|
- var userIds map[string]bool // 用于判断是否重复导入用户
|
|
|
+ userData := fileData[0][6:] // 截取有效id
|
|
|
+ userIds := map[string]bool{} // 用于判断是否重复导入用户
|
|
|
var saveData [][]interface{} // 用于写入错误原因文件的数据 数据结构: [[userId,errReason],...]
|
|
|
var selectUser []map[string]interface{} // 用户选择的数据 数据结构[{userId:"1",phone:"18238182402"}...]
|
|
|
//遍历用户id 验证数据有效性
|
|
|
+ log.Println(userData)
|
|
|
for _, v := range userData {
|
|
|
+ recordCount++ // 记录读取到的条数
|
|
|
// 判断是否超过2000条数据,原因:超过2000条以后的数据导入失败。
|
|
|
if len(userIds) == 2000 {
|
|
|
reason := []interface{}{
|
|
|
v[0], "超过2000条以后的数据导入失败",
|
|
|
}
|
|
|
+ errCount++ // 错误记录数量++
|
|
|
+ saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 判断用户ID错误,无此用户,原因:用户ID错误,无此用户;
|
|
|
+ userRs, b := GetUserById(v[0])
|
|
|
+ var phone string
|
|
|
+ if b == true && userRs != nil && len(*userRs) > 0 {
|
|
|
+ //获取用户手机号信息
|
|
|
+ if qutil.ObjToString((*userRs)["s_phone"]) != "" {
|
|
|
+ phone = qutil.ObjToString((*userRs)["s_phone"])
|
|
|
+ } else {
|
|
|
+ phone = qutil.ObjToString((*userRs)["s_m_phone"])
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ log.Println("未查询到该用户:", v[0])
|
|
|
+ reason := []interface{}{
|
|
|
+ v[0], "用户ID错误,无此用户",
|
|
|
+ }
|
|
|
+ errCount++ // 错误记录数量++
|
|
|
saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
|
|
|
continue
|
|
|
}
|
|
|
- // todo 判断用户ID错误,无此用户,原因:用户ID错误,无此用户;
|
|
|
- //isExist :=userId
|
|
|
// 判断已选择用户“重复”导入,原因:重复导入;
|
|
|
if _, ok := userIds[v[0]]; ok {
|
|
|
reason := []interface{}{
|
|
|
v[0], "重复导入",
|
|
|
}
|
|
|
+ errCount++ // 错误记录数量++
|
|
|
saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
|
|
|
continue
|
|
|
- } else {
|
|
|
- userIds[v[0]] = true // 追加到已存在的用户id中
|
|
|
}
|
|
|
- // todo 赋值
|
|
|
- phone := ""
|
|
|
+ userIds[v[0]] = true // 追加到已存在的用户id中
|
|
|
tmpData := map[string]interface{}{"userId": v[0], "phone": phone}
|
|
|
+ successCount++ // 成功的数量++
|
|
|
selectUser = append(selectUser, tmpData) // 追加选择的用户中
|
|
|
|
|
|
}
|
|
|
- dirs := "/static/xlsx/errReason/"
|
|
|
- savePath := "./web/static/xlsx/errReason/"
|
|
|
- templatePath := "./web/static/importUserErr/"
|
|
|
- saveName := "导入失败数据"
|
|
|
- url, err := SaveFile(saveData, templatePath, savePath, saveName, dirs)
|
|
|
- if err != nil {
|
|
|
- log.Println("生成错误信息文件失败")
|
|
|
+ var url string
|
|
|
+ if len(saveData) > 0 {
|
|
|
+ dirs := "/static/xlsx/errReason/"
|
|
|
+ savePath := "./web/static/xlsx/errReason/"
|
|
|
+ templatePath := "./web/static/importUserErr.xlsx"
|
|
|
+ saveName := "导入失败数据"
|
|
|
+ url, err = SaveFile(saveData, templatePath, savePath, saveName, dirs)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("生成错误信息文件失败")
|
|
|
+ }
|
|
|
}
|
|
|
- return url, nil
|
|
|
-}
|
|
|
-func deepCopy(dst, src interface{}) error {
|
|
|
- var buf bytes.Buffer
|
|
|
- if err := gob.NewEncoder(&buf).Encode(src); err != nil {
|
|
|
- return err
|
|
|
+ returnRs = map[string]interface{}{
|
|
|
+ "recordCount": recordCount, // 识别数量
|
|
|
+ "successCount": successCount, // 成功数量
|
|
|
+ "errCount": 0, // 识别数量
|
|
|
+ "datalist": selectUser, // 读取到的用户id信息
|
|
|
+ "errUrl": url, // 失败的原因
|
|
|
}
|
|
|
- return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
|
|
|
+ return returnRs, nil
|
|
|
}
|