customController.go 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package customerService
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "errors"
  5. "github.com/tealeg/xlsx"
  6. "io/ioutil"
  7. "log"
  8. "qmx_admin/src/config"
  9. "qmx_admin/src/otherPackage/baiy/Cadmin-server-go/admin"
  10. "qmx_admin/src/otherPackage/baiy/Cadmin-server-go/system/utils"
  11. )
  12. type customMsg struct {
  13. Id int `form:"id"` //消息id
  14. MsgType int `form:"msgType"` //消息类型
  15. Title string `form:"title"` //标题
  16. Content string `form:"content"` //内容
  17. Link string `form:"link"` //链接
  18. SendMode int `form:"sendMode"` //发送时效 发送模式 1- 定时 2-实时
  19. SendTime string `form:"sendTime"` //发送时间
  20. AndroidUrl string `form:"androidUrl"` //安卓连接
  21. IosUrl string `form:"iosUrl"` //ios连接
  22. WeChatUrl string `form:"weChatUrl"` //微信连接
  23. UserIds string `form:"userIds"` //发送用户id
  24. UserArr []map[string]interface{} `form:"userArr"` //已选择的用户信息集合
  25. UserAddWay int `form:"userAddWay"` //添加用户的方式
  26. TemplateName string `form:"templateName"` //模板名称 - 自定义消息
  27. MenuName string `form:"menuname"` // search:搜索 subscribe:订阅 box:百宝箱 me:我的 other:新的webview 消息中心 message
  28. }
  29. // CustomSendMsg 自定义发送消息
  30. func CustomSendMsg(context *admin.Context) (interface{}, error) {
  31. param := &customMsg{}
  32. err := context.Form(param)
  33. if err != nil {
  34. return nil, nil
  35. }
  36. //发送状态
  37. sendStatus := 1 //
  38. if param.SendMode == 2 {
  39. sendStatus = 4
  40. }
  41. status, err := CustomSendMsgService(param, sendStatus, context.User.Username, context.User.Id)
  42. return map[string]interface{}{
  43. "status": status,
  44. }, err
  45. }
  46. // MyCustomerList 自定义发送消息中我的客户列表
  47. func MyCustomerList(context *admin.Context) (interface{}, error) {
  48. param := new(struct {
  49. State string `form:"state"` //客户状态
  50. UpdateTimeStart string `form:"updateTimeStart"` //最近更新时间筛选开始时间
  51. UpdateTimeEnd string `form:"updateTimeEnd"` //最近更新时间筛选结束时间
  52. CompanyName string `form:"companyName"` //公司名称
  53. Phone string `form:"phone"`
  54. utils.Page
  55. })
  56. err := context.Form(param)
  57. if err != nil {
  58. return nil, err
  59. }
  60. adminPhone := context.User.Phone
  61. count, data := MyCustomerService(param.State, param.UpdateTimeStart, param.UpdateTimeEnd, param.CompanyName, param.Phone, adminPhone, param.Page.Offset, param.Page.PageSize)
  62. return map[string]interface{}{
  63. "lists": data,
  64. "total": count,
  65. }, nil
  66. }
  67. // SingleAdd 逐一添加
  68. func SingleAdd(context *admin.Context) (interface{}, error) {
  69. param := new(struct {
  70. UserId string `form:"userId"`
  71. })
  72. err := context.Form(param)
  73. if err != nil {
  74. return nil, err
  75. }
  76. //判断是否是剑鱼用户
  77. //userData := &map[string]interface{}{}
  78. userData, ok := config.MQFW.FindById("user", param.UserId, `"s_phone":1,"s_m_phone":1`)
  79. if userData != nil && len(*userData) > 0 && ok {
  80. phone := ""
  81. if common.ObjToString((*userData)["s_phone"]) != "" {
  82. phone = common.ObjToString((*userData)["s_phone"])
  83. } else {
  84. phone = common.ObjToString((*userData)["s_m_phone"])
  85. }
  86. return map[string]interface{}{
  87. "userId": param.UserId,
  88. "registePhone": phone,
  89. }, nil
  90. }
  91. return nil, errors.New("添加失败,无此用户")
  92. }
  93. func ImportUser(context *admin.Context) (interface{}, error) {
  94. returnRs := map[string]interface{}{
  95. "recordCount": 0, // 识别数量
  96. "successCount": 0, // 成功数量
  97. "errCount": 0, // 识别数量
  98. "datalist": []interface{}{}, // 读取到的用户id信息
  99. "errUrl": "", // 失败的原因
  100. }
  101. recordCount, successCount, errCount := 0, 0, 0
  102. mf, _, err := context.HttpRequest.FormFile("file")
  103. if err != nil {
  104. log.Println(err, "获取表格失败")
  105. return returnRs, errors.New("获取表格失败")
  106. }
  107. binary, err2 := ioutil.ReadAll(mf)
  108. if err2 != nil {
  109. log.Println("读取数据流失败", err2)
  110. return returnRs, errors.New("读取数据流失败")
  111. }
  112. file, err3 := xlsx.OpenBinary(binary)
  113. if err3 != nil || file == nil {
  114. log.Println("读取表格失败", err3)
  115. return returnRs, errors.New("读取表格失败")
  116. }
  117. fileData, err4 := file.ToSlice()
  118. if err4 != nil {
  119. log.Println("表格转换失败:", err4)
  120. return returnRs, errors.New("请上传格式为EXCEL文件,扩展名:xlsx")
  121. }
  122. if len(fileData) == 0 || len(fileData[0]) < 7 {
  123. return returnRs, errors.New("请确认内容是否正确,至少需要有一条用户信息")
  124. }
  125. userData := fileData[0][6:] // 截取有效id
  126. userIds := map[string]bool{} // 用于判断是否重复导入用户
  127. var saveData [][]interface{} // 用于写入错误原因文件的数据 数据结构: [[userId,errReason],...]
  128. var selectUser []map[string]interface{} // 用户选择的数据 数据结构[{userId:"1",phone:"18238182402"}...]
  129. //遍历用户id 验证数据有效性
  130. for _, v := range userData {
  131. recordCount++ // 记录读取到的条数
  132. // 判断是否超过2000条数据,原因:超过2000条以后的数据导入失败。
  133. if len(userIds) == 2000 {
  134. reason := []interface{}{
  135. v[0], "超过2000条以后的数据导入失败",
  136. }
  137. errCount++ // 错误记录数量++
  138. saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
  139. continue
  140. }
  141. // 判断用户ID错误,无此用户,原因:用户ID错误,无此用户;
  142. userRs, b := GetUserById(v[0])
  143. var phone string
  144. if b == true && userRs != nil && len(*userRs) > 0 {
  145. //获取用户手机号信息
  146. if common.ObjToString((*userRs)["s_phone"]) != "" {
  147. phone = common.ObjToString((*userRs)["s_phone"])
  148. } else {
  149. phone = common.ObjToString((*userRs)["s_m_phone"])
  150. }
  151. } else {
  152. log.Println("未查询到该用户:", v[0])
  153. reason := []interface{}{
  154. v[0], "用户ID错误,无此用户",
  155. }
  156. errCount++ // 错误记录数量++
  157. saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
  158. continue
  159. }
  160. // 判断已选择用户“重复”导入,原因:重复导入;
  161. if _, ok := userIds[v[0]]; ok {
  162. reason := []interface{}{
  163. v[0], "重复导入",
  164. }
  165. errCount++ // 错误记录数量++
  166. saveData = append(saveData, reason) // 保存到待生成错误文件的数据中
  167. continue
  168. }
  169. userIds[v[0]] = true // 追加到已存在的用户id中
  170. tmpData := map[string]interface{}{"userId": v[0], "registePhone": phone}
  171. successCount++ // 成功的数量++
  172. selectUser = append(selectUser, tmpData) // 追加选择的用户中
  173. }
  174. var url string
  175. if len(saveData) > 0 {
  176. dirs := "/static/xlsx/errReason/"
  177. savePath := "./web/static/xlsx/errReason/"
  178. templatePath := "./web/static/importUserErr.xlsx"
  179. saveName := "导入失败数据"
  180. url, err = SaveFile(saveData, templatePath, savePath, saveName, dirs)
  181. if err != nil {
  182. log.Println("生成错误信息文件失败")
  183. }
  184. }
  185. returnRs = map[string]interface{}{
  186. "recordCount": recordCount, // 识别数量
  187. "successCount": successCount, // 成功数量
  188. "errCount": errCount, // 失败数量
  189. "list": selectUser, // 读取到的用户id信息
  190. "errUrl": url, // 失败的原因
  191. }
  192. return returnRs, nil
  193. }
  194. // GetUserInfo 消息记录中获取发送用户的信息
  195. func GetUserInfo(context *admin.Context) (interface{}, error) {
  196. param := new(struct {
  197. MsgId int `form:"msgId"`
  198. utils.Page
  199. })
  200. err := context.Form(param)
  201. if err != nil {
  202. return nil, err
  203. }
  204. userData, total := FindUserInfo(param.MsgId, param.Page.Offset, param.Page.PageSize)
  205. return map[string]interface{}{
  206. "lists": userData,
  207. "total": total,
  208. }, nil
  209. }
  210. func GetUserIds(context *admin.Context) (interface{}, error) {
  211. param := new(struct {
  212. MsgId int `form:"msgId"`
  213. })
  214. err := context.Form(param)
  215. if err != nil {
  216. return nil, err
  217. }
  218. userData := FindUserIds(param.MsgId)
  219. return userData, nil
  220. }