Sfoglia il codice sorgente

feat(marketing): 优惠券统计功能

- 在 MemberCouponService接口中添加 mercStatistic 方法用于统计优惠券数量
- 在 MemberCouponServiceImpl 中实现 mercStatistic 方法,用于获取指定优惠券 ID 列表和类型的数量统计
- 在 MercCouponServiceImpl 中调用 memberCouponService 的 mercStatistic 方法,为查询结果添加各种状态的优惠券数量字段
hechunping 2 settimane fa
parent
commit
ad70e14cc4

+ 2 - 0
src/main/java/com/xynet/marketing/service/MemberCouponService.java

@@ -59,4 +59,6 @@ public interface MemberCouponService {
      * @param param
      */
     void verification(JMap<String, Object> param);
+
+    Map<Integer, Integer> mercStatistic(List<Integer> couponIdList, String type);
 }

+ 26 - 2
src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

@@ -2,6 +2,7 @@ package com.xynet.marketing.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -25,6 +26,8 @@ import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 会员优惠券服务-实现类
@@ -67,8 +70,6 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
             item.put("typeName", CouponTypeEnum.getEnum(item.get("type").toString()).getValue());
             item.put("statusName", MemberCouponStatusEnum.getEnum(item.get("status").toString()).getValue());
         });
-
-
         return param;
     }
 
@@ -165,4 +166,27 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         }
         return save.getId();
     }
+
+    /**
+     * 数量统计
+     *
+     * @param type
+     * @return
+     */
+    @Override
+    public Map<Integer, Integer> mercStatistic(List<Integer> couponIdList, String type) {
+        LambdaQueryWrapper<MemberCoupon> lwq = new QueryWrapper<MemberCoupon>()
+                .select("coupon_id", "count(*) as num")
+                .lambda()
+                .eq(!Objects.equals(type, "all"), MemberCoupon::getStatus, type)
+                .in(MemberCoupon::getId, couponIdList)
+                .groupBy(MemberCoupon::getCouponId);
+        List<Map<String, Object>> list = listMaps(lwq);
+        Map<Integer, Integer> map = list.stream().collect(
+                Collectors.toMap(
+                        i -> Integer.valueOf(i.get("coupon_id").toString()),
+                        i -> Integer.valueOf(i.get("num").toString()))
+        );
+        return map;
+    }
 }

+ 20 - 1
src/main/java/com/xynet/marketing/service/impl/MercCouponServiceImpl.java

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xynet.marketing.entity.MercCoupon;
+import com.xynet.marketing.enums.MemberCouponStatusEnum;
 import com.xynet.marketing.mapper.MercCouponMapper;
+import com.xynet.marketing.service.MemberCouponService;
 import com.xynet.marketing.service.MercCouponService;
 import com.xynet.marketing.service.MercProjectDeviceService;
 import com.xynet.marketing.service.MercProjectGoodsService;
@@ -19,6 +21,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * a
@@ -35,6 +38,8 @@ public class MercCouponServiceImpl extends ServiceImpl<MercCouponMapper, MercCou
     private MercProjectGoodsService goodsService;
     private MercProjectDeviceService deviceService;
 
+    private MemberCouponService memberCouponService;
+
     private static String ACT_TYPE = "coupon";
 
     private LambdaQueryWrapper<MercCoupon> commonQueryWrapper(JMap<String, Object> param) {
@@ -79,7 +84,21 @@ public class MercCouponServiceImpl extends ServiceImpl<MercCouponMapper, MercCou
         LambdaQueryWrapper<MercCoupon> lqw = commonQueryWrapper(param).orderByAsc(MercCoupon::getId);
         Page<MercCoupon> page = new Page<>(param.getInt("pageNum"), param.getInt("pageSize"), true);
         Page<MercCoupon> list = page(page, lqw);
-        return JHashMap.copy(list);
+        Page<Map<String, Object>> result = JHashMap.copy(list);
+        if (Emptys.check(list.getRecords())) {
+            List<Integer> idList = list.getRecords().stream().map(i -> i.getId()).collect(Collectors.toList());
+            Map<Integer, Integer> allStatusNumMap = memberCouponService.mercStatistic(idList, null);
+            Map<Integer, Integer> unusedStatusNumMap = memberCouponService.mercStatistic(idList, MemberCouponStatusEnum.UNUSED.getCode());
+            Map<Integer, Integer> usedStatusNumMap = memberCouponService.mercStatistic(idList, MemberCouponStatusEnum.USED.getCode());
+            Map<Integer, Integer> disabledStatusNumMap = memberCouponService.mercStatistic(idList, MemberCouponStatusEnum.DISABLED.getCode());
+            result.getRecords().forEach(i -> {
+                i.put("allStatusNum", allStatusNumMap.getOrDefault(i.get("id"), 0));
+                i.put("unusedStatusNum", unusedStatusNumMap.getOrDefault(i.get("id"), 0));
+                i.put("usedStatusNum", usedStatusNumMap.getOrDefault(i.get("id"), 0));
+                i.put("disabledStatusNum", disabledStatusNumMap.getOrDefault(i.get("id"), 0));
+            });
+        }
+        return result;
     }
 
     @Override