From f52355f9be7f130b6f4655c05418d5dc3cbe4d2f Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 13 五月 2026 14:35:32 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java | 18 ++++++
server/services/src/main/java/com/doumee/core/constants/Constants.java | 6 ++
server/services/db/db_change.sql | 23 +++++++
server/services/src/main/java/com/doumee/service/business/MemberService.java | 4 +
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 100 +++++++++++++++++++++++++++++++++
server/services/src/main/java/com/doumee/dao/business/model/Member.java | 14 ++--
server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java | 12 ++++
7 files changed, 168 insertions(+), 9 deletions(-)
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index 17ff86d..28fc57e 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,29 @@
-- ============================================================
+-- 2026/05/13 娉ㄥ唽婊″勾璧犻�佷紭鎯犲埜瀹氭椂浠诲姟
+-- ============================================================
+INSERT INTO `system_job` (`JOB_NAME`, `HANDLER`, `CRON`, `WITH_LOG`, `WITH_ASYNC`, `STATUS`, `REMARK`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`)
+VALUES ('娉ㄥ唽婊″勾璧犻�佷紭鎯犲埜', 'registerCouponGiftJob', '0 0 3 * * ?', 1, 0, 1, '鏍规嵁杩愯惀閰嶇疆锛屾煡璇㈡敞鍐屾弧X骞寸殑浼氬憳璧犻�佷紭鎯犲埜', 1, NOW(), 1, NOW(), 0);
+
+-- ============================================================
+-- 2026/05/13 杩愯惀閰嶇疆澧炲姞浼樻儬鍒歌禒閫佽鍒�
+-- ============================================================
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'ORDER_COUPON_ORDER_COUNT', '涓嬪崟璧犻��-璁㈠崟娆℃暟', 0, 0, 1, NOW(), 0);
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'ORDER_COUPON_GIFT_COUNT', '涓嬪崟璧犻��-鑷冲璧犻�佹鏁�', 1, 0, 1, NOW(), 0);
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'ORDER_COUPON_ID', '涓嬪崟璧犻��-浼樻儬鍒窱D', 2, 0, 1, NOW(), 0);
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_COUPON_YEARS', '娉ㄥ唽璧犻��-娉ㄥ唽骞存暟', 3, 0, 1, NOW(), 0);
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_COUPON_GIFT_COUNT', '娉ㄥ唽璧犻��-鑷冲璧犻�佹鏁�', 4, 0, 1, NOW(), 0);
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_COUPON_ID', '娉ㄥ唽璧犻��-浼樻儬鍒窱D', 5, 0, 1, NOW(), 0);
+
+
+-- ============================================================
+-- 2026/05/13 浼氬憳澧炲姞浼樻儬鍒歌禒閫佹鏁板瓧娈�
+-- ============================================================
+ALTER TABLE `member` ADD COLUMN `ORDER_COUPON_GIFT_COUNT` INT DEFAULT 0 COMMENT '涓嬪崟璧犻�佷紭鎯犲埜宸茶禒閫佹鏁�' AFTER `TYPE`;
+ALTER TABLE `member` ADD COLUMN `REGISTER_COUPON_GIFT_COUNT` INT DEFAULT 0 COMMENT '娉ㄥ唽婊″勾璧犻�佷紭鎯犲埜宸茶禒閫佹鏁�' AFTER `ORDER_COUPON_GIFT_COUNT`;
+
+-- ============================================================
-- 2026/05/13 浼樻儬鍒镐俊鎭〃
-- ============================================================
CREATE TABLE `coupon` (
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
index c9a2cdd..e3ac65e 100644
--- a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
+++ b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
@@ -39,6 +39,12 @@
dto.setDefaultDeliveryRange(getValue(Constants.OP_DEFAULT_DELIVERY_RANGE));
dto.setArrivalPickUpTime(getValue(Constants.OP_ARRIVAL_PICK_UP_TIME));
dto.setOperationRadius(getValue(Constants.OP_OPERATION_RADIUS));
+ dto.setOrderCouponOrderCount(getValue(Constants.OP_ORDER_COUPON_ORDER_COUNT));
+ dto.setOrderCouponGiftCount(getValue(Constants.OP_ORDER_COUPON_GIFT_COUNT));
+ dto.setOrderCouponId(getValue(Constants.OP_ORDER_COUPON_ID));
+ dto.setRegisterCouponYears(getValue(Constants.OP_REGISTER_COUPON_YEARS));
+ dto.setRegisterCouponGiftCount(getValue(Constants.OP_REGISTER_COUPON_GIFT_COUNT));
+ dto.setRegisterCouponId(getValue(Constants.OP_REGISTER_COUPON_ID));
return dto;
}
@@ -59,6 +65,12 @@
saveOrUpdate(Constants.OP_DEFAULT_DELIVERY_RANGE, "榛樿閰嶉�佽寖鍥�", dto.getDefaultDeliveryRange());
saveOrUpdate(Constants.OP_ARRIVAL_PICK_UP_TIME, "鍗冲皢鍒拌揪鍙栦欢鏃堕棿閫氱煡", dto.getArrivalPickUpTime());
// saveOrUpdate(Constants.OP_OPERATION_RADIUS, "鍏佽鎿嶄綔鍗婂緞", dto.getOperationRadius());
+ saveOrUpdate(Constants.OP_ORDER_COUPON_ORDER_COUNT, "涓嬪崟璧犻��-璁㈠崟娆℃暟", dto.getOrderCouponOrderCount());
+ saveOrUpdate(Constants.OP_ORDER_COUPON_GIFT_COUNT, "涓嬪崟璧犻��-鑷冲璧犻�佹鏁�", dto.getOrderCouponGiftCount());
+ saveOrUpdate(Constants.OP_ORDER_COUPON_ID, "涓嬪崟璧犻��-浼樻儬鍒窱D", dto.getOrderCouponId());
+ saveOrUpdate(Constants.OP_REGISTER_COUPON_YEARS, "娉ㄥ唽璧犻��-娉ㄥ唽骞存暟", dto.getRegisterCouponYears());
+ saveOrUpdate(Constants.OP_REGISTER_COUPON_GIFT_COUNT, "娉ㄥ唽璧犻��-鑷冲璧犻�佹鏁�", dto.getRegisterCouponGiftCount());
+ saveOrUpdate(Constants.OP_REGISTER_COUPON_ID, "娉ㄥ唽璧犻��-浼樻儬鍒窱D", dto.getRegisterCouponId());
}
private String getValue(String label) {
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index e14d0a0..de11904 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -108,6 +108,12 @@
public static final String OP_DEFAULT_DELIVERY_RANGE = "DEFAULT_DELIVERY_RANGE";
public static final String OP_ARRIVAL_PICK_UP_TIME = "ARRIVAL_PICK_UP_TIME";
public static final String OP_OPERATION_RADIUS = "OPERATION_RADIUS";
+ public static final String OP_ORDER_COUPON_ORDER_COUNT = "ORDER_COUPON_ORDER_COUNT";
+ public static final String OP_ORDER_COUPON_GIFT_COUNT = "ORDER_COUPON_GIFT_COUNT";
+ public static final String OP_ORDER_COUPON_ID = "ORDER_COUPON_ID";
+ public static final String OP_REGISTER_COUPON_YEARS = "REGISTER_COUPON_YEARS";
+ public static final String OP_REGISTER_COUPON_GIFT_COUNT = "REGISTER_COUPON_GIFT_COUNT";
+ public static final String OP_REGISTER_COUPON_ID = "REGISTER_COUPON_ID";
// 鑺儴浜戞墦鍗版満閰嶇疆
public static final String XPYUN_CONFIG = "XPYUN_CONFIG";
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index 296eac4..8774c47 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -154,17 +154,15 @@
@TableField(exist = false)
private Integer type;
+ @ApiModelProperty(value = "涓嬪崟璧犻�佷紭鎯犲埜宸茶禒閫佹鏁�", example = "0")
+ private Integer orderCouponGiftCount;
+
+ @ApiModelProperty(value = "娉ㄥ唽婊″勾璧犻�佷紭鎯犲埜宸茶禒閫佹鏁�", example = "0")
+ private Integer registerCouponGiftCount;
+
@ApiModelProperty(value = "澶村儚鍏ㄨ矾寰�")
@TableField(exist = false)
private String fullCoverImage;
-
- @ApiModelProperty(value = "鎺ュ崟鏉冮噸", example = "1")
- @TableField(exist = false)
- private Integer level;
-
- @ApiModelProperty(value = "璺濈", example = "1")
- @TableField(exist = false)
- private BigDecimal distance;
@ApiModelProperty(value = "韬唤淇℃伅", example = "1")
@TableField(exist = false)
diff --git a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
index a61acef..dd75bbc 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
@@ -52,4 +52,22 @@
@ApiModelProperty(value = "鍏佽鎿嶄綔鍗婂緞(m)", required = true)
private String operationRadius;
+ @ApiModelProperty(value = "涓嬪崟婊娆¤禒閫佷紭鎯犲埜-璁㈠崟娆℃暟")
+ private String orderCouponOrderCount;
+
+ @ApiModelProperty(value = "涓嬪崟婊娆¤禒閫佷紭鎯犲埜-鑷冲璧犻�佹鏁�")
+ private String orderCouponGiftCount;
+
+ @ApiModelProperty(value = "涓嬪崟婊娆¤禒閫佷紭鎯犲埜-璧犻�佷紭鎯犲埜ID")
+ private String orderCouponId;
+
+ @ApiModelProperty(value = "娉ㄥ唽婊骞磋禒閫佷紭鎯犲埜-娉ㄥ唽骞存暟")
+ private String registerCouponYears;
+
+ @ApiModelProperty(value = "娉ㄥ唽婊骞磋禒閫佷紭鎯犲埜-鑷冲璧犻�佹鏁�")
+ private String registerCouponGiftCount;
+
+ @ApiModelProperty(value = "娉ㄥ唽婊骞磋禒閫佷紭鎯犲埜-璧犻�佷紭鎯犲埜ID")
+ private String registerCouponId;
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index 9d57477..fce8f96 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -187,4 +187,6 @@
* @return MemberDetailVO
*/
MemberDetailVO findMemberDetail(Integer id);
-}
+
+ void giftRegisterCoupon();
+}
\ No newline at end of file
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..e0efcdd 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,86 @@
);
}
+ @Override
+ public void giftRegisterCoupon() {
+ // 1. 璇诲彇閰嶇疆
+ OperationConfigDTO config = operationConfigBiz.getConfig();
+ String yearsStr = config.getRegisterCouponYears();
+ String maxGiftStr = config.getRegisterCouponGiftCount();
+ String couponIdStr = config.getRegisterCouponId();
+ if (StringUtils.isBlank(yearsStr) || StringUtils.isBlank(maxGiftStr) || StringUtils.isBlank(couponIdStr)) {
+ return;
+ }
+ int configYears = Integer.parseInt(yearsStr);
+ int maxGiftCount = Integer.parseInt(maxGiftStr);
+ int couponId = Integer.parseInt(couponIdStr);
+ if (configYears <= 0 || maxGiftCount <= 0) {
+ return;
+ }
+
+ // 2. 鏍¢獙浼樻儬鍒稿瓨鍦ㄤ笖鍚敤
+ Coupon coupon = couponMapper.selectById(couponId);
+ if (coupon == null || !Constants.equalsInteger(coupon.getIsdeleted(), Constants.ZERO)
+ || !Constants.equalsInteger(coupon.getStatus(), Constants.ZERO)) {
+ 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++) {
+ MemberCoupon mc = new MemberCoupon();
+ mc.setCouponId(couponId);
+ 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