From c99b27b5d7f63b7c9ebe0ed682a82d28c238453a Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 20 May 2025 11:49:42 +0800
Subject: [PATCH] feat(mall): 新增新人礼功能

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java |   77 +++++++++++++++++++++++++++++---------
 1 files changed, 58 insertions(+), 19 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index 7761620..84e81b0 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -89,6 +89,7 @@
     private final MallStoreMemberMapper mallStoreMemberMapper;
     private final MallDoctorMapper mallDoctorMapper;
     private final HappyMemberLevelMapper happyMemberLevelMapper;
+    private final IApiMallMemberWalletService mallMemberWalletService;
 
 
     @Value("${spring.profiles.active}")
@@ -1590,18 +1591,12 @@
         ApiMemberNewGiftSettingVo apiMemberNewGiftSettingVo = new ApiMemberNewGiftSettingVo();
 
         MallMember mallMember = this.baseMapper.selectById(memberId);
-        Date lastLoginTime = mallMember.getLastLoginTime();
-        if(lastLoginTime == null){
+
+        Integer newGift = mallMember.getNewGift();
+        if(newGift == 0){
             apiMemberNewGiftSettingVo.setOpenState(1);
-        }
-        if(lastLoginTime != null){
-            Date now = new Date();
-            long between = DateUtil.between(lastLoginTime, now, DateUnit.DAY);
-            if(between > 0){
-                apiMemberNewGiftSettingVo.setOpenState(1);
-            }else{
-                apiMemberNewGiftSettingVo.setOpenState(0);
-            }
+        }else{
+            apiMemberNewGiftSettingVo.setOpenState(0);
         }
 
         DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
@@ -1610,18 +1605,62 @@
         );
         ApiNewGiftSettingDto apiNewGiftSettingDto = JSONObject.parseObject(dic.getValue(), ApiNewGiftSettingDto.class);
         apiMemberNewGiftSettingVo.setState(apiNewGiftSettingDto.getState());
-        apiMemberNewGiftSettingVo.setPrizeScore(apiNewGiftSettingDto.getPrizeScore());
+        if(apiMemberNewGiftSettingVo.getState() == 1 && apiMemberNewGiftSettingVo.getOpenState() == 1){
 
+            mallMember.setNewGift(1);
+            mallMember.setLastLoginTime(new Date());
+            this.baseMapper.updateById(mallMember);
 
-        LambdaQueryWrapper<MallGoodsCoupon> query = new LambdaQueryWrapper<>();
-        query.eq(MallGoodsCoupon::getId, apiNewGiftSettingDto.getCouponId())
-                .eq(MallGoodsCoupon::getState, 2);
-        List<MallGoodsCoupon> coupons = mallGoodsCouponMapper.selectList(query);
-        if(CollUtil.isNotEmpty(coupons)){
-            apiMemberNewGiftSettingVo.setCouponName(coupons.get(0).getName());
+            BigDecimal prizeScore = new BigDecimal(StrUtil.isBlank(apiNewGiftSettingDto.getPrizeScore()) ? "0" : apiNewGiftSettingDto.getPrizeScore())
+                    .setScale(0, RoundingMode.HALF_DOWN);
+
+            if(prizeScore.compareTo(BigDecimal.ZERO) > 0){
+                mallMoneyFlowService.addMoneyFlow(
+                        memberId,
+                        prizeScore,
+                        ScoreFlowTypeEnum.NEW_GIFT_PRIZE_SCORE.getValue(),
+                        MallUtils.getOrderNum(),
+                        FlowTypeEnum.PRIZE_SCORE.getValue(),
+                        StrUtil.format( ScoreFlowTypeEnum.NEW_GIFT_PRIZE_SCORE.getDesc(),prizeScore),
+                        2);
+                mallMemberWalletService.add(prizeScore,memberId , "prizeScore");
+
+                apiMemberNewGiftSettingVo.setPrizeScore(prizeScore);
+            }
+
+            String couponUUID = IdUtil.simpleUUID();
+            if(ObjectUtil.isNotEmpty(apiNewGiftSettingDto.getCouponId())){
+                Long couponId = apiNewGiftSettingDto.getCouponId();
+                MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+                List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(memberId, couponId);
+                if(CollUtil.isEmpty(mallMemberCoupons)){
+                    //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
+                    MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+                    mallMemberCoupon.setCouponId(couponId);
+                    mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
+                    mallMemberCoupon.setMemberId(memberId);
+                    mallMemberCoupon.setCouponUuid(couponUUID);
+                    mallMemberCoupon.setInviteId(mallMember.getInviteId());
+                    mallMemberCoupon.setState(1);
+                    mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
+                    mallMemberCouponMapper.insert(mallMemberCoupon);
+
+                    mallMoneyFlowService.addMoneyFlow(
+                            memberId,
+                            BigDecimal.ONE,
+                            ScoreFlowTypeEnum.NEW_GIFT_COUPON.getValue(),
+                            MallUtils.getOrderNum(),
+                            FlowTypeEnum.BALANCE.getValue(),
+                            StrUtil.format( ScoreFlowTypeEnum.NEW_GIFT_COUPON.getDesc(),mallGoodsCoupon.getName()),
+                            2);
+
+                    apiMemberNewGiftSettingVo.setCouponName(mallGoodsCoupon.getName());
+                }
+            }
+
         }
 
-        this.baseMapper.updateLastLoginTime(memberId,new Date());
+//        this.baseMapper.updateLastLoginTime(memberId,new Date());
 
         return new FebsResponse().success().data(apiMemberNewGiftSettingVo);
     }

--
Gitblit v1.9.1