user.go 11 KB

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