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