UserController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package com.cyksj.web.controller.user;
  2. import cn.hutool.core.date.DateTime;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.cyksj.common.annotation.NoSubmit;
  5. import com.cyksj.common.exception.BusinessRuntimeException;
  6. import com.cyksj.dto.Result;
  7. import com.cyksj.enums.GatewayApiCode;
  8. import com.cyksj.enums.GatewayResponse;
  9. import com.cyksj.mapper.OrderDonMapper;
  10. import com.cyksj.mapper.manage.coupon.CouponUserMapper;
  11. import com.cyksj.mapper.market.task.UserBindDetailMapper;
  12. import com.cyksj.model.dto.UserWhoami;
  13. import com.cyksj.model.entity.*;
  14. import com.cyksj.model.manage.views.GroupsRelationView;
  15. import com.cyksj.model.request.ExchangeCodeTicket;
  16. import com.cyksj.model.request.ReceiveBenefitsReq;
  17. import com.cyksj.model.request.WorkOrderReq;
  18. import com.cyksj.model.request.UserReq;
  19. import com.cyksj.model.views.RenewalView;
  20. import com.cyksj.model.views.UserAvailableGoodsTicketView;
  21. import com.cyksj.model.views.UserPersonalView;
  22. import com.cyksj.model.views.WorkOrderChatHistoryView;
  23. import com.cyksj.service.exchange.ExchangeCodeService;
  24. import com.cyksj.service.order.UserRealOrderBenefitsService;
  25. import com.cyksj.service.relation.GroupRelationFrontService;
  26. import com.cyksj.service.user.UserService;
  27. import com.cyksj.service.user.WorkOrderFrontService;
  28. import com.cyksj.web.util.StpUserUtil;
  29. import com.ejlchina.searcher.BeanSearcher;
  30. import com.ejlchina.searcher.SearchResult;
  31. import com.ejlchina.searcher.util.MapUtils;
  32. import lombok.RequiredArgsConstructor;
  33. import org.springframework.util.Assert;
  34. import org.springframework.validation.annotation.Validated;
  35. import org.springframework.web.bind.annotation.*;
  36. import javax.servlet.http.HttpServletRequest;
  37. import java.util.ArrayList;
  38. import java.util.List;
  39. /**
  40. * @author chan
  41. * @date 2021/10/11 下午11:05
  42. */
  43. @RequestMapping("/applets/user")
  44. @RestController
  45. @RequiredArgsConstructor
  46. public class UserController {
  47. private final UserService userService;
  48. private final ExchangeCodeService exchangeCodeService;
  49. private final GroupRelationFrontService groupRelationFrontService;
  50. private final CouponUserMapper couponUserMapper;
  51. private final OrderDonMapper orderDonMapper;
  52. private final UserBindDetailMapper UserBindDetailMapper;
  53. private final UserRealOrderBenefitsService userRealOrderBenefitsService;
  54. private final BeanSearcher beanSearcher;
  55. private final WorkOrderFrontService workOrderFrontService;
  56. private final HttpServletRequest request;
  57. @GetMapping(value = "/wx/whoami")
  58. public Result<UserWhoami> whoami() {
  59. long userId = StpUserUtil.getLoginIdAsLong();
  60. UserWhoami userWhoami = userService.whoami(userId);
  61. return GatewayResponse.SUCCESS.newBuilder().toResult(userWhoami);
  62. }
  63. /**
  64. * 兑换码兑换车票
  65. */
  66. @PostMapping("/get/ticket")
  67. public Result<String> getTicketByExchangeCode(@RequestBody ExchangeCodeTicket exchangeCodeTicket) {
  68. Long userId = StpUserUtil.getLoginIdAsLong();
  69. return exchangeCodeService.getTicketByExchangeCode(exchangeCodeTicket, userId);
  70. }
  71. /**
  72. * 个人中心详情
  73. */
  74. @GetMapping("/personal")
  75. public Result<UserPersonalView> getPersonalView() {
  76. long userId = StpUserUtil.getLoginIdAsLong();
  77. List<RenewalView> ticket = groupRelationFrontService.getMyTicket(userId, false);
  78. UserPersonalView personalView = new UserPersonalView();
  79. DateTime now = DateTime.now();
  80. //车票
  81. personalView.setNumOfTickets(ticket.size());
  82. //优惠券
  83. Integer couponSize = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class)
  84. .eq(CouponUser::getUserId, userId)
  85. .eq(CouponUser::getStatus, CouponUser.Status.unused)
  86. .le(CouponUser::getValidStartTime, now)
  87. .gt(CouponUser::getValidEndTime, now));
  88. personalView.setNumOfCoupons(couponSize);
  89. //积分
  90. User user = userService.getById(userId);
  91. personalView.setActivePoints(user.getActivePoints());
  92. //推广积分
  93. personalView.setPopularizePoints(user.getPoints());
  94. OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
  95. .eq(OrderDon::getUserId, userId)
  96. .eq(OrderDon::getStatus, OrderDon.Status.noPayment).last("limit 1"));
  97. personalView.setIsNoPayment(orderDon != null ? true : false);
  98. UserBindDetail bindPhone = UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
  99. .eq(UserBindDetail::getUserId, userId).last("limit 1"));
  100. //手机号
  101. if (bindPhone != null) {
  102. personalView.setPhone(bindPhone.getPhone());
  103. }
  104. return GatewayResponse.SUCCESS.newBuilder().toResult(personalView);
  105. }
  106. /**
  107. * 用户已有实物权益 可选车票
  108. */
  109. @GetMapping("/get/available/benefits/tickets")
  110. public Result<List<UserAvailableGoodsTicketView>> getAvailableBenefitsTickets(Long orderId) {
  111. Long userId = StpUserUtil.getLoginIdAsLong();
  112. List<UserAvailableGoodsTicketView> tickets = userRealOrderBenefitsService.getAvailableBenefitsTickets(userId, orderId);
  113. return GatewayResponse.SUCCESS.newBuilder().toResult(tickets);
  114. }
  115. /**
  116. * 用户领取实物权益
  117. */
  118. @PostMapping("/receive/benefits")
  119. public Result<List<GroupsRelationView>> receiveRealGoodsBenefits(@RequestBody List<ReceiveBenefitsReq> reqList) {
  120. List<GroupsRelationView> re = new ArrayList<>();
  121. Long userId = StpUserUtil.getLoginIdAsLong();
  122. reqList.forEach(req -> {
  123. Long benefitsId = req.getBenefitsId(), goodsId = req.getGoodsId(), skuId = req.getSkuId(), relationId = req.getRelationId();
  124. Assert.notNull(benefitsId, "可获取的权益不存在");
  125. Assert.notNull(goodsId, "请选择对应平台");
  126. Assert.notNull(skuId, "请选择对应权益规格");
  127. Assert.notNull(relationId, "请选择对应车票");
  128. GroupsRelationView groupsRelationView = userRealOrderBenefitsService.receiveRealGoodsBenefits(userId, benefitsId, goodsId, skuId, relationId);
  129. re.add(groupsRelationView);
  130. });
  131. return GatewayResponse.SUCCESS.newBuilder().toResult(re);
  132. }
  133. /**
  134. * 用户提交工单
  135. */
  136. @PostMapping("/workOrder/submit")
  137. @NoSubmit
  138. public Result<String> submitWorkOrder(@RequestBody @Validated WorkOrderReq workOrderReq) {
  139. long userId = StpUserUtil.getLoginIdAsLong();
  140. workOrderReq.setUserId(userId);
  141. workOrderFrontService.submitWorkOrder(workOrderReq);
  142. return GatewayResponse.SUCCESS.newBuilder().toResult();
  143. }
  144. /**
  145. * 用户工单历史列表
  146. */
  147. @GetMapping("/workOrder/get")
  148. public Result<SearchResult<WorkOrder>> getWorkOrder() {
  149. long userId = StpUserUtil.getLoginIdAsLong();
  150. SearchResult<WorkOrder> search = beanSearcher.search(WorkOrder.class, MapUtils.flatBuilder(request.getParameterMap())
  151. .field(WorkOrder::getUserId, userId)
  152. .orderBy(WorkOrder::getId).desc()
  153. .onlySelect(WorkOrder::getId, WorkOrder::getTopic, WorkOrder::getStatus, WorkOrder::getCreatedTime)
  154. .build());
  155. return GatewayResponse.SUCCESS.newBuilder().toResult(search);
  156. }
  157. /**
  158. * 用户工单详情
  159. */
  160. @GetMapping("/workOrder/get/detail/{id}")
  161. public Result<SearchResult<WorkOrderChatHistoryView>> getWorkOrderDetails(@PathVariable Long id) {
  162. long userId = StpUserUtil.getLoginIdAsLong();
  163. SearchResult<WorkOrderChatHistoryView> search = beanSearcher.search(WorkOrderChatHistoryView.class, MapUtils.builder()
  164. .field(WorkOrderChatHistoryView::getUserId, userId)
  165. .field(WorkOrderChatHistoryView::getWorkOrderId, id)
  166. .orderBy(WorkOrderChatHistoryView::getId).desc()
  167. .selectExclude(WorkOrderChatHistoryView::getReplyCustomerServiceId,
  168. WorkOrderChatHistoryView::getCustomer)
  169. .build());
  170. return GatewayResponse.SUCCESS.newBuilder().toResult(search);
  171. }
  172. /**
  173. * 工单状态查询
  174. */
  175. @GetMapping("/workOrder/get/status/{id}")
  176. public Result<WorkOrder> getWorkOrderStatus(@PathVariable Long id) {
  177. long userId = StpUserUtil.getLoginIdAsLong();
  178. WorkOrder workOrder = beanSearcher.searchFirst(WorkOrder.class, MapUtils.builder()
  179. .field(WorkOrder::getUserId, userId)
  180. .field(WorkOrder::getId, id)
  181. .onlySelect(WorkOrder::getId, WorkOrder::getUserId, WorkOrder::getStatus)
  182. .build());
  183. if (workOrder == null) {
  184. throw BusinessRuntimeException.getInstance("该工单不存在");
  185. }
  186. return GatewayResponse.SUCCESS.newBuilder().toResult(workOrder);
  187. }
  188. /**
  189. * 用户回复客服
  190. */
  191. @PostMapping("/workOrder/reply")
  192. public Result<String> userReplyWorkOrder(@RequestBody @Validated WorkOrderChatHistory history) {
  193. long userId = StpUserUtil.getLoginIdAsLong();
  194. history.setUserId(userId);
  195. workOrderFrontService.replyCustomer(history);
  196. return GatewayResponse.SUCCESS.newBuilder().toResult();
  197. }
  198. /**
  199. * 用户修改头像
  200. */
  201. @PutMapping("/put/headImg")
  202. public Result<String> updateHeadImg(@RequestBody @Validated UserReq request) {
  203. long userId = StpUserUtil.getLoginIdAsLong();
  204. User user = userService.getById(userId);
  205. if (user == null) throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID);
  206. user.setSex(request.getSex());
  207. user.setHeadimgurl(request.getHeadImg());
  208. userService.updateById(user);
  209. return GatewayResponse.SUCCESS.newBuilder().toResult();
  210. }
  211. /**
  212. * 更新用户最后一次登录时间
  213. */
  214. @PutMapping("/update/lastTime")
  215. public Result<String> updateLastTime() {
  216. long userId = StpUserUtil.getLoginIdAsLong();
  217. User user = userService.getById(userId);
  218. if (user == null) {
  219. return GatewayResponse.SUCCESS.newBuilder().toResult();
  220. }
  221. user.setLastTime(DateTime.now());
  222. userService.updateById(user);
  223. return GatewayResponse.SUCCESS.newBuilder().toResult();
  224. }
  225. }