| | |
| | | package com.ruoyi.account.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.account.api.vo.CouponInfoVo; |
| | | import com.ruoyi.account.api.vo.PaymentUserCouponVo; |
| | | import com.ruoyi.account.mapper.UserCouponMapper; |
| | | import com.ruoyi.account.api.model.UserCoupon; |
| | | import com.ruoyi.account.service.UserCouponService; |
| | | import com.ruoyi.other.api.domain.CouponInfo; |
| | | import com.ruoyi.other.api.feignClient.CouponInfoClient; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.time.Instant; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @Service |
| | | public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon> implements UserCouponService { |
| | | |
| | | |
| | | @Resource |
| | | private CouponInfoClient couponInfoClient; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取支付页面的优惠券列表数据 |
| | | * @param userId |
| | | * @param orderMoney |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<PaymentUserCouponVo> getUserCoupon(Long userId, Integer type) { |
| | | List<UserCoupon> list = this.list(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getAppUserId, userId).eq(UserCoupon::getDelFlag, 0) |
| | | .last(" and now() between start_time and end_time")); |
| | | List<Integer> couponIds = list.stream().map(UserCoupon::getCouponId).collect(Collectors.toList()); |
| | | if(couponIds.size() == 0){ |
| | | return null; |
| | | } |
| | | List<CouponInfo> couponInfoList = couponInfoClient.getCouponInfoList(couponIds).getData(); |
| | | //构建返回数据 |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | List<PaymentUserCouponVo> infoVoList = new ArrayList<>(); |
| | | for (UserCoupon userCoupon : list) { |
| | | CouponInfo couponInfo = couponInfoList.stream().filter(s -> s.getId().equals(userCoupon.getCouponId())).findFirst().get(); |
| | | //排除商品券(商品券线下领取) |
| | | if(4 == couponInfo.getCouponType()){ |
| | | continue; |
| | | } |
| | | PaymentUserCouponVo couponInfoVo = new PaymentUserCouponVo(); |
| | | couponInfoVo.setId(userCoupon.getId()); |
| | | couponInfoVo.setName(couponInfo.getCouponName()); |
| | | couponInfoVo.setCouponType(couponInfo.getCouponType()); |
| | | couponInfoVo.setConditionAmount(couponInfo.getConditionAmount()); |
| | | couponInfoVo.setDiscountAmount(couponInfo.getDiscountAmount()); |
| | | couponInfoVo.setMoneyAmount(couponInfo.getMoneyAmount()); |
| | | couponInfoVo.setDiscount(couponInfo.getDiscount()); |
| | | couponInfoVo.setPeriodEndTime(couponInfo.getPeriodStartTime().format(formatter)); |
| | | couponInfoVo.setPeriodEndTime(couponInfo.getPeriodEndTime().format(formatter)); |
| | | String forGoodIds = couponInfo.getForGoodIds(); |
| | | Integer instant = JSON.parseArray(forGoodIds).getInteger(0); |
| | | if(-1 == instant){ |
| | | couponInfoVo.setForGoodIds(null); |
| | | }else{ |
| | | couponInfoVo.setForGoodIds(JSON.parseArray(forGoodIds, Integer.class)); |
| | | } |
| | | couponInfoVo.setAvailable(false); |
| | | infoVoList.add(couponInfoVo); |
| | | } |
| | | return infoVoList; |
| | | } |
| | | } |