Эх сурвалжийг харах

refactor(marketing): 根据会员获得的优惠券来判断

hechunping 1 сар өмнө
parent
commit
5b0dec3180

+ 22 - 23
src/main/java/com/xynet/marketing/service/factory/coupon/merc/impl/base/MercCouponFactoryBase.java

@@ -10,10 +10,10 @@ import com.xynet.marketing.entity.MemberCoupon;
 import com.xynet.marketing.entity.MercCoupon;
 import com.xynet.marketing.enums.*;
 import com.xynet.marketing.mapper.MercCouponMapper;
-import com.xynet.marketing.service.MemberCouponService;
 import com.xynet.marketing.service.MercProjectDeviceService;
 import com.xynet.marketing.service.MercProjectGoodsService;
 import com.xynet.marketing.service.factory.coupon.merc.MercCouponFactory;
+import com.xynet.marketing.service.impl.MemberCouponServiceImpl;
 import com.xynet.marketing.utils.Emptys;
 import com.xynet.marketing.utils.collections.map.JHashMap;
 import com.xynet.marketing.utils.collections.map.JMap;
@@ -45,7 +45,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
 
     private MercProjectDeviceService deviceService;
 
-    private MemberCouponService memberCouponService;
+    private MemberCouponServiceImpl memberCouponService;
 
     @Override
     public Integer saveOrUpdate(JMap<String, Object> param) {
@@ -306,37 +306,36 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime orderCreateTime = LocalDateTime.parse(param.getString("orderCreateTime"), formatter);
         //查询会员优惠券信息
-        Map<String, Object> memberCoupon = memberCouponService.obj(new JHashMap<String, Object>().set("id", memberCouponId));
+        MemberCoupon memberCoupon = memberCouponService.getById(memberCouponId);
         if (!Emptys.check(memberCoupon)) {
             throw new BusinessException("会员优惠券不存在!");
         }
         //判断券是否属于该用户
-        JMap<String, Object> memberCouponJMap = new JHashMap<String, Object>(memberCoupon);
-        if (!Objects.equals(thirdMemberId, memberCouponJMap.getString("thirdMemberId"))) {
+        if (!Objects.equals(thirdMemberId, memberCoupon.getThirdMemberId())) {
             throw new BusinessException("会员优惠券不属于该用户!");
         }
         //判断券是否已使用
-        if (!Objects.equals(memberCouponJMap.getString("status"), MemberCouponStatusEnum.UNUSED.getCode())) {
+        if (!Objects.equals(memberCoupon.getStatus(), MemberCouponStatusEnum.UNUSED.getCode())) {
             throw new BusinessException("该券已失效!");
         }
         //查询商户券
-        MercCoupon mercCoupon = getById(memberCouponJMap.getInt("couponId"));
-        if (Emptys.check(mercCoupon.getValidStartDate()) && mercCoupon.getValidStartDate().isAfter(orderCreateTime.toLocalDate())) {
-            throw new BusinessException("该券于" + mercCoupon.getValidStartDate().toString() + "开始使用!");
+        //MercCoupon mercCoupon = getById(memberCouponJMap.getInt("couponId"));
+        if (Emptys.check(memberCoupon.getValidStartDate()) && memberCoupon.getValidStartDate().isAfter(orderCreateTime.toLocalDate())) {
+            throw new BusinessException("该券于" + memberCoupon.getValidStartDate().toString() + "开始使用!");
         }
-        if (Emptys.check(mercCoupon.getValidEndDate()) && mercCoupon.getValidEndDate().isBefore(orderCreateTime.toLocalDate())) {
-            throw new BusinessException("该券于" + mercCoupon.getValidEndDate().toString() + "结束!");
+        if (Emptys.check(memberCoupon.getValidEndDate()) && memberCoupon.getValidEndDate().isBefore(orderCreateTime.toLocalDate())) {
+            throw new BusinessException("该券于" + memberCoupon.getValidEndDate().toString() + "结束!");
         }
         //判断优惠券是可用于该设备
-        if (!mercCoupon.getIsAllDevice()) {
-            Boolean deviceCheck = deviceService.checkDeviceId(mercCoupon.getId(), deviceId, "coupon");
+        if (!memberCoupon.getIsAllDevice()) {
+            Boolean deviceCheck = deviceService.checkDeviceId(memberCoupon.getCouponId(), deviceId, "coupon");
             if (!deviceCheck) {
                 throw new BusinessException("该券不可用于该设备!");
             }
         }
         Map<String, Map<String, Object>> couponGoodsMap = new HashMap<>();
-        if (!mercCoupon.getIsAllGoods()) {
-            List<Map<String, Object>> couponGoods = goodsService.listByActId(mercCoupon.getId(), "coupon");
+        if (!memberCoupon.getIsAllGoods()) {
+            List<Map<String, Object>> couponGoods = goodsService.listByActId(memberCoupon.getCouponId(), "coupon");
             couponGoodsMap = couponGoods.stream().collect(Collectors.toMap(i -> i.get("goodsId").toString(), i -> i));
         }
         int type1Amount = 0;
@@ -344,7 +343,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
             JMap<String, Object> goods = goodsList.get(g);
             //判断商品是否可以使用该优惠券
             Map<String, Object> couponGoods = couponGoodsMap.get(goods.getString("goodsId"));
-            if (!mercCoupon.getIsAllGoods() && !Emptys.check(couponGoods)) {
+            if (!memberCoupon.getIsAllGoods() && !Emptys.check(couponGoods)) {
                 continue;
             }
             //判断商品中是否有不能使用优惠券的促销活动
@@ -362,7 +361,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
                     break;
                 }
                 if (Objects.equals(promotion.getString("type"), PromotionTypeEnum.T_1.getCode())
-                        && Objects.equals(mercCoupon.getType(), CouponTypeEnum.T_1.getCode())
+                        && Objects.equals(memberCoupon.getType(), CouponTypeEnum.T_1.getCode())
                 ) {
                     break;
                 }
@@ -372,15 +371,15 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
             }
             //满足条件,计算价格
             //折扣券
-            if (Objects.equals(mercCoupon.getType(), CouponTypeEnum.T_2.getCode())) {
-                JSONObject priceJson = JSONUtil.parseObj(mercCoupon.getPrice());
+            if (Objects.equals(memberCoupon.getType(), CouponTypeEnum.T_2.getCode())) {
+                JSONObject priceJson = JSONUtil.parseObj(memberCoupon.getPrice());
                 BigDecimal scalar = new BigDecimal(priceJson.getStr("scalar"));
                 goods.set("priceOnsale", scalar.multiply(goods.getBigDecimal("priceOnsale")).setScale(0, RoundingMode.CEILING).intValue());
                 goods.set("amount", scalar.multiply(goods.getBigDecimal("amount")).setScale(0, RoundingMode.CEILING).intValue());
-                goods.set("msg", goods.getString("msg") + "【" + mercCoupon.getId() + "】【" + mercCoupon.getName() + "】" + priceJson.getStr("scalar").replace("0.", "") + "折券;");
+                goods.set("msg", goods.getString("msg") + "【" + memberCoupon.getCouponId() + "】【" + memberCoupon.getCouponName() + "】" + priceJson.getStr("scalar").replace("0.", "") + "折券;");
             }
             //满减券
-            if (Objects.equals(mercCoupon.getType(), CouponTypeEnum.T_1.getCode())) {
+            if (Objects.equals(memberCoupon.getType(), CouponTypeEnum.T_1.getCode())) {
                 goods.set("canCouponType1", true);
                 //累计价格
                 type1Amount += goods.getInt("priceOnsale") * goods.getInt("num");
@@ -389,7 +388,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
         //判断满减金额
         Integer priceOnsaleType1 = 0;
         if (type1Amount > 0) {
-            JSONArray priceJson = JSONUtil.parseArray(mercCoupon.getPrice());
+            JSONArray priceJson = JSONUtil.parseArray(memberCoupon.getPrice());
             for (int p = 0; p < priceJson.size(); p++) {
                 JSONObject priceObject = priceJson.getJSONObject(p);
                 //格式:[{"limit":200,"price":100,"isLoop":1}]
@@ -424,7 +423,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
                     goods.set("priceOnsale", priceOnsale);
                     goods.set("amount", goods.getInt("amount") - goodsYh);
                     String goodsYhStr = new BigDecimal(goodsYh).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP) + "元;";
-                    goods.set("msg", goods.getString("msg") + "满减券【" + mercCoupon.getId() + "】【" + mercCoupon.getName() + "】减:" + goodsYhStr);
+                    goods.set("msg", goods.getString("msg") + "满减券【" + memberCoupon.getCouponId() + "】【" + memberCoupon.getCouponName() + "】减:" + goodsYhStr);
                 }
             }
         }

+ 6 - 14
src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

@@ -122,22 +122,14 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         if (!Emptys.check(list)) {
             return result;
         }
-        //查找商家优惠券
-        List<Integer> couponIdList = list.stream().map(i -> i.getCouponId()).collect(Collectors.toList());
-        List<Map<String, Object>> mercCouponList = mercCouponService.list(new JHashMap<String, Object>().set("idList", couponIdList));
-        Map<Integer, Map<String, Object>> mercCouponMap = mercCouponList.stream().collect(Collectors.toMap(i -> Integer.valueOf(i.get("id").toString()), i -> i));
-
-
         for (int i = 0; i < list.size(); i++) {
             MemberCoupon memberCoupon = list.get(i);
-            Map<String, Object> mercCoupon1 = mercCouponMap.get(list.get(i).getCouponId());
-            JMap<String, Object> mercCoupon = new JHashMap<>(mercCoupon1);
-            if (!mercCoupon.getBoolean("isAllDevice")) {
+            if (!memberCoupon.getIsAllDevice()) {
                 //判断设备是否符合
                 List<Map<String, Object>> deviceList = deviceService.list(
                         new JHashMap<String, Object>()
                                 .set("deviceId", deviceId)
-                                .set("actId", mercCoupon.getInt("id"))
+                                .set("actId", memberCoupon.getCouponId())
                                 .set("actType", "coupon")
                 );
                 if (!Emptys.check(deviceList)) {
@@ -146,7 +138,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
             }
             List<Map<String, Object>> projectGoodsList = new ArrayList<>();
             //判断商品是否符合
-            if (!mercCoupon.getBoolean("isAllGoods")) {
+            if (!memberCoupon.getIsAllGoods()) {
                 projectGoodsList = goodsService.list(
                         new JHashMap<String, Object>()
                                 .set("goodsIdList", goodsIdList)
@@ -161,7 +153,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
             //计算该券的商品总价
             List<Map<String, Object>> finalProjectGoodsList = projectGoodsList;
             Stream<JMap<String, Object>> jMapStream = goodsList.stream().filter(g -> {
-                if (mercCoupon.getBoolean("isAllGoods")) {
+                if (memberCoupon.getIsAllGoods()) {
                     return true;
                 } else {
                     String goodsId = g.getString("goodsId");
@@ -176,9 +168,9 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
             Integer couponGoodsPrice = jMapStream.map(g -> g.getInt("price") * g.getInt("num")).reduce(0, Integer::sum);
 
             //判断价格是否符合
-            if (Objects.equals(mercCoupon.getString("type"), CouponTypeEnum.T_1.getCode())) {
+            if (Objects.equals(memberCoupon.getType(), CouponTypeEnum.T_1.getCode())) {
                 //满减判断价格
-                JSONArray priceJson = JSONUtil.parseArray(mercCoupon.getString("price"));
+                JSONArray priceJson = JSONUtil.parseArray(memberCoupon.getPrice());
                 JSONObject priceObject = priceJson.getJSONObject(0);
                 Integer limit = Integer.valueOf(priceObject.get("limit").toString());
                 if (couponGoodsPrice < limit) {