From cd6b21f04e08a61d79e4aea2593c41fdc5cd0766 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期四, 14 五月 2026 09:01:22 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index d7fe3f3..f990099 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -3,6 +3,7 @@
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.OperationConfigBiz;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.config.wx.WxMiniConfig;
@@ -13,15 +14,20 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.CouponMapper;
+import com.doumee.dao.business.MemberCouponMapper;
 import com.doumee.dao.business.OrdersMapper;
 import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.SmsrecordMapper;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Coupon;
+import com.doumee.dao.business.model.MemberCoupon;
 import com.doumee.dao.business.model.Orders;
 import com.doumee.dao.business.model.ShopInfo;
 import com.doumee.dao.business.model.MemberRevenue;
 import com.doumee.dao.business.model.Smsrecord;
 import com.doumee.dao.dto.MemberListQueryDTO;
+import com.doumee.dao.dto.OperationConfigDTO;
 import com.doumee.dao.dto.UpdMobileRequest;
 import com.doumee.dao.dto.WxPhoneRequest;
 import com.doumee.dao.vo.AccountResponse;
@@ -40,6 +46,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import me.chanjar.weixin.common.error.WxErrorException;
 import nonapi.io.github.classgraph.json.Id;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -49,6 +56,7 @@
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -63,6 +71,7 @@
  * @author 姹熻箘韫�
  * @date 2025/07/09 12:00
  */
+@Slf4j
 @Service
 public class MemberServiceImpl implements MemberService {
 
@@ -86,6 +95,15 @@
 
     @Autowired
     private OrdersMapper ordersMapper;
+
+    @Autowired
+    private OperationConfigBiz operationConfigBiz;
+
+    @Autowired
+    private CouponMapper couponMapper;
+
+    @Autowired
+    private MemberCouponMapper memberCouponMapper;
 
 
     @Override
@@ -702,4 +720,87 @@
         );
     }
 
+    @Override
+    public void giftRegisterCoupon() {
+        // 1. 璇诲彇閰嶇疆
+        OperationConfigDTO config = operationConfigBiz.getConfig();
+        String yearsStr = config.getRegisterCouponYears();
+        String maxGiftStr = config.getRegisterCouponGiftCount();
+        String couponIdsStr = config.getRegisterCouponId();
+        if (StringUtils.isBlank(yearsStr) || StringUtils.isBlank(maxGiftStr) || StringUtils.isBlank(couponIdsStr)) {
+            return;
+        }
+        int configYears = Integer.parseInt(yearsStr);
+        int maxGiftCount = Integer.parseInt(maxGiftStr);
+        if (configYears <= 0 || maxGiftCount <= 0) {
+            return;
+        }
+
+        // 2. 瑙f瀽浼樻儬鍒窱D鍒楄〃锛屾煡璇㈡湁鏁堜紭鎯犲埜
+        List<Integer> couponIdList = Arrays.stream(couponIdsStr.split(","))
+                .map(String::trim).filter(StringUtils::isNotBlank)
+                .map(Integer::parseInt).collect(Collectors.toList());
+        List<Coupon> validCoupons = couponMapper.selectList(new QueryWrapper<Coupon>().lambda()
+                .in(Coupon::getId, couponIdList)
+                .eq(Coupon::getIsdeleted, Constants.ZERO)
+                .eq(Coupon::getStatus, Constants.ZERO));
+        if (CollectionUtils.isEmpty(validCoupons)) {
+            return;
+        }
+
+        // 3. 鏌ヨ鎵�鏈夋櫘閫氫細鍛�
+        List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                .eq(Member::getDeleted, Constants.ZERO)
+                .eq(Member::getStatus, Constants.ZERO)
+                .eq(Member::getUserType, Constants.ZERO)
+                .isNotNull(Member::getCreateTime));
+
+        Date now = new Date();
+        long msPerYear = 365L * 24 * 60 * 60 * 1000;
+        int giftedMemberCount = 0;
+
+        for (Member member : members) {
+            int alreadyGifted = member.getRegisterCouponGiftCount() != null ? member.getRegisterCouponGiftCount() : 0;
+            int registeredYears = (int) ((now.getTime() - member.getCreateTime().getTime()) / msPerYear);
+            int shouldGiftTotal = registeredYears / configYears;
+            int remainGift = Math.min(shouldGiftTotal, maxGiftCount) - alreadyGifted;
+            if (remainGift <= 0) {
+                continue;
+            }
+
+            // 4. 姣忔璧犻�佹墍鏈夋湁鏁堜紭鎯犲埜
+            for (int i = 0; i < remainGift; i++) {
+                for (Coupon coupon : validCoupons) {
+                    MemberCoupon mc = new MemberCoupon();
+                    mc.setCouponId(coupon.getId());
+                    mc.setMemberId(member.getId());
+                    mc.setStatus(Constants.CouponStatus.waitClaim.getKey());
+                    Calendar validCal = Calendar.getInstance();
+                    validCal.add(Calendar.DAY_OF_MONTH, coupon.getPushDays() != null ? coupon.getPushDays() : 7);
+                    mc.setValidDate(validCal.getTime());
+                    mc.setName(coupon.getName());
+                    mc.setInfo(coupon.getInfo());
+                    mc.setType(coupon.getType());
+                    mc.setLimitPrice(coupon.getLimitPrice());
+                    mc.setPrice(coupon.getPrice());
+                    mc.setGetMethod(coupon.getGetMethod());
+                    mc.setCouponType(coupon.getCouponType());
+                    mc.setPushDays(coupon.getPushDays());
+                    mc.setValidDays(coupon.getValidDays());
+                    mc.setIsdeleted(Constants.ZERO);
+                    mc.setCreateDate(now);
+                    mc.setEditDate(now);
+                    memberCouponMapper.insert(mc);
+                }
+            }
+
+            // 5. 鏇存柊浼氬憳宸茶禒閫佹鏁�
+            memberMapper.update(new UpdateWrapper<Member>().lambda()
+                    .set(Member::getRegisterCouponGiftCount, alreadyGifted + remainGift)
+                    .eq(Member::getId, member.getId()));
+            giftedMemberCount++;
+        }
+        log.info("娉ㄥ唽婊″勾璧犻�佷紭鎯犲埜瀹屾垚锛屽叡澶勭悊{}鍚嶄細鍛�", giftedMemberCount);
+    }
+
 }

--
Gitblit v1.9.3