scrm-go

members_controller.go 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. package members
  2. import (
  3. base_ctl "SCRM/controllers"
  4. "SCRM/enums"
  5. "SCRM/models"
  6. "SCRM/service/member_service"
  7. "SCRM/utils"
  8. "reflect"
  9. "time"
  10. "encoding/json"
  11. "github.com/astaxie/beego"
  12. )
  13. func MemberCtlRegistRouters() {
  14. beego.Router("/api/members", &MembersAPIController{}, "get:GetMembers")
  15. beego.Router("/api/member/create", &MembersAPIController{}, "Post:CreateMember")
  16. }
  17. type MembersAPIController struct {
  18. base_ctl.BaseAuthAPIController
  19. }
  20. func (c *MembersAPIController) GetMembers() {
  21. page, _ := c.GetInt64("page", 1)
  22. limit, _ := c.GetInt64("limit", 10)
  23. startTime := c.GetString("start_time", "")
  24. endTime := c.GetString("end_time", "")
  25. searchKey := c.GetString("search", "")
  26. level, _ := c.GetInt64("level", 0)
  27. source, _ := c.GetInt64("source", 0)
  28. tag, _ := c.GetInt64("tag", 0)
  29. init, _ := c.GetInt64("init", 0)
  30. if page <= 0 {
  31. page = 1
  32. }
  33. if limit <= 0 {
  34. limit = 10
  35. }
  36. adminUserInfo := c.GetAdminUserInfo()
  37. timeLayout := "2006-01-02 15:04:05"
  38. var isStartTime bool
  39. var theStartTIme int64
  40. if len(startTime) > 0 {
  41. theTime, err := utils.ParseTimeStringToTime(timeLayout, startTime+" 00:00:00")
  42. if err != nil {
  43. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "开始时间错误")
  44. return
  45. }
  46. isStartTime = true
  47. theStartTIme = theTime.Unix()
  48. }
  49. var isEndTime bool
  50. var theEndtTIme int64
  51. if len(endTime) > 0 {
  52. theTime, err := utils.ParseTimeStringToTime(timeLayout, endTime+" 23:59:59")
  53. if err != nil {
  54. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "结束时间错误")
  55. return
  56. }
  57. isEndTime = true
  58. theEndtTIme = theTime.Unix()
  59. }
  60. members, total, err := member_service.GetMemberList(adminUserInfo.CurrentOrgId, page, limit, level, source, tag, theStartTIme, theEndtTIme, isStartTime, isEndTime, searchKey)
  61. if err != nil {
  62. c.ServeFailJsonSend(enums.ErrorCodeDataException, "获取会员列表失败")
  63. return
  64. }
  65. returnData := make(map[string]interface{}, 0)
  66. if init == 1 {
  67. cards, err := member_service.GetCardList(adminUserInfo.CurrentOrgId)
  68. if err != nil {
  69. c.ServeFailJsonSend(enums.ErrorCodeDataException, "获取会员卡列表失败")
  70. return
  71. }
  72. returnData["cards"] = cards
  73. tags, err := member_service.GetTagList(adminUserInfo.CurrentOrgId)
  74. if err != nil {
  75. c.ServeFailJsonSend(enums.ErrorCodeDataException, "获取标签列表失败")
  76. return
  77. }
  78. returnData["tags"] = tags
  79. illness, err := member_service.GetIllnessList()
  80. if err != nil {
  81. c.ServeFailJsonSend(enums.ErrorCodeDataException, "获取病种列表失败")
  82. return
  83. }
  84. returnData["illness"] = illness
  85. }
  86. returnData["members"] = members
  87. returnData["total"] = total
  88. c.ServeSuccessJSON(returnData)
  89. return
  90. }
  91. func (c *MembersAPIController) CreateMember() {
  92. adminUserInfo := c.GetAdminUserInfo()
  93. timeNow := time.Now().Unix()
  94. dataBody := make(map[string]interface{}, 0)
  95. err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
  96. if err != nil {
  97. utils.ErrorLog(err.Error())
  98. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误")
  99. return
  100. }
  101. var member member_service.Members
  102. if dataBody["name"] == nil || reflect.TypeOf(dataBody["name"]).String() != "string" {
  103. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:姓名")
  104. return
  105. }
  106. name, _ := dataBody["name"].(string)
  107. if len(name) == 0 {
  108. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "姓名不能为空")
  109. return
  110. }
  111. member.Name = name
  112. if dataBody["mobile"] == nil || reflect.TypeOf(dataBody["mobile"]).String() != "string" {
  113. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:手机号")
  114. return
  115. }
  116. mobile, _ := dataBody["mobile"].(string)
  117. if len(mobile) == 0 {
  118. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "手机号不能为空")
  119. return
  120. }
  121. if !utils.CheckMobile(mobile) {
  122. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "手机号格式不正确")
  123. return
  124. }
  125. member.Mobile = mobile
  126. if dataBody["gender"] == nil || reflect.TypeOf(dataBody["gender"]).String() != "float64" {
  127. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:性别")
  128. return
  129. }
  130. gender := int64(dataBody["gender"].(float64))
  131. if gender != 1 && gender != 2 {
  132. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "性别选择不正确")
  133. return
  134. }
  135. member.Gender = gender
  136. if dataBody["birthday"] == nil || reflect.TypeOf(dataBody["birthday"]).String() != "string" {
  137. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:生日")
  138. return
  139. }
  140. birthday, _ := dataBody["birthday"].(string)
  141. if len(birthday) == 0 {
  142. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "生日格式不正确")
  143. return
  144. }
  145. timeLayout := "2006-01-02 15:04:05"
  146. theTime, err := utils.ParseTimeStringToTime(timeLayout, birthday+" 00:00:00")
  147. if err != nil {
  148. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "生日格式不正确")
  149. return
  150. }
  151. member.Birthday = theTime.Unix()
  152. if dataBody["province_id"] == nil || reflect.TypeOf(dataBody["province_id"]).String() != "float64" {
  153. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:地区(省)")
  154. return
  155. }
  156. provinceID := int64(dataBody["province_id"].(float64))
  157. if provinceID <= 0 {
  158. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择地区")
  159. return
  160. }
  161. member.ProvinceId = provinceID
  162. if dataBody["city_id"] == nil || reflect.TypeOf(dataBody["city_id"]).String() != "float64" {
  163. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:地区(市)")
  164. return
  165. }
  166. cityID := int64(dataBody["city_id"].(float64))
  167. if cityID <= 0 {
  168. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择地区")
  169. return
  170. }
  171. member.CityId = cityID
  172. if dataBody["district_id"] == nil || reflect.TypeOf(dataBody["district_id"]).String() != "float64" {
  173. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:地区(区/县)")
  174. return
  175. }
  176. districtID := int64(dataBody["district_id"].(float64))
  177. if districtID <= 0 {
  178. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择地区")
  179. return
  180. }
  181. member.DistrictId = districtID
  182. if dataBody["illness"] == nil || reflect.TypeOf(dataBody["illness"]).String() != "[]interface {}" {
  183. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:病种")
  184. return
  185. }
  186. illnessInters := dataBody["illness"].([]interface{})
  187. if len(illnessInters) <= 0 {
  188. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择病种")
  189. return
  190. }
  191. member.Illness = make([]*member_service.CustomerIllness, 0)
  192. for _, illnessInter := range illnessInters {
  193. id := int64(illnessInter.(float64))
  194. var illItem member_service.CustomerIllness
  195. illItem.UserOrgId = adminUserInfo.CurrentOrgId
  196. illItem.IllnessId = id
  197. illItem.Status = 1
  198. illItem.UpdatedTime = timeNow
  199. illItem.CreatedTime = timeNow
  200. member.Illness = append(member.Illness, &illItem)
  201. }
  202. if dataBody["ill_date"] == nil || reflect.TypeOf(dataBody["ill_date"]).String() != "string" {
  203. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:患病时间")
  204. return
  205. }
  206. illDate, _ := dataBody["ill_date"].(string)
  207. if len(illDate) == 0 {
  208. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "患病时间格式不正确")
  209. return
  210. }
  211. illDateTime, err := utils.ParseTimeStringToTime(timeLayout, illDate+" 00:00:00")
  212. if err != nil {
  213. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "患病时间格式不正确")
  214. return
  215. }
  216. member.IllDate = illDateTime.Unix()
  217. if dataBody["treat_type"] == nil || reflect.TypeOf(dataBody["treat_type"]).String() != "float64" {
  218. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:治疗方式")
  219. return
  220. }
  221. treatType := int64(dataBody["treat_type"].(float64))
  222. if treatType <= 0 {
  223. c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择治疗方式")
  224. return
  225. }
  226. member.TreatType = treatType
  227. if dataBody["tags"] != nil && reflect.TypeOf(dataBody["tags"]).String() == "[]interface {}" {
  228. tagsInters := dataBody["tags"].([]interface{})
  229. if len(tagsInters) > 0 {
  230. member.UserTags = make([]*models.UserTagLinks, 0)
  231. for _, tagsInter := range tagsInters {
  232. id := int64(tagsInter.(float64))
  233. var tagItem models.UserTagLinks
  234. tagItem.TagId = id
  235. tagItem.UserOrgId = adminUserInfo.CurrentOrgId
  236. tagItem.Status = 1
  237. tagItem.UpdatedTime = timeNow
  238. tagItem.CreatedTime = timeNow
  239. member.UserTags = append(member.UserTags, &tagItem)
  240. }
  241. }
  242. }
  243. if dataBody["remark"] != nil && reflect.TypeOf(dataBody["remark"]).String() == "string" {
  244. remark, _ := dataBody["remark"].(string)
  245. if len(remark) > 0 {
  246. member.Remark = remark
  247. }
  248. }
  249. if dataBody["avatar"] != nil && reflect.TypeOf(dataBody["avatar"]).String() == "string" {
  250. avatar, _ := dataBody["avatar"].(string)
  251. if len(avatar) > 0 {
  252. member.Avatar = avatar
  253. }
  254. }
  255. customer, err := member_service.GetCustomerByMobile(adminUserInfo.CurrentOrgId, member.Mobile)
  256. if err != nil {
  257. c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员失败:("+err.Error()+")")
  258. return
  259. }
  260. if customer != nil {
  261. c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员失败:(已经存在该手机号的客户)")
  262. return
  263. }
  264. member.UserOrgId = adminUserInfo.CurrentOrgId
  265. member.Status = 1
  266. member.CreatedTime = timeNow
  267. member.UpdatedTime = timeNow
  268. member.Sources = 7
  269. user, err := member_service.GetUserByMobile(member.Mobile)
  270. if err != nil {
  271. c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员失败:("+err.Error()+")")
  272. return
  273. }
  274. if user != nil {
  275. member.UserId = user.ID
  276. err = member_service.CreateMember(&member)
  277. if err != nil {
  278. c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员失败:("+err.Error()+")")
  279. return
  280. }
  281. } else {
  282. var userData models.User
  283. userData.Avatar = member.Avatar
  284. userData.AvatarThumb = member.Avatar
  285. userData.Username = member.Name
  286. userData.Remarkname = member.Name
  287. userData.Mobile = member.Mobile
  288. userData.Gender = member.Gender
  289. userData.ProvinceId = member.ProvinceId
  290. userData.CityId = member.CityId
  291. userData.Address = member.Address
  292. userData.Birthday = member.Birthday
  293. userData.TreatType = member.TreatType
  294. userData.Relationship = member.Relationship
  295. userData.IllnessId = member.Illness[0].IllnessId
  296. userData.Sources = member.Sources
  297. userData.Status = 1
  298. userData.CreatedTime = timeNow
  299. userData.UpdatedTime = timeNow
  300. err = member_service.CreateMemberWithUser(&member, &userData)
  301. if err != nil {
  302. c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员失败:("+err.Error()+")")
  303. return
  304. }
  305. }
  306. returnData := make(map[string]interface{}, 0)
  307. returnData["member"] = member
  308. c.ServeSuccessJSON(returnData)
  309. return
  310. }