customer.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. package controller
  2. import (
  3. "cold-delivery/app/admin/model"
  4. "cold-delivery/app/admin/service"
  5. "cold-delivery/app/admin/service/dto"
  6. "cold-delivery/common/actions"
  7. "cold-delivery/common/middleware/handler"
  8. "cold-delivery/conf"
  9. "errors"
  10. "fmt"
  11. "github.com/gin-gonic/gin"
  12. "github.com/gin-gonic/gin/binding"
  13. "go.uber.org/zap"
  14. "gogs.baozhida.cn/zoie/OAuth-core/api"
  15. "gogs.baozhida.cn/zoie/OAuth-core/pkg"
  16. "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
  17. _ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
  18. "gogs.baozhida.cn/zoie/OAuth-core/pkg/sms"
  19. "golang.org/x/crypto/bcrypt"
  20. "net/http"
  21. )
  22. // Customer 定义客户控制器
  23. type Customer struct {
  24. api.Api
  25. }
  26. // GetPage 获取客户列表
  27. // @Summary 获取客户列表
  28. // @Description 获取客户列表
  29. // @Tags 客户
  30. // @Param username query string false "客户名"
  31. // @Param pageSize query int false "页条数"
  32. // @Param page query int false "页码"
  33. // @Success 200 {object} response.Response{data=response.Page{list=[]model.SysUser}} "{"code": 200, "data": [...]}"
  34. // @Router /api/customer [get]
  35. // @Security Bearer
  36. func (e Customer) GetPage(c *gin.Context) {
  37. s := service.Customer{}
  38. req := dto.CustomerGetPageReq{}
  39. err := e.MakeContext(c).
  40. MakeOrm().
  41. Bind(&req, binding.Query).
  42. MakeService(&s.Service).
  43. Errors
  44. if err != nil {
  45. e.Logger.Error(err)
  46. e.Error(500, err, err.Error())
  47. return
  48. }
  49. //数据权限检查
  50. p := actions.GetPermissionFromContext(c)
  51. list := make([]model.SysUser, 0)
  52. var count int64
  53. err = s.GetPage(&req, p, &list, &count)
  54. if err != nil {
  55. e.Error(500, err, err.Error())
  56. return
  57. }
  58. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  59. }
  60. // Get 通过id获取客户
  61. // @Summary 通过id获取客户
  62. // @Description 通过id获取客户
  63. // @Tags 客户
  64. // @Param id path int true "客户id"
  65. // @Success 200 {object} response.Response{data=model.SysUser} "{"code": 200, "data": [...]}"
  66. // @Router /api/customer/{id} [get]
  67. // @Security Bearer
  68. func (e Customer) Get(c *gin.Context) {
  69. s := service.Customer{}
  70. req := dto.CustomerGetReq{}
  71. err := e.MakeContext(c).
  72. MakeOrm().
  73. Bind(&req, nil).
  74. MakeService(&s.Service).
  75. Errors
  76. if err != nil {
  77. e.Logger.Error(err)
  78. e.Error(500, err, err.Error())
  79. return
  80. }
  81. //数据权限检查
  82. //p := actions.GetPermissionFromContext(c)
  83. var object model.SysUser
  84. err = s.Get(&req, nil, &object)
  85. if err != nil {
  86. e.Error(http.StatusUnprocessableEntity, err, err.Error())
  87. return
  88. }
  89. e.OK(object, "查询成功")
  90. }
  91. // Insert 创建客户
  92. // @Summary 创建客户
  93. // @Description 创建客户
  94. // @Tags 客户
  95. // @Accept application/json
  96. // @Product application/json
  97. // @Param data body dto.CustomerInsertReq true "客户数据"
  98. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  99. // @Router /api/customer [post]
  100. // @Security Bearer
  101. func (e Customer) Insert(c *gin.Context) {
  102. s := service.Customer{}
  103. req := dto.CustomerInsertReq{}
  104. err := e.MakeContext(c).
  105. MakeOrm().
  106. Bind(&req, binding.JSON).
  107. MakeService(&s.Service).
  108. Errors
  109. if err != nil {
  110. e.Logger.Error(err)
  111. e.Error(500, err, err.Error())
  112. return
  113. }
  114. //数据权限检查
  115. p := actions.GetPermissionFromContext(c)
  116. if p.DeptId == 0 {
  117. err = errors.New("无权添加,请联系管理员!")
  118. e.Error(500, err, err.Error())
  119. return
  120. }
  121. // 设置创建人
  122. req.SetCreateBy(user.GetUserId(c))
  123. req.SetDeptId(p.DeptId)
  124. err = s.Insert(&req)
  125. if err != nil {
  126. e.Error(500, err, err.Error())
  127. return
  128. }
  129. e.OK(req.GetId(), "创建成功")
  130. }
  131. // Update 修改客户数据
  132. // @Summary 修改客户数据
  133. // @Description 修改客户数据
  134. // @Tags 客户
  135. // @Accept application/json
  136. // @Product application/json
  137. // @Param data body dto.CustomerUpdateReq true "body"
  138. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  139. // @Router /api/customer [put]
  140. // @Security Bearer
  141. func (e Customer) Update(c *gin.Context) {
  142. s := service.Customer{}
  143. req := dto.CustomerUpdateReq{}
  144. err := e.MakeContext(c).
  145. MakeOrm().
  146. Bind(&req).
  147. MakeService(&s.Service).
  148. Errors
  149. if err != nil {
  150. e.Logger.Error(err)
  151. e.Error(500, err, err.Error())
  152. return
  153. }
  154. req.SetUpdateBy(user.GetUserId(c))
  155. //数据权限检查
  156. //p := actions.GetPermissionFromContext(c)
  157. err = s.Update(&req, nil)
  158. if err != nil {
  159. e.Error(500, err, err.Error())
  160. return
  161. }
  162. e.OK(req.GetId(), "更新成功")
  163. }
  164. // Delete 通过id删除客户数据
  165. // @Summary 通过id删除客户数据
  166. // @Description 通过id删除客户数据
  167. // @Tags 客户
  168. // @Param data body dto.CustomerDeleteReq true "body"
  169. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  170. // @Router /api/customer [delete]
  171. // @Security Bearer
  172. func (e Customer) Delete(c *gin.Context) {
  173. s := service.Customer{}
  174. req := dto.CustomerDeleteReq{}
  175. err := e.MakeContext(c).
  176. MakeOrm().
  177. Bind(&req, binding.JSON).
  178. MakeService(&s.Service).
  179. Errors
  180. if err != nil {
  181. e.Logger.Error(err)
  182. e.Error(500, err, err.Error())
  183. return
  184. }
  185. userId := user.GetUserId(c)
  186. if userId == req.Id {
  187. err := errors.New("禁止删除自己")
  188. e.Error(500, err, err.Error())
  189. return
  190. }
  191. // 设置编辑人
  192. req.SetUpdateBy(userId)
  193. //数据权限检查
  194. //p := actions.GetPermissionFromContext(c)
  195. err = s.Remove(&req, nil)
  196. if err != nil {
  197. e.Error(500, err, err.Error())
  198. return
  199. }
  200. e.OK(req.GetId(), "删除成功")
  201. }
  202. // ResetPwd 重置客户密码
  203. // @Summary 重置客户密码
  204. // @Description 重置客户密码
  205. // @Tags 客户
  206. // @Accept application/json
  207. // @Product application/json
  208. // @Param data body dto.ResetCustomerPwdReq true "body"
  209. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  210. // @Router /api/user/pwd/reset [put]
  211. // @Security Bearer
  212. func (e Customer) ResetPwd(c *gin.Context) {
  213. s := service.Customer{}
  214. req := dto.ResetCustomerPwdReq{}
  215. err := e.MakeContext(c).
  216. MakeOrm().
  217. Bind(&req, binding.JSON).
  218. MakeService(&s.Service).
  219. Errors
  220. if err != nil {
  221. e.Logger.Error(err)
  222. e.Error(500, err, err.Error())
  223. return
  224. }
  225. req.SetUpdateBy(user.GetUserId(c))
  226. //数据权限检查
  227. //p := actions.GetPermissionFromContext(c)
  228. err = s.ResetPwd(&req, nil)
  229. if err != nil {
  230. e.Logger.Error(err)
  231. e.Error(500, err, err.Error())
  232. return
  233. }
  234. e.OK(req.GetId(), "更新成功")
  235. }
  236. // UpdatePwd 修改密码
  237. // @Summary 修改密码
  238. // @Description 修改密码
  239. // @Tags 个人中心
  240. // @Accept application/json
  241. // @Product application/json
  242. // @Param data body dto.CustomerPassWord true "body"
  243. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  244. // @Router /api/customer/pwd/set [put]
  245. // @Security Bearer
  246. func (e Customer) UpdatePwd(c *gin.Context) {
  247. s := service.Customer{}
  248. req := dto.CustomerPassWord{}
  249. err := e.MakeContext(c).
  250. MakeOrm().
  251. Bind(&req).
  252. MakeService(&s.Service).
  253. Errors
  254. if err != nil {
  255. e.Logger.Error(err)
  256. e.Error(500, err, err.Error())
  257. return
  258. }
  259. var hash []byte
  260. if hash, err = bcrypt.GenerateFromPassword([]byte(req.NewPassword), bcrypt.DefaultCost); err != nil {
  261. req.NewPassword = string(hash)
  262. }
  263. err = s.UpdatePwd(user.GetUserId(c), req.OldPassword, req.NewPassword)
  264. if err != nil {
  265. e.Error(http.StatusForbidden, err, err.Error())
  266. return
  267. }
  268. e.OK(nil, "密码修改成功")
  269. }
  270. // GetProfile 获取个人中心客户
  271. // @Summary 获取个人中心客户
  272. // @Description 获取个人中心客户
  273. // @Tags 个人中心
  274. // @Success 200 {object} response.Response{user=model.SysUser,role=model.SysRole} "{"code": 200, "data": {"user":[...],"role":[...]}}"
  275. // @Router /api/user/profile [get]
  276. // @Security Bearer
  277. func (e Customer) GetProfile(c *gin.Context) {
  278. s := service.Customer{}
  279. req := dto.CustomerById{}
  280. err := e.MakeContext(c).
  281. MakeOrm().
  282. MakeService(&s.Service).
  283. Errors
  284. if err != nil {
  285. e.Logger.Error(err)
  286. e.Error(500, err, err.Error())
  287. return
  288. }
  289. req.Id = user.GetUserId(c)
  290. sysUser := model.SysUser{}
  291. err = s.GetProfile(&req, &sysUser)
  292. if err != nil {
  293. e.Logger.Errorf("get user profile error, %s", err.Error())
  294. e.Error(500, err, "获取客户信息失败")
  295. return
  296. }
  297. e.OK(gin.H{
  298. "user": sysUser,
  299. }, "查询成功")
  300. }
  301. // GetInfo 获取个人信息
  302. // @Summary 获取个人信息
  303. // @Description 获取个人信息
  304. // @Tags 个人中心
  305. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  306. // @Router /api/user/info [get]
  307. // @Security Bearer
  308. func (e Customer) GetInfo(c *gin.Context) {
  309. req := dto.CustomerGetReq{}
  310. s := service.Customer{}
  311. r := service.SysRole{}
  312. err := e.MakeContext(c).
  313. MakeOrm().
  314. MakeService(&r.Service).
  315. MakeService(&s.Service).
  316. Errors
  317. if err != nil {
  318. e.Logger.Error(err)
  319. e.Error(500, err, err.Error())
  320. return
  321. }
  322. var roles = make([]string, 1)
  323. roles[0] = user.GetRoleName(c)
  324. var permissions = make([]string, 1)
  325. permissions[0] = "*:*:*"
  326. var buttons = make([]string, 1)
  327. buttons[0] = "*:*:*"
  328. var mp = make(map[string]interface{})
  329. mp["roles"] = roles
  330. list, _ := r.GetById(user.GetRoleId(c))
  331. mp["permissions"] = list
  332. mp["buttons"] = list
  333. sysUser := model.SysUser{}
  334. req.Id = user.GetUserId(c)
  335. err = s.Get(&req, nil, &sysUser)
  336. if err != nil {
  337. e.Logger.Errorf("get user info error, %s", err.Error())
  338. e.Error(http.StatusUnauthorized, err, err.Error())
  339. return
  340. }
  341. mp["userName"] = sysUser.Username
  342. mp["userId"] = sysUser.Id
  343. mp["deptId"] = sysUser.DeptId
  344. mp["name"] = sysUser.NickName
  345. mp["code"] = 200
  346. e.OK(mp, "查询成功")
  347. }
  348. // VerifyCode 获取短信验证码
  349. // @Summary 获取短信验证码
  350. // @Description 获取短信验证码
  351. // @Tags 登录
  352. // @Accept application/json
  353. // @Product application/json
  354. // @Success 200 {string} string "{"code": 200, "data": "18888888888"}"
  355. // @Router /verify-code [get]
  356. // @Security Bearer
  357. func (e Customer) VerifyCode(c *gin.Context) {
  358. s := service.Customer{}
  359. req := dto.CustomerGetSMSVerifyCodeReq{}
  360. err := e.MakeContext(c).
  361. MakeService(&s.Service).
  362. Bind(&req, binding.Query).
  363. Errors
  364. if err != nil {
  365. e.Logger.Error(err)
  366. e.Error(500, err, err.Error())
  367. return
  368. }
  369. key := handler.GetVerifyCodeCacheKey(req.Phone)
  370. _, err = e.Cache.Get(key)
  371. // 验证吗缓存已存在
  372. if err == nil {
  373. e.Error(500, err, "验证吗已发送,请注意查收")
  374. return
  375. }
  376. code := pkg.GenerateRandomFigureKey6()
  377. ss := sms.NewSMS(conf.ExtConfig.SubMail.Appid, conf.ExtConfig.SubMail.Signature)
  378. content := fmt.Sprintf("【冷链送药平台】您的短信验证码:%s,请在10分钟内输入", code)
  379. res, err := ss.Send(req.Phone, content)
  380. if err != nil || res.Status != sms.SUCCESS {
  381. e.Logger.Error("发送短信验证码出现异常", zap.Any("res", res), zap.Error(err))
  382. e.Error(500, err, "验证码发送失败,请重试")
  383. return
  384. }
  385. _ = e.Cache.Set(key, code, 600)
  386. e.OK(req.Phone, "发送成功")
  387. }