Ver código fonte

wip:发送消息导入用户

fuwencai 3 anos atrás
pai
commit
9140dfa553

+ 46 - 25
src/customerService/customController.go

@@ -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
 }

+ 9 - 1
src/customerService/customService.go

@@ -243,8 +243,16 @@ func SaveFile(rdata [][]interface{}, templatePath string, savePath string, saveN
 			log.Println("mkdir err", dir)
 		}
 	}
-	fileName := saveName + t + ".xlsx"
+	t2 := fmt.Sprintf("%d%d%d%d%d%d", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
+
+	fileName := saveName + t2 + ".xlsx"
 	err = xf.Save(dir + fileName)
 	url = qutil.ObjToString(config.SysConfigs.Domain) + dirs + fileName
 	return url, nil
 }
+
+func GetUserById(id string) (userData *map[string]interface{}, ok bool) {
+	userData, ok = util.MQFW.FindById("user", id, `phone,s_phone`)
+	//log.Println(userData, ok)
+	return userData, ok
+}

BIN
src/web/static/importUserErr.xlsx