user.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package user
  2. import (
  3. "errors"
  4. userReq "hongze/hongze_yb/models/request/user"
  5. "hongze/hongze_yb/models/tables/chart_permission"
  6. "hongze/hongze_yb/models/tables/company"
  7. "hongze/hongze_yb/models/tables/company_product"
  8. "hongze/hongze_yb/models/tables/rddp/msg_code"
  9. "hongze/hongze_yb/models/tables/wx_user"
  10. "hongze/hongze_yb/models/tables/yb_apply_record"
  11. "hongze/hongze_yb/services"
  12. companyService "hongze/hongze_yb/services/company"
  13. "hongze/hongze_yb/services/user"
  14. "hongze/hongze_yb/utils"
  15. "strings"
  16. "time"
  17. )
  18. // SendSmsCode 发送手机短信
  19. func SendSmsCode(openid, mobile, areaNum string) (err error, errMsg string) {
  20. if mobile == "" {
  21. err = errors.New("请输入手机号")
  22. return
  23. }
  24. msgCode := utils.GetRandDigit(4)
  25. var result bool
  26. if areaNum == "86" || areaNum == "" || areaNum == "0" {
  27. //国内的短信
  28. result = services.SendSmsCode(mobile, msgCode)
  29. } else {
  30. //国际短信
  31. result = services.SendSmsCodeGj(mobile, msgCode, areaNum)
  32. }
  33. //发送成功
  34. if result {
  35. item := &msg_code.MsgCode{
  36. OpenID: openid,
  37. Mobile: mobile,
  38. Code: msgCode,
  39. ExpiredIn: time.Now().Add(15 * time.Minute).Unix(),
  40. Enabled: 1,
  41. CreatedTime: time.Time{},
  42. LastUpdatedTime: time.Time{},
  43. }
  44. err = item.Create()
  45. } else {
  46. err = errors.New("发送失败,Err:" + err.Error())
  47. }
  48. return
  49. }
  50. // SendEmailCode 发送邮件
  51. func SendEmailCode(openid, email string) (err error, errMsg string) {
  52. if email == "" {
  53. err = errors.New("请输入邮箱地址")
  54. return
  55. }
  56. if !utils.ValidateEmailFormatat(email) {
  57. err = errors.New("邮箱格式错误,请重新输入")
  58. return
  59. }
  60. msgCode := utils.GetRandDigit(4)
  61. content := "尊敬的用户:</br>您好,感谢您使用弘则研究,您正在进行邮箱验证,本次请求的验证码为:" + msgCode + "(为了保障您账号的安全性,请在15分钟内完成验证。)</br>弘则研究团队 </br>" + time.Now().Format(utils.FormatDateCN)
  62. title := "弘则研究登陆验证"
  63. //发送邮件
  64. result, err := services.SendEmailByHz(title, content, email)
  65. if result {
  66. item := &msg_code.MsgCode{
  67. OpenID: openid,
  68. Mobile: email,
  69. Code: msgCode,
  70. ExpiredIn: time.Now().Add(15 * time.Minute).Unix(),
  71. Enabled: 1,
  72. CreatedTime: time.Time{},
  73. LastUpdatedTime: time.Time{},
  74. }
  75. err = item.Create()
  76. } else {
  77. err = errors.New("发送失败,Err:" + err.Error())
  78. }
  79. return
  80. }
  81. type CompanyPermission struct {
  82. Name string `json:"name" description:"分类名称"`
  83. PermissionList []PermissionList `json:"permission_list" description:"权限列表"`
  84. }
  85. type PermissionList struct {
  86. Name string `json:"name" description:"权限名称"`
  87. StartDate time.Time `json:"start_date" description:"开始日期"`
  88. EndDate time.Time `json:"end_date" description:"结束日期"`
  89. Status string `json:"status" description:"状态"`
  90. }
  91. type Detail struct {
  92. CompanyName string `json:"company_name" description:"客户名称(公司名称)"`
  93. Status string `json:"status" description:"客户状态"`
  94. RealName string `json:"real_name" description:"用户名称"`
  95. Mobile string `json:"mobile" description:"手机号"`
  96. Email string `json:"email" description:"邮箱"`
  97. PermissionList []CompanyPermission `json:"permission_list" description:"权限列表"`
  98. }
  99. // GetUserInfo 获取用户我的页面详情数据
  100. func GetUserInfo(userInfo user.UserInfo) (userDetail Detail, err error, errMsg string) {
  101. list := make([]CompanyPermission, 0)
  102. companyName := userInfo.Note
  103. status := ``
  104. if userInfo.CompanyID > 1 {
  105. companyInfo, tmpErr := company.GetByCompanyId(userInfo.CompanyID)
  106. if tmpErr != nil {
  107. err = tmpErr
  108. if tmpErr == utils.ErrNoRow {
  109. err = errors.New("找不到该客户")
  110. errMsg = "找不到该客户"
  111. return
  112. }
  113. errMsg = "系统异常"
  114. return
  115. }
  116. companyName = companyInfo.CompanyName
  117. companyProduct, tmpErr := company_product.GetByCompany2ProductId(userInfo.CompanyID, 1)
  118. //如果有ficc权限,那么就去查询相关权限
  119. if tmpErr == nil {
  120. status = companyProduct.Status //产品状态
  121. //获取所有的权限分类列表
  122. allPermissionList, tmpErr := companyService.GetPermissionListByProductId(1)
  123. if tmpErr != nil {
  124. err = tmpErr
  125. return
  126. }
  127. permissionClassMap := make(map[int]*chart_permission.ChartPermission)
  128. for _, chartPermission := range allPermissionList {
  129. permissionClassMap[int(chartPermission.ChartPermissionID)] = chartPermission
  130. }
  131. // 获取权限列表
  132. permissionList, tmpErr := companyService.GetValidPermissionByCompany2ProductId(userInfo.CompanyID, 1)
  133. if tmpErr != nil {
  134. err = tmpErr
  135. return
  136. }
  137. permissionMap := make(map[string][]PermissionList)
  138. for _, permission := range permissionList {
  139. chartPermission, ok := permissionClassMap[permission.ChartPermissionID]
  140. if ok {
  141. tmpPermission := PermissionList{
  142. Name: chartPermission.ChartPermissionName,
  143. StartDate: permission.StartDate,
  144. EndDate: permission.EndDate,
  145. Status: permission.Status,
  146. }
  147. if tmpPermissionList, ok2 := permissionMap[chartPermission.ClassifyName]; ok2 {
  148. permissionMap[chartPermission.ClassifyName] = append(tmpPermissionList, tmpPermission)
  149. } else {
  150. tmpPermissionList := make([]PermissionList, 0)
  151. permissionMap[chartPermission.ClassifyName] = append(tmpPermissionList, tmpPermission)
  152. }
  153. }
  154. }
  155. for name, tmpPermissionList := range permissionMap {
  156. list = append(list, CompanyPermission{
  157. Name: name,
  158. PermissionList: tmpPermissionList,
  159. })
  160. }
  161. }
  162. }
  163. //if Note
  164. userDetail = Detail{
  165. CompanyName: companyName, //客户名称(公司名称)
  166. Status: status, //产品状态
  167. RealName: userInfo.RealName,
  168. Mobile: userInfo.Mobile,
  169. Email: userInfo.Email,
  170. PermissionList: list, //权限列表
  171. }
  172. return
  173. }
  174. type Record struct {
  175. BusinessCardURL string `json:"business_card_url" description:"名片"`
  176. RealName string `json:"real_name" description:"姓名"`
  177. CompanyName string `json:"company_name" description:"客户备注的公司名称"`
  178. Mobile string `json:"mobile" description:"手机号"`
  179. }
  180. // GetLastApplyInfo 获取最近的一套申请记录
  181. func GetLastApplyInfo(userId int) (record Record, err error) {
  182. recordInfo, err := yb_apply_record.GetLastNotOpRecordByUserId(userId)
  183. if err != nil {
  184. if err == utils.ErrNoRow {
  185. err = nil
  186. }
  187. return
  188. }
  189. record = Record{
  190. BusinessCardURL: recordInfo.BusinessCardURL,
  191. RealName: recordInfo.RealName,
  192. CompanyName: recordInfo.CompanyName,
  193. Mobile: recordInfo.Mobile,
  194. }
  195. return
  196. }
  197. // Apply 客户申请
  198. func Apply(userId int, companyId int64, mobile, email string, applyInfo userReq.ApplyReq) (ybApplyRecord *yb_apply_record.YbApplyRecord, err error) {
  199. sellerName := ``
  200. status := `潜在客户`
  201. companyName := applyInfo.CompanyName
  202. // 联系人信息
  203. wxUserInfo, err := wx_user.GetByUserId(userId)
  204. if err != nil {
  205. return
  206. }
  207. if companyId > 1 {
  208. //客户信息
  209. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  210. if tmpErr != nil {
  211. err = tmpErr
  212. return
  213. }
  214. companyName = companyInfo.CompanyName
  215. //客户产品权限
  216. companyProductList, tmpErr := company_product.GetListByCompanyId(companyId)
  217. if tmpErr != nil {
  218. err = tmpErr
  219. return
  220. }
  221. sellerNameList := make([]string, 0)
  222. statusList := make([]string, 0)
  223. for _, companyProductInfo := range companyProductList {
  224. if companyProductInfo.ProductID == 2 && status == "潜在客户" {
  225. status = "权益客户"
  226. }
  227. if companyProductInfo.ProductID == 1 {
  228. sellerName = companyProductInfo.SellerName
  229. status = companyProductInfo.Status
  230. }
  231. }
  232. if len(sellerNameList) > 0 && len(statusList) > 0 {
  233. sellerName = strings.Join(sellerNameList, ",")
  234. status = strings.Join(statusList, ",")
  235. }
  236. }
  237. ybApplyRecord = &yb_apply_record.YbApplyRecord{
  238. UserID: userId,
  239. BusinessCardURL: applyInfo.BusinessCardUrl,
  240. RealName: applyInfo.RealName,
  241. CompanyName: applyInfo.CompanyName,
  242. Mobile: mobile,
  243. Email: email,
  244. Permission: applyInfo.Permission,
  245. SellerName: sellerName,
  246. Status: status,
  247. CompanyIDPay: int(companyId),
  248. CompanyNamePay: companyName,
  249. CreateTime: time.Now(),
  250. }
  251. err = ybApplyRecord.Create()
  252. if err != nil {
  253. return
  254. }
  255. // 修改客户信息
  256. wxUserInfo.RealName = applyInfo.RealName
  257. wxUserInfo.Note = applyInfo.CompanyName
  258. wxUserInfo.IsNote = 1
  259. applyMethod := wxUserInfo.ApplyMethod //0:未申请,1:已付费客户申请试用,2:非客户申请试用
  260. applyMethod = 2
  261. if sellerName != "" {
  262. applyMethod = 1
  263. }
  264. wxUserInfo.ApplyMethod = applyMethod
  265. _ = wxUserInfo.Update([]string{"RealName", "Note", "IsNote", "ApplyMethod"})
  266. return
  267. }
  268. // GetUserTabBar 获取最近的一套申请记录
  269. func GetUserTabBar(userInfo user.UserInfo) (list []string, err error) {
  270. //buy,report,chart,activity,user
  271. list = []string{"activity", "user"}
  272. companyProduct, err := company_product.GetByCompany2ProductId(userInfo.CompanyID, 1)
  273. if err != nil {
  274. if err == utils.ErrNoRow {
  275. err = nil
  276. }
  277. return
  278. }
  279. if strings.Contains("永续,正式,试用", companyProduct.Status) {
  280. list = append(list, "report", "chart")
  281. }
  282. if strings.Contains("永续,正式", companyProduct.Status) {
  283. list = append(list, "buy")
  284. }
  285. return
  286. }