|
|
@@ -3,8 +3,11 @@ package org.springblade.salesPart.coupon.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.github.pagehelper.PageHelper;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.core.mp.support.Query;
|
|
|
import org.springblade.core.secure.BladeUser;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tenant.annotation.TenantIgnore;
|
|
|
@@ -12,10 +15,7 @@ import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.core.tool.utils.BeanUtil;
|
|
|
import org.springblade.core.tool.utils.CollectionUtil;
|
|
|
import org.springblade.salesPart.corps.mapper.CorpsAttnMapper;
|
|
|
-import org.springblade.salesPart.coupon.dto.CartCouponRuleDto;
|
|
|
-import org.springblade.salesPart.coupon.dto.ShortCouponRuleDto;
|
|
|
-import org.springblade.salesPart.coupon.dto.TireCartCouponDto;
|
|
|
-import org.springblade.salesPart.coupon.dto.TireUserCouponDto;
|
|
|
+import org.springblade.salesPart.coupon.dto.*;
|
|
|
import org.springblade.salesPart.coupon.entity.TireCoupon;
|
|
|
import org.springblade.salesPart.coupon.entity.TireCouponRule;
|
|
|
import org.springblade.salesPart.coupon.entity.TireCouponViewLog;
|
|
|
@@ -25,10 +25,17 @@ import org.springblade.salesPart.coupon.mapper.TireCouponRuleMapper;
|
|
|
import org.springblade.salesPart.coupon.mapper.TireCouponViewLogMapper;
|
|
|
import org.springblade.salesPart.coupon.mapper.TireUserCouponMapper;
|
|
|
import org.springblade.salesPart.coupon.service.ITireCouponService;
|
|
|
+import org.springblade.salesPart.coupon.vo.CouponReportVo;
|
|
|
import org.springblade.salesPart.entity.PjCorpsAttn;
|
|
|
+import org.springblade.salesPart.entity.PjOrder;
|
|
|
+import org.springblade.salesPart.entity.PjOrderItems;
|
|
|
+import org.springblade.salesPart.order.mapper.OrderItemsMapper;
|
|
|
+import org.springblade.salesPart.order.mapper.OrderMapper;
|
|
|
+import org.springblade.salesPart.util.PageHelperUtil;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -48,6 +55,10 @@ public class TireCouponServiceImpl extends ServiceImpl<TireCouponMapper, TireCou
|
|
|
|
|
|
private final CorpsAttnMapper corpsAttnMapper;
|
|
|
|
|
|
+ private final OrderMapper orderMapper;
|
|
|
+
|
|
|
+ private final OrderItemsMapper orderItemsMapper;
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
@TenantIgnore
|
|
|
@@ -95,7 +106,7 @@ public class TireCouponServiceImpl extends ServiceImpl<TireCouponMapper, TireCou
|
|
|
tireCouponViewLog.setClaimStatus(1);
|
|
|
tireCouponViewLog.setCorpsId(nowShopUser.getPid());
|
|
|
tireCouponViewLogMapper.insert(tireCouponViewLog);
|
|
|
- return R.success("恭喜您成功领取路本轮胎价值三百元的优惠券");
|
|
|
+ return R.success("恭喜您成功领取路本轮胎价值二百元的优惠券");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -159,15 +170,15 @@ public class TireCouponServiceImpl extends ServiceImpl<TireCouponMapper, TireCou
|
|
|
.eq(TireUserCoupon::getCorpsId, nowShopUser.getPid()).in(TireUserCoupon::getId, expiredIdList).eq(TireUserCoupon::getTenantId, searchUser.getTenantId()));
|
|
|
}
|
|
|
tireUserCouponDtoList.sort(Comparator.comparing(TireUserCouponDto::getStatus).thenComparing(
|
|
|
- TireUserCouponDto::getCouponValue,
|
|
|
- Comparator.nullsLast(Comparator.reverseOrder())));
|
|
|
+ TireUserCouponDto::getCouponValue,
|
|
|
+ Comparator.nullsLast(Comparator.reverseOrder())));
|
|
|
return R.data(tireUserCouponDtoList);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@TenantIgnore
|
|
|
public R getCartCouponList() {
|
|
|
- TireCartCouponDto tireCartCouponDto = new TireCartCouponDto();
|
|
|
+ TireCartCouponDto tireCartCouponDto = new TireCartCouponDto();
|
|
|
BladeUser searchUser = AuthUtil.getUser();
|
|
|
LocalDate today = LocalDate.now();
|
|
|
PjCorpsAttn nowShopUser = corpsAttnMapper.selectOne(new LambdaQueryWrapper<PjCorpsAttn>().eq(PjCorpsAttn::getIsDeleted, 0)
|
|
|
@@ -235,4 +246,72 @@ public class TireCouponServiceImpl extends ServiceImpl<TireCouponMapper, TireCou
|
|
|
tireCouponViewLog.setCorpsId(Objects.isNull(nowShopUser) ? 0 : nowShopUser.getId());
|
|
|
tireCouponViewLogMapper.insert(tireCouponViewLog);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R validateCoupon(List<Long> userCouponIds) {
|
|
|
+ if (CollectionUtil.isEmpty(userCouponIds)) {
|
|
|
+ return R.data(true);
|
|
|
+ }
|
|
|
+ BladeUser validateUser = AuthUtil.getUser();
|
|
|
+ PjCorpsAttn nowShopUser = corpsAttnMapper.selectOne(new LambdaQueryWrapper<PjCorpsAttn>().eq(PjCorpsAttn::getIsDeleted, 0)
|
|
|
+ .eq(PjCorpsAttn::getTenantId, validateUser.getTenantId()).eq(PjCorpsAttn::getUserId, validateUser.getUserId()).last("limit 1"));
|
|
|
+ if (Objects.isNull(nowShopUser)) {
|
|
|
+ return R.data(true);
|
|
|
+ }
|
|
|
+ List<TireUserCouponDto> tireUserCouponDtoList = tireUserCouponMapper.getUserCouponList(nowShopUser.getPid(), validateUser.getTenantId());
|
|
|
+ if (CollectionUtil.isEmpty(tireUserCouponDtoList)) {
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+ long count = tireUserCouponDtoList.stream().filter(cd -> userCouponIds.contains(cd.getId())).count();
|
|
|
+ return R.data(userCouponIds.size() == count);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<CouponReportDto> getCouponReportList(CouponReportVo couponReportVo, Query query) {
|
|
|
+ couponReportVo.setTenantId(AuthUtil.getTenantId());
|
|
|
+ PageHelper.startPage(query.getCurrent(), query.getSize());
|
|
|
+ List<CouponReportDto> couponReportDtoList = tireUserCouponMapper.getCouponReportList(couponReportVo);
|
|
|
+ if (CollectionUtil.isEmpty(couponReportDtoList)) {
|
|
|
+ return PageHelperUtil.getPageInfo(couponReportDtoList);
|
|
|
+ }
|
|
|
+ List<Long> customerIds = couponReportDtoList.stream().map(CouponReportDto::getStoreId).collect(Collectors.toList());
|
|
|
+ List<CouponReturnsItemDto> couponReturnsItemDtoList = tireUserCouponMapper.getCouponReturnsItemDtoList(customerIds, couponReportVo.getTenantId());
|
|
|
+ if (CollectionUtil.isEmpty(couponReturnsItemDtoList)) {
|
|
|
+ return PageHelperUtil.getPageInfo(couponReportDtoList);
|
|
|
+ }
|
|
|
+ List<Long> orderIds = couponReturnsItemDtoList.stream().map(CouponReturnsItemDto::getId).collect(Collectors.toList());
|
|
|
+ List<PjOrderItems> orderItemsList = orderItemsMapper.selectList(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .select(PjOrderItems::getId, PjOrderItems::getPid, PjOrderItems::getCouponIds, PjOrderItems::getGoodsNum, PjOrderItems::getSendNum, PjOrderItems::getReturnsNumber)
|
|
|
+ .in(PjOrderItems::getPid, orderIds).eq(PjOrderItems::getIsDeleted, 0).isNotNull(PjOrderItems::getCouponIds));
|
|
|
+ if (CollectionUtil.isEmpty(orderItemsList)) {
|
|
|
+ return PageHelperUtil.getPageInfo(couponReportDtoList);
|
|
|
+ }
|
|
|
+ for (CouponReportDto couponReportDto : couponReportDtoList) {
|
|
|
+ List<Long> customerOrderIds = couponReturnsItemDtoList.stream().filter(rid -> rid.getCustomerId().equals(couponReportDto.getStoreId())).map(CouponReturnsItemDto::getId).collect(Collectors.toList());
|
|
|
+ couponReportDto.setReturnedCouponCount(0);
|
|
|
+ if (CollectionUtil.isEmpty(customerOrderIds)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<PjOrderItems> customerOrderItemList = orderItemsList.stream().filter(ois -> customerOrderIds.contains(ois.getPid())).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isEmpty(customerOrderItemList)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ int returnedCouponCount = 0;
|
|
|
+ for (PjOrderItems orderItems : customerOrderItemList) {
|
|
|
+ List<Long> useCouponIds = Arrays.stream(orderItems.getCouponIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
|
|
|
+ int numStatus = orderItems.getGoodsNum().compareTo(orderItems.getReturnsNumber());
|
|
|
+ int useCouponSize = useCouponIds.size();
|
|
|
+ if (numStatus <= 0) {
|
|
|
+ // 全退
|
|
|
+ returnedCouponCount += useCouponSize;
|
|
|
+ } else {
|
|
|
+ BigDecimal useCouponSizeDecimal = new BigDecimal(useCouponSize);
|
|
|
+ BigDecimal remainingQuantity = orderItems.getReturnsNumber().subtract(orderItems.getReturnsNumber());
|
|
|
+ returnedCouponCount += remainingQuantity.compareTo(useCouponSizeDecimal) >= 0 ? 0 : useCouponSizeDecimal.subtract(remainingQuantity).intValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ couponReportDto.setReturnedCouponCount(returnedCouponCount);
|
|
|
+ }
|
|
|
+ return PageHelperUtil.getPageInfo(couponReportDtoList);
|
|
|
+ }
|
|
|
}
|