Browse Source

Merge branch 'dev2.3.12' of http://192.168.3.207:8080/group3/qmx_admin into dev2.3.12

renjiaojiao 3 years ago
parent
commit
1ad4a5a400

+ 111 - 0
src/customerService/customController.go

@@ -1,8 +1,12 @@
 package customerService
 
+import "C"
 import (
 	"errors"
 	"github.com/baiy/Cadmin-server-go/admin"
+	"github.com/tealeg/xlsx"
+	"io/ioutil"
+	"log"
 	qutil "qfw/util"
 	"util"
 )
@@ -82,3 +86,110 @@ func SingleAdd(context *admin.Context) (interface{}, error) {
 	}
 	return nil, errors.New("添加失败,无此用户")
 }
+
+func ImportUser(context *admin.Context) (interface{}, error) {
+	returnRs := map[string]interface{}{
+		"recordCount":  0,               // 识别数量
+		"successCount": 0,               // 成功数量
+		"errCount":     0,               // 识别数量
+		"datalist":     []interface{}{}, // 读取到的用户id信息
+		"errUrl":       "",              // 失败的原因
+	}
+	recordCount, successCount, errCount := 0, 0, 0
+	mf, _, err := context.HttpRequest.FormFile("file")
+	if err != nil {
+		log.Println(err, "获取表格失败")
+		return returnRs, errors.New("获取表格失败")
+	}
+	binary, err2 := ioutil.ReadAll(mf)
+	if err2 != nil {
+		log.Println("读取数据流失败", err2)
+		return returnRs, errors.New("读取数据流失败")
+	}
+	file, err3 := xlsx.OpenBinary(binary)
+	if err3 != nil || file == nil {
+		log.Println("读取表格失败", err3)
+		return returnRs, errors.New("读取表格失败")
+	}
+
+	fileData, err4 := file.ToSlice()
+	if err4 != nil {
+		log.Println("表格转换失败:", err4)
+		return returnRs, errors.New("请上传格式为EXCEL文件,扩展名:xlsx")
+	}
+	if len(fileData) == 0 || len(fileData[0]) < 7 {
+		return returnRs, errors.New("请确认内容是否正确,至少需要有一条用户信息")
+	}
+
+	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
+		}
+		//  判断已选择用户“重复”导入,原因:重复导入;
+		if _, ok := userIds[v[0]]; ok {
+			reason := []interface{}{
+				v[0], "重复导入",
+			}
+			errCount++                          // 错误记录数量++
+			saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
+			continue
+		}
+		userIds[v[0]] = true // 追加到已存在的用户id中
+		tmpData := map[string]interface{}{"userId": v[0], "phone": phone}
+		successCount++                           // 成功的数量++
+		selectUser = append(selectUser, tmpData) // 追加选择的用户中
+
+	}
+	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("生成错误信息文件失败")
+		}
+	}
+	returnRs = map[string]interface{}{
+		"recordCount":  recordCount,  // 识别数量
+		"successCount": successCount, // 成功数量
+		"errCount":     0,            // 识别数量
+		"datalist":     selectUser,   // 读取到的用户id信息
+		"errUrl":       url,          // 失败的原因
+	}
+	return returnRs, nil
+}

+ 46 - 0
src/customerService/customService.go

@@ -3,7 +3,11 @@ package customerService
 import (
 	"config"
 	"errors"
+	"fmt"
+	"github.com/tealeg/xlsx"
 	"log"
+	"order"
+	"os"
 	qutil "qfw/util"
 	"strconv"
 	"strings"
@@ -211,3 +215,45 @@ func MyCustomerService(state, updateTimeStart, UpdateTimeEnd, CompanyName, Phone
 	}
 	log.Println(sql, sqlc)
 }
+
+func SaveFile(rdata [][]interface{}, templatePath string, savePath string, saveName string, domainPath string) (url string, err error) {
+	var xf *xlsx.File
+	if templatePath != "" {
+		xf, err = xlsx.OpenFile(templatePath)
+		if err != nil {
+			log.Println("fields file not foud", err.Error())
+			return "", err
+		}
+	}
+
+	sh := xf.Sheets[0]
+
+	for _, data := range rdata {
+		row := sh.AddRow()
+		for j := 0; j < len(data); j++ {
+			row.AddCell().SetValue(data[j])
+		}
+	}
+	now := time.Now()
+	t := fmt.Sprintf("%d%d%d", now.Year(), now.Month(), now.Day())
+	dir := savePath + t + "/"
+	dirs := domainPath + t + "/"
+	if b := order.PathExists(savePath); !b {
+		err1 := os.MkdirAll(dir, os.ModePerm)
+		if err1 != nil {
+			log.Println("mkdir err", dir)
+		}
+	}
+	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
+}

+ 1 - 0
src/customerService/router.go

@@ -75,6 +75,7 @@ func init() {
 		"Baiy.Cadmin.Message.messageSave":            MessageSave,
 		"Baiy.Cadmin.Message.customSendMsg":          CustomSendMsg,
 		"Baiy.Cadmin.Message.singleAdd":              SingleAdd,
+		"Baiy.Cadmin.Message.importUser":             ImportUser,
 	})
 	RegisterDispatch(SalesDispatcher)
 }

+ 1 - 2
src/users/userManage.go

@@ -802,11 +802,10 @@ func UpdateUserType(context *admin.Context) (interface{}, error) {
 			flag = MQFW.UpdateById("user", param.UserId, map[string]interface{}{"$unset": map[string]interface{}{"i_user_type": ""}})
 
 		} else {
-			flag = MQFW.UpdateById("user", param.UserId, map[string]interface{}{"$set": map[string]int{"i_user_type": param.UserType}})
+			flag = MQFW.Update("user", map[string]interface{}{"_id": m.StringTOBsonId(param.UserId)}, map[string]interface{}{"$set": map[string]interface{}{"i_user_type": param.UserType}}, false, false)
 
 		}
 		return flag
 	})
-
 	return flag, nil
 }

BIN
src/web/static/importUserErr.xlsx


BIN
src/web/static/importUsers.xlsx