package com.cyksj.web.controller.user; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cyksj.dto.Result; import com.cyksj.enums.GatewayResponse; import com.cyksj.mapper.OrderDonMapper; import com.cyksj.mapper.manage.coupon.CouponUserMapper; import com.cyksj.mapper.market.task.UserBindDetailMapper; import com.cyksj.model.dto.UserWhoami; import com.cyksj.model.entity.CouponUser; import com.cyksj.model.entity.OrderDon; import com.cyksj.model.entity.User; import com.cyksj.model.entity.UserBindDetail; import com.cyksj.model.manage.views.GroupsRelationView; import com.cyksj.model.request.ExchangeCodeTicket; import com.cyksj.model.request.ReceiveBenefitsReq; import com.cyksj.model.views.RenewalView; import com.cyksj.model.views.UserAvailableGoodsTicketView; import com.cyksj.model.views.UserPersonalView; import com.cyksj.service.exchange.ExchangeCodeService; import com.cyksj.service.order.UserRealOrderBenefitsService; import com.cyksj.service.relation.GroupRelationFrontService; import com.cyksj.service.user.UserService; import com.cyksj.web.util.StpUserUtil; import lombok.RequiredArgsConstructor; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; /** * @author chan * @date 2021/10/11 下午11:05 */ @RequestMapping("/applets/user") @RestController @RequiredArgsConstructor public class UserController { private final UserService userService; private final ExchangeCodeService exchangeCodeService; private final GroupRelationFrontService groupRelationFrontService; private final CouponUserMapper couponUserMapper; private final OrderDonMapper orderDonMapper; private final UserBindDetailMapper UserBindDetailMapper; private final UserRealOrderBenefitsService userRealOrderBenefitsService; @GetMapping(value = "/wx/whoami") public Result whoami() { long userId = StpUserUtil.getLoginIdAsLong(); UserWhoami userWhoami = userService.whoami(userId); return GatewayResponse.SUCCESS.newBuilder().toResult(userWhoami); } /** * 兑换码兑换车票 */ @PostMapping("/get/ticket") public Result getTicketByExchangeCode(@RequestBody ExchangeCodeTicket exchangeCodeTicket) { Long userId = StpUserUtil.getLoginIdAsLong(); return exchangeCodeService.getTicketByExchangeCode(exchangeCodeTicket, userId); } /** * 个人中心详情 */ @GetMapping("/personal") public Result getPersonalView() { long userId = StpUserUtil.getLoginIdAsLong(); List ticket = groupRelationFrontService.getMyTicket(userId, false); UserPersonalView personalView = new UserPersonalView(); DateTime now = DateTime.now(); //车票 personalView.setNumOfTickets(ticket.size()); //优惠券 Integer couponSize = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class) .eq(CouponUser::getUserId, userId) .eq(CouponUser::getStatus, CouponUser.Status.unused) .le(CouponUser::getValidStartTime, now) .gt(CouponUser::getValidEndTime, now)); personalView.setNumOfCoupons(couponSize); //积分 User user = userService.getById(userId); personalView.setActivePoints(user.getActivePoints()); //推广积分 personalView.setPopularizePoints(user.getPoints()); OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class) .eq(OrderDon::getUserId, userId) .eq(OrderDon::getStatus, OrderDon.Status.noPayment).last("limit 1")); personalView.setIsNoPayment(orderDon != null ? true : false); UserBindDetail bindPhone = UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class) .eq(UserBindDetail::getUserId, userId).last("limit 1")); //手机号 if (bindPhone != null) { personalView.setPhone(bindPhone.getPhone()); } return GatewayResponse.SUCCESS.newBuilder().toResult(personalView); } /** * 用户已有实物权益 可选车票 */ @GetMapping("/get/available/benefits/tickets") public Result> getAvailableBenefitsTickets(Long orderId) { Long userId = StpUserUtil.getLoginIdAsLong(); List tickets = userRealOrderBenefitsService.getAvailableBenefitsTickets(userId, orderId); return GatewayResponse.SUCCESS.newBuilder().toResult(tickets); } /** * 用户领取实物权益 */ @PostMapping("/receive/benefits") public Result> receiveRealGoodsBenefits(@RequestBody List reqList) { List re = new ArrayList<>(); Long userId = StpUserUtil.getLoginIdAsLong(); reqList.forEach(req -> { Long benefitsId = req.getBenefitsId(), goodsId = req.getGoodsId(), skuId = req.getSkuId(), relationId = req.getRelationId(); Assert.notNull(benefitsId, "可获取的权益不存在"); Assert.notNull(goodsId, "请选择对应平台"); Assert.notNull(skuId, "请选择对应权益规格"); Assert.notNull(relationId, "请选择对应车票"); GroupsRelationView groupsRelationView = userRealOrderBenefitsService.receiveRealGoodsBenefits(userId, benefitsId, goodsId, skuId, relationId); re.add(groupsRelationView); }); return GatewayResponse.SUCCESS.newBuilder().toResult(re); } }