applet_customer.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. package controller
  2. import (
  3. "gas-cylinder-api/app/admin/model"
  4. "gas-cylinder-api/app/admin/service"
  5. "gas-cylinder-api/app/admin/service/dto"
  6. "gas-cylinder-api/common/actions"
  7. "github.com/dgrijalva/jwt-go"
  8. "github.com/gin-gonic/gin"
  9. "github.com/gin-gonic/gin/binding"
  10. "gogs.baozhida.cn/zoie/OAuth-core/api"
  11. _ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
  12. "golang.org/x/crypto/bcrypt"
  13. "net/http"
  14. "strings"
  15. "time"
  16. )
  17. type AppletCustomerController struct {
  18. api.Api
  19. }
  20. // Login 小程序登录
  21. // @Summary 小程序登录
  22. // @Description 小程序登录
  23. // @Tags 用户端
  24. // @Success 200 {object} response.Response{data=response.Page{list=[]model.Customer}} "{"code": 200, "data": [...]}"
  25. // @Router /api/applet/login [get]
  26. // @Security Bearer
  27. func (e AppletCustomerController) Login(c *gin.Context) {
  28. s := service.AppletCustomer{}
  29. req := dto.AppletCustomerLoginReq{}
  30. err := e.MakeContext(c).
  31. MakeOrm().
  32. Bind(&req, binding.JSON).
  33. MakeService(&s.Service).
  34. Errors
  35. if err != nil {
  36. e.Logger.Error(err)
  37. e.Error(500, err, err.Error())
  38. return
  39. }
  40. token, expiresAt, err := s.Login(&req)
  41. if err != nil {
  42. e.Error(500, err, err.Error())
  43. return
  44. }
  45. data := map[string]string{
  46. "token": token,
  47. "expiresAt": expiresAt,
  48. }
  49. e.OK(data, "查询成功")
  50. }
  51. // Refresh 刷新token
  52. // @Summary 刷新token
  53. // @Description 刷新token
  54. // @Tags 用户端
  55. // @Success 200 {object} response.Response{data=response.Page{list=[]model.Customer}} "{"code": 200, "data": [...]}"
  56. // @Router /api/applet/refresh [get]
  57. // @Security Bearer
  58. func (e AppletCustomerController) Refresh(c *gin.Context) {
  59. s := service.AppletCustomer{}
  60. err := e.MakeContext(c).
  61. MakeOrm().
  62. MakeService(&s.Service).
  63. Errors
  64. if err != nil {
  65. e.Logger.Error(err)
  66. e.Error(500, err, err.Error())
  67. return
  68. }
  69. tokenString := c.GetHeader("Authorization")
  70. if tokenString == "" {
  71. c.JSON(http.StatusUnauthorized, gin.H{
  72. "code": 401,
  73. "msg": "Unauthorized",
  74. })
  75. return
  76. }
  77. parts := strings.SplitN(tokenString, " ", 2)
  78. if !(len(parts) == 2 && parts[0] == "Bearer") {
  79. c.JSON(http.StatusOK, gin.H{
  80. "code": 401,
  81. "msg": "请求头中auth格式有误",
  82. })
  83. return
  84. }
  85. // 解析token
  86. token, err := jwt.ParseWithClaims(parts[1], &model.CustomerClaims{}, func(token *jwt.Token) (i interface{}, err error) {
  87. return model.AppletCustomerSecret, nil
  88. })
  89. if err != nil || !token.Valid {
  90. if err.(*jwt.ValidationError).Errors != jwt.ValidationErrorExpired {
  91. c.JSON(http.StatusUnauthorized, gin.H{
  92. "code": 401,
  93. "msg": "Unauthorized",
  94. })
  95. return
  96. }
  97. }
  98. claims, ok := token.Claims.(*model.CustomerClaims)
  99. if !ok {
  100. c.JSON(http.StatusUnauthorized, gin.H{
  101. "code": 401,
  102. "msg": "Unauthorized",
  103. })
  104. return
  105. }
  106. if claims.ExpiresAt < time.Now().Unix() {
  107. if claims.ExpiresAt > time.Now().Add(-2*time.Hour).Unix() {
  108. newToken, expiresAt, _ := s.GeneratorToken(claims.CustomerId)
  109. c.Set("customer_id", claims.CustomerId)
  110. data := map[string]string{
  111. "token": newToken,
  112. "expiresAt": expiresAt,
  113. }
  114. e.OK(data, "查询成功")
  115. return
  116. }
  117. c.JSON(http.StatusUnauthorized, gin.H{
  118. "code": 401,
  119. "msg": "Token is expired",
  120. })
  121. return
  122. }
  123. newToken, expiresAt, _ := s.GeneratorToken(claims.CustomerId)
  124. c.Set("customer_id", claims.CustomerId)
  125. data := map[string]string{
  126. "token": newToken,
  127. "expiresAt": expiresAt,
  128. }
  129. e.OK(data, "查询成功")
  130. }
  131. // Register 注册
  132. // @Summary 小程序登录
  133. // @Description 小程序登录
  134. // @Tags 用户端
  135. // @Success 200 {object} response.Response{data=response.Page{list=[]model.Customer}} "{"code": 200, "data": [...]}"
  136. // @Router /api/applet/register [get]
  137. // @Security Bearer
  138. func (e AppletCustomerController) Register(c *gin.Context) {
  139. s := service.AppletCustomer{}
  140. req := dto.AppletCustomerRegisterReq{}
  141. err := e.MakeContext(c).
  142. MakeOrm().
  143. Bind(&req, binding.JSON).
  144. MakeService(&s.Service).
  145. Errors
  146. if err != nil {
  147. e.Logger.Error(err)
  148. e.Error(500, err, err.Error())
  149. return
  150. }
  151. err = s.Register(&req)
  152. if err != nil {
  153. e.Error(500, err, err.Error())
  154. return
  155. }
  156. e.OK(nil, "注册成功")
  157. }
  158. // GetProfile 获取个人中心用户
  159. // @Summary 获取个人中心用户
  160. // @Description 获取个人中心用户
  161. // @Tags 用户端
  162. // @Success 200 {object} response.Response{user=model.SysUser,role=model.SysRole} "{"code": 200, "data": {"user":[...],"role":[...]}}"
  163. // @Router /api/applet/profile [get]
  164. // @Security Bearer
  165. func (e AppletCustomerController) GetProfile(c *gin.Context) {
  166. s := service.Customer{}
  167. err := e.MakeContext(c).
  168. MakeOrm().
  169. //Bind(&req, nil).
  170. MakeService(&s.Service).
  171. Errors
  172. if err != nil {
  173. e.Logger.Error(err)
  174. e.Error(500, err, err.Error())
  175. return
  176. }
  177. var object model.Customer
  178. //数据权限检查
  179. err = s.Get(&dto.CustomerGetReq{Id: service.GetAppletCustomerId(c)}, &object)
  180. if err != nil {
  181. e.Error(500, err, err.Error())
  182. return
  183. }
  184. e.OK(object, "查询成功")
  185. }
  186. // GetOrderPage 获取订单列表
  187. // @Summary 获取订单列表
  188. // @Description 获取订单列表
  189. // @Tags 用户端
  190. // @Param state query int false "订单状态 1-已下单 2-已派送 3-已送达 4-已取消"
  191. // @Param source query int false "订单状态 1-坐席下单 2-小程序"
  192. // @Param orderStartTime query string false "下单开始时间"
  193. // @Param orderEndTime query string false "下单结束时间"
  194. // @Param phone query string false "客户电话"
  195. // @Param customerId query string false "客户id"
  196. // @Param pageSize query int false "页条数"
  197. // @Param page query int false "页码"
  198. // @Success 200 {object} response.Response{data=response.Page{list=[]model.Order}} "{"code": 200, "data": [...]}"
  199. // @Router /api/applet/order [get]
  200. // @Security Bearer
  201. func (e AppletCustomerController) GetOrderPage(c *gin.Context) {
  202. s := service.Order{}
  203. req := dto.AppletOrderGetPageReq{}
  204. err := e.MakeContext(c).
  205. MakeOrm().
  206. Bind(&req, binding.Query).
  207. MakeService(&s.Service).
  208. Errors
  209. if err != nil {
  210. e.Logger.Error(err)
  211. e.Error(500, err, err.Error())
  212. return
  213. }
  214. list := make([]model.Order, 0)
  215. var count int64
  216. req.CustomerId = service.GetAppletCustomerId(c) + "_"
  217. req.Source = 2
  218. err = s.AppletGetPage(&req, &list, &count)
  219. if err != nil {
  220. e.Error(500, err, err.Error())
  221. return
  222. }
  223. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  224. }
  225. // OrderInsert 订气
  226. // @Summary 订气
  227. // @Description 订气
  228. // @Tags 用户端
  229. // @Accept application/json
  230. // @Product application/json
  231. // @Param data body dto.OrderAppletInsertReq true "data"
  232. // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
  233. // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
  234. // @Router /api/applet/order [post]
  235. // @Security Bearer
  236. func (e AppletCustomerController) OrderInsert(c *gin.Context) {
  237. s := service.Order{}
  238. req := dto.OrderAppletInsertReq{}
  239. err := e.MakeContext(c).
  240. MakeOrm().
  241. Bind(&req, binding.JSON).
  242. MakeService(&s.Service).
  243. Errors
  244. if err != nil {
  245. e.Logger.Error(err)
  246. e.Error(500, err, err.Error())
  247. return
  248. }
  249. req.CustomerId = service.GetAppletCustomerId(c)
  250. req.Source = 2
  251. req.SetDeptId(req.StoreId)
  252. err = s.AppletInsert(&req)
  253. if err != nil {
  254. e.Error(500, err, err.Error())
  255. return
  256. }
  257. e.OK(req.GetId(), "创建成功")
  258. }
  259. // OrderUpdate 修改订单
  260. // @Summary 修改订单
  261. // @Description 修改订单
  262. // @Tags 用户端
  263. // @Accept application/json
  264. // @Product application/json
  265. // @Param data body dto.OrderAppletUpdateReq true "data"
  266. // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
  267. // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
  268. // @Router /api/applet/order [put]
  269. // @Security Bearer
  270. func (e AppletCustomerController) OrderUpdate(c *gin.Context) {
  271. s := service.Order{}
  272. req := dto.OrderAppletUpdateReq{}
  273. err := e.MakeContext(c).
  274. MakeOrm().
  275. Bind(&req, binding.JSON).
  276. MakeService(&s.Service).
  277. Errors
  278. if err != nil {
  279. e.Logger.Error(err)
  280. e.Error(500, err, err.Error())
  281. return
  282. }
  283. err = s.AppletUpdate(&req)
  284. if err != nil {
  285. e.Error(500, err, err.Error())
  286. return
  287. }
  288. e.OK(req.GetId(), "修改成功")
  289. }
  290. // OrderCancel 取消订单
  291. // @Summary 取消订单
  292. // @Description 取消订单
  293. // @Tags 用户端
  294. // @Accept application/json
  295. // @Product application/json
  296. // @Param data body dto.OrderCancelReq true "data"
  297. // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
  298. // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
  299. // @Router /api/applet/order [put]
  300. // @Security Bearer
  301. func (e AppletCustomerController) OrderCancel(c *gin.Context) {
  302. s := service.Order{}
  303. req := dto.OrderCancelReq{}
  304. err := e.MakeContext(c).
  305. MakeOrm().
  306. Bind(&req, binding.JSON).
  307. MakeService(&s.Service).
  308. Errors
  309. if err != nil {
  310. e.Logger.Error(err)
  311. e.Error(500, err, err.Error())
  312. return
  313. }
  314. err = s.Cancel(&req, nil)
  315. if err != nil {
  316. e.Error(500, err, err.Error())
  317. return
  318. }
  319. e.OK(req.GetId(), "取消成功")
  320. }
  321. // StoreList 获取销售门店列表
  322. // @Summary 获取销售门店列表
  323. // @Description 获取销售门店列表
  324. // @Tags 用户端
  325. // @Param name query string false "销售门店名称"
  326. // @Param district query string false "所在地市"
  327. // @Param city query string false "所在区县"
  328. // @Success 200 {object} response.Response{data=response.Page{list=[]model.SysDept}} "{"code": 200, "data": [...]}"
  329. // @Router /api/applet/store [get]
  330. // @Security Bearer
  331. func (e AppletCustomerController) StoreList(c *gin.Context) {
  332. s := service.Store{}
  333. req := dto.AppletStoreGetPageReq{}
  334. err := e.MakeContext(c).
  335. MakeOrm().
  336. Bind(&req, binding.Query).
  337. MakeService(&s.Service).
  338. Errors
  339. if err != nil {
  340. e.Logger.Error(err)
  341. e.Error(500, err, err.Error())
  342. return
  343. }
  344. req.Type = model.TypeStore
  345. list := make([]model.SysDept, 0)
  346. list, err = s.SetAppletStorePage(&req)
  347. if err != nil {
  348. e.Error(500, err, err.Error())
  349. return
  350. }
  351. e.OK(list, "查询成功")
  352. }
  353. // UpdatePwd 修改密码
  354. // @Summary 修改密码
  355. // @Description 修改密码
  356. // @Tags 用户端
  357. // @Accept application/json
  358. // @Product application/json
  359. // @Param data body dto.PassWord true "body"
  360. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  361. // @Router /api/user/pwd/set [put]
  362. // @Security Bearer
  363. func (e AppletCustomerController) UpdatePwd(c *gin.Context) {
  364. s := service.AppletCustomer{}
  365. req := dto.PassWord{}
  366. err := e.MakeContext(c).
  367. MakeOrm().
  368. Bind(&req).
  369. MakeService(&s.Service).
  370. Errors
  371. if err != nil {
  372. e.Logger.Error(err)
  373. e.Error(500, err, err.Error())
  374. return
  375. }
  376. var hash []byte
  377. if hash, err = bcrypt.GenerateFromPassword([]byte(req.NewPassword), bcrypt.DefaultCost); err != nil {
  378. req.NewPassword = string(hash)
  379. }
  380. err = s.UpdatePwd(service.GetAppletCustomerId(c), req.OldPassword, req.NewPassword)
  381. if err != nil {
  382. e.Error(http.StatusForbidden, err, err.Error())
  383. return
  384. }
  385. e.OK(nil, "密码修改成功")
  386. }
  387. // GetGoodsPage 获取商品列表
  388. // @Summary 获取商品列表
  389. // @Description 获取商品列表
  390. // @Tags 用户端
  391. // @Param storeId query int true "销售门店id"
  392. // @Param name query string false "商品名称"
  393. // @Param mediaType query string false "介质类型"
  394. // @Param isShow query int false "是否展示 1-展示 2-不展示"
  395. // @Success 200 {object} response.Response{data=response.Page{list=[]model.Goods}} "{"code": 200, "data": [...]}"
  396. // @Router /api/goods [get]
  397. // @Security Bearer
  398. func (e AppletCustomerController) GetGoodsPage(c *gin.Context) {
  399. s := service.Goods{}
  400. req := dto.AppletGoodsGetPageReq{}
  401. err := e.MakeContext(c).
  402. MakeOrm().
  403. Bind(&req, binding.Query).
  404. MakeService(&s.Service).
  405. Errors
  406. if err != nil {
  407. e.Logger.Error(err)
  408. e.Error(500, err, err.Error())
  409. return
  410. }
  411. //数据权限检查
  412. p := actions.GetPermissionFromContext(c)
  413. p.DeptId = req.StoreId
  414. list := make([]model.Goods, 0)
  415. var count int64
  416. err = s.GetAppletPage(&req, &list, &count)
  417. if err != nil {
  418. e.Error(500, err, err.Error())
  419. return
  420. }
  421. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  422. }
  423. // GetGasCylinderSpecPage 获取钢瓶规格列表
  424. // @Summary 获取钢瓶规格列表
  425. // @Description 获取钢瓶规格列表
  426. // @Tags 钢瓶规格
  427. // @Param name query string false "钢瓶规格名称"
  428. // @Success 200 {object} response.Response{data=response.Page{list=[]model.GasCylinderSpec}} "{"code": 200, "data": [...]}"
  429. // @Router /api/dispatch-cost [get]
  430. // @Security Bearer
  431. func (e AppletCustomerController) GetGasCylinderSpecPage(c *gin.Context) {
  432. s := service.GasCylinderSpec{}
  433. req := dto.AppletGasCylinderSpecGetPageReq{}
  434. err := e.MakeContext(c).
  435. MakeOrm().
  436. Bind(&req, binding.Query).
  437. MakeService(&s.Service).
  438. Errors
  439. if err != nil {
  440. e.Logger.Error(err)
  441. e.Error(500, err, err.Error())
  442. return
  443. }
  444. //数据权限检查
  445. list := make([]model.GasCylinderSpec, 0)
  446. var count int64
  447. err = s.GetAppletPage(&req, &list, &count)
  448. if err != nil {
  449. e.Error(500, err, err.Error())
  450. return
  451. }
  452. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  453. }
  454. // UpdateCustomerInfo 修改个人信息
  455. // @Summary 修改客户信息
  456. // @Description 修改客户信息
  457. // @Tags 客户信息
  458. // @Accept application/json
  459. // @Product application/json
  460. // @Param id path string true "客户信息id"
  461. // @Param data body dto.CustomerUpdateReq true "body"
  462. // @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
  463. // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
  464. // @Router /api/customer [put]
  465. // @Security Bearer
  466. func (e AppletCustomerController) UpdateCustomerInfo(c *gin.Context) {
  467. s := service.Customer{}
  468. req := dto.AppletCustomerUpdateReq{}
  469. err := e.MakeContext(c).
  470. MakeOrm().
  471. Bind(&req).
  472. MakeService(&s.Service).
  473. Errors
  474. if err != nil {
  475. e.Logger.Error(err)
  476. e.Error(500, err, err.Error())
  477. return
  478. }
  479. req.Id = service.GetAppletCustomerId(c)
  480. err = s.AppletUpdate(&req)
  481. if err != nil {
  482. e.Error(500, err, err.Error())
  483. return
  484. }
  485. e.OK(req.GetId(), "更新成功")
  486. }