package customerService import ( "app.yhyue.com/moapp/jybase/common" "errors" "github.com/tealeg/xlsx" "io/ioutil" "log" "qmx_admin/src/config" "qmx_admin/src/otherPackage/baiy/Cadmin-server-go/admin" "qmx_admin/src/otherPackage/baiy/Cadmin-server-go/system/utils" ) type customMsg struct { Id int `form:"id"` //消息id MsgType int `form:"msgType"` //消息类型 Title string `form:"title"` //标题 Content string `form:"content"` //内容 Link string `form:"link"` //链接 SendMode int `form:"sendMode"` //发送时效 发送模式 1- 定时 2-实时 SendTime string `form:"sendTime"` //发送时间 AndroidUrl string `form:"androidUrl"` //安卓连接 IosUrl string `form:"iosUrl"` //ios连接 WeChatUrl string `form:"weChatUrl"` //微信连接 UserIds string `form:"userIds"` //发送用户id UserArr []map[string]interface{} `form:"userArr"` //已选择的用户信息集合 UserAddWay int `form:"userAddWay"` //添加用户的方式 TemplateName string `form:"templateName"` //模板名称 - 自定义消息 MenuName string `form:"menuname"` // search:搜索 subscribe:订阅 box:百宝箱 me:我的 other:新的webview 消息中心 message } // CustomSendMsg 自定义发送消息 func CustomSendMsg(context *admin.Context) (interface{}, error) { param := &customMsg{} err := context.Form(param) if err != nil { return nil, nil } //发送状态 sendStatus := 1 // if param.SendMode == 2 { sendStatus = 4 } status, err := CustomSendMsgService(param, sendStatus, context.User.Username, context.User.Id) return map[string]interface{}{ "status": status, }, err } // MyCustomerList 自定义发送消息中我的客户列表 func MyCustomerList(context *admin.Context) (interface{}, error) { param := new(struct { State string `form:"state"` //客户状态 UpdateTimeStart string `form:"updateTimeStart"` //最近更新时间筛选开始时间 UpdateTimeEnd string `form:"updateTimeEnd"` //最近更新时间筛选结束时间 CompanyName string `form:"companyName"` //公司名称 Phone string `form:"phone"` utils.Page }) err := context.Form(param) if err != nil { return nil, err } adminPhone := context.User.Phone count, data := MyCustomerService(param.State, param.UpdateTimeStart, param.UpdateTimeEnd, param.CompanyName, param.Phone, adminPhone, param.Page.Offset, param.Page.PageSize) return map[string]interface{}{ "lists": data, "total": count, }, nil } // SingleAdd 逐一添加 func SingleAdd(context *admin.Context) (interface{}, error) { param := new(struct { UserId string `form:"userId"` }) err := context.Form(param) if err != nil { return nil, err } //判断是否是剑鱼用户 //userData := &map[string]interface{}{} userData, ok := config.MQFW.FindById("user", param.UserId, `"s_phone":1,"s_m_phone":1`) if userData != nil && len(*userData) > 0 && ok { phone := "" if common.ObjToString((*userData)["s_phone"]) != "" { phone = common.ObjToString((*userData)["s_phone"]) } else { phone = common.ObjToString((*userData)["s_m_phone"]) } return map[string]interface{}{ "userId": param.UserId, "registePhone": phone, }, nil } 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 验证数据有效性 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 common.ObjToString((*userRs)["s_phone"]) != "" { phone = common.ObjToString((*userRs)["s_phone"]) } else { phone = common.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], "registePhone": 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": errCount, // 失败数量 "list": selectUser, // 读取到的用户id信息 "errUrl": url, // 失败的原因 } return returnRs, nil } // GetUserInfo 消息记录中获取发送用户的信息 func GetUserInfo(context *admin.Context) (interface{}, error) { param := new(struct { MsgId int `form:"msgId"` utils.Page }) err := context.Form(param) if err != nil { return nil, err } userData, total := FindUserInfo(param.MsgId, param.Page.Offset, param.Page.PageSize) return map[string]interface{}{ "lists": userData, "total": total, }, nil } func GetUserIds(context *admin.Context) (interface{}, error) { param := new(struct { MsgId int `form:"msgId"` }) err := context.Form(param) if err != nil { return nil, err } userData := FindUserIds(param.MsgId) return userData, nil }