礼金过期
This commit is contained in:
@@ -7,6 +7,8 @@ import cn.van.business.model.pl.Comment;
|
|||||||
import cn.van.business.repository.CommentRepository;
|
import cn.van.business.repository.CommentRepository;
|
||||||
import cn.van.business.repository.OrderRowRepository;
|
import cn.van.business.repository.OrderRowRepository;
|
||||||
import cn.van.business.util.jdReq.*;
|
import cn.van.business.util.jdReq.*;
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.alibaba.fastjson2.util.DateUtils;
|
import com.alibaba.fastjson2.util.DateUtils;
|
||||||
import com.jd.open.api.sdk.DefaultJdClient;
|
import com.jd.open.api.sdk.DefaultJdClient;
|
||||||
import com.jd.open.api.sdk.JdClient;
|
import com.jd.open.api.sdk.JdClient;
|
||||||
@@ -26,7 +28,10 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -53,6 +58,7 @@ public class JDScheduleJob {
|
|||||||
private final OrderUtil orderUtil;
|
private final OrderUtil orderUtil;
|
||||||
private final JDUtil jdUtil;
|
private final JDUtil jdUtil;
|
||||||
private final CommentRepository commentRepository;
|
private final CommentRepository commentRepository;
|
||||||
|
private final WXUtil wxUtil;
|
||||||
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -65,12 +71,13 @@ public class JDScheduleJob {
|
|||||||
|
|
||||||
// 构造函数中注入StringRedisTemplate
|
// 构造函数中注入StringRedisTemplate
|
||||||
@Autowired
|
@Autowired
|
||||||
public JDScheduleJob(StringRedisTemplate redisTemplate, OrderRowRepository orderRowRepository, OrderUtil orderUtil, JDUtil jdUtil, CommentRepository commentRepository) {
|
public JDScheduleJob(WXUtil wxUtil, StringRedisTemplate redisTemplate, OrderRowRepository orderRowRepository, OrderUtil orderUtil, JDUtil jdUtil, CommentRepository commentRepository) {
|
||||||
this.redisTemplate = redisTemplate;
|
this.redisTemplate = redisTemplate;
|
||||||
this.orderRowRepository = orderRowRepository;
|
this.orderRowRepository = orderRowRepository;
|
||||||
this.orderUtil = orderUtil;
|
this.orderUtil = orderUtil;
|
||||||
this.jdUtil = jdUtil;
|
this.jdUtil = jdUtil;
|
||||||
this.commentRepository = commentRepository;
|
this.commentRepository = commentRepository;
|
||||||
|
this.wxUtil = wxUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -541,4 +548,40 @@ public class JDScheduleJob {
|
|||||||
hashOps.putAll(key, hours.stream().collect(Collectors.toMap(h -> h, h -> "1")));
|
hashOps.putAll(key, hours.stream().collect(Collectors.toMap(h -> h, h -> "1")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 0 0 * * ?") // 每天 0 点执行
|
||||||
|
public void checkGiftCouponsExpiry() {
|
||||||
|
Set<String> keys = redisTemplate.keys("gift_coupon:*");
|
||||||
|
if (keys == null || keys.isEmpty()) return;
|
||||||
|
|
||||||
|
for (String key : keys) {
|
||||||
|
Map<Object, Object> entries = redisTemplate.opsForHash().entries(key);
|
||||||
|
if (entries.isEmpty()) continue;
|
||||||
|
|
||||||
|
for (Map.Entry<Object, Object> entry : entries.entrySet()) {
|
||||||
|
String giftJson = (String) entry.getValue();
|
||||||
|
JSONObject gift = JSON.parseObject(giftJson);
|
||||||
|
String giftKey = gift.getString("giftKey");
|
||||||
|
String skuName = gift.getString("skuName");
|
||||||
|
String owner = gift.getString("owner");
|
||||||
|
LocalDateTime expireTime = LocalDateTime.parse(gift.getString("expireTime"), DateTimeFormatter.ISO_DATE_TIME);
|
||||||
|
|
||||||
|
boolean isAboutToExpire = false;
|
||||||
|
|
||||||
|
if ("g".equals(owner)) {
|
||||||
|
// 自营:当天过期
|
||||||
|
isAboutToExpire = !expireTime.isAfter(LocalDateTime.now().with(LocalTime.MAX));
|
||||||
|
} else if ("p".equals(owner)) {
|
||||||
|
// POP:7天后过期,提前一天提醒
|
||||||
|
isAboutToExpire = ChronoUnit.HOURS.between(LocalDateTime.now(), expireTime) <= 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAboutToExpire) {
|
||||||
|
String message = String.format("[礼金提醒]\n商品:%s\n礼金Key:%s\n类型:%s\n将在 %s 过期", skuName, giftKey, "g".equals(owner) ? "自营" : "POP", expireTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
|
||||||
|
wxUtil.sendTextMessage(WXUtil.default_super_admin_wxid, message, 1, "bot", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -947,6 +947,9 @@ public class JDUtil {
|
|||||||
result.append(" ").append(skuName).append(" 礼金创建成功\n");
|
result.append(" ").append(skuName).append(" 礼金创建成功\n");
|
||||||
if (giftKey == null) {
|
if (giftKey == null) {
|
||||||
result.append(" ").append(skuName).append(" 礼金创建失败但是转链成功\n");
|
result.append(" ").append(skuName).append(" 礼金创建失败但是转链成功\n");
|
||||||
|
}else {
|
||||||
|
// 将开通成功的怼进去redis 做一个定时调度去扫描,如果礼金今天会过期,就发送通知,需要判断是自营还是pop,pop礼金有效期是7天
|
||||||
|
saveGiftCouponToRedis(skuId, giftKey, skuName, owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -966,7 +969,22 @@ public class JDUtil {
|
|||||||
cacheMap.remove("finalWenAn" + wxid);
|
cacheMap.remove("finalWenAn" + wxid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
将礼金信息写入 Redis **/
|
||||||
|
public void saveGiftCouponToRedis(String skuId, String giftKey, String skuName, String owner) {
|
||||||
|
String key = "gift_coupon:" + skuId ;
|
||||||
|
String hashKey = giftKey;
|
||||||
|
LocalDateTime expireTime = LocalDateTime.now().plus(owner.equals("g") ? 0 : 7, ChronoUnit.DAYS);
|
||||||
|
|
||||||
|
Map<String, Object> data = new HashMap<>();
|
||||||
|
data.put("giftKey", giftKey);
|
||||||
|
data.put("skuName", skuName);
|
||||||
|
data.put("owner", owner);
|
||||||
|
data.put("expireTime", expireTime.format(DateTimeFormatter.ISO_DATE_TIME));
|
||||||
|
|
||||||
|
// 存入 Redis Hash
|
||||||
|
redisTemplate.opsForHash().put(key, hashKey, JSON.toJSONString(data));
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 处理用户输入的推广方案内容
|
* 处理用户输入的推广方案内容
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user