From ba4af275c3b8d073f863be7b12e43974b3ef14a2 Mon Sep 17 00:00:00 2001 From: liyong <18434998025@163.com> Date: 星期六, 12 七月 2025 10:27:06 +0800 Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/product-inventory-management-after into pim_ly --- src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java | 129 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 129 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java b/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java new file mode 100644 index 0000000..d98a005 --- /dev/null +++ b/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java @@ -0,0 +1,129 @@ +package com.ruoyi.approve.utils; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.approve.mapper.ApproveProcessMapper; +import com.ruoyi.approve.pojo.ApproveProcess; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.concurrent.TimeUnit; + + +//鍩轰簬redis鐨勪竴涓瘡鏃ヨ鏁板櫒 +@Component +public class DailyRedisCounter { + private static final String KEY_PREFIX = "daily_counter:"; + private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); + private final StringRedisTemplate redisTemplate; + + public DailyRedisCounter(StringRedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /**鏌ョ紦瀛� + * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勬暟鍊硷紝骞惰嚜澧�1 + * @param counterName 璁℃暟鍣ㄥ悕绉帮紙渚嬪锛歭ogin_count銆乷rder_count锛� + * @return 浠婃棩鑷鍚庣殑璁℃暟鍊� + */ + public long incrementAndGet(String counterName) { + String key = getKey(counterName); + long count = redisTemplate.opsForValue().increment(key, 1); + + // 浠呭湪绗竴娆¤缃椂璁剧疆杩囨湡鏃堕棿锛堥伩鍏嶉噸澶嶈缃級 + if (count == 1) { + long secondsUntilMidnight = calculateSecondsUntilMidnight(); + redisTemplate.expire(key, secondsUntilMidnight, TimeUnit.SECONDS); + } + + return count; + } + + @Autowired + private ApproveProcessMapper approveProcessMapper; + + /** + * 鑾峰彇褰撳墠鏃堕棿鐨� 寮�濮嬫棩鏈� 锛岀粨鏉熸棩鏈� + * @return + */ + public static StartAndEndDateDto getDateTime(){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date date = new Date(); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.DATE,1); + String startDateTime = simpleDateFormat.format(date); + String endDateTime = simpleDateFormat.format(cal.getTime()); + StartAndEndDateDto startAndEndDateDto = new StartAndEndDateDto(); + startAndEndDateDto.setStartDate(startDateTime); + startAndEndDateDto.setEndDate(endDateTime); + return startAndEndDateDto; + } + + /**鏌ユ暟鎹簱 + * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勬暟鍊硷紝骞惰嚜澧�1 + * @return 浠婃棩鑷鍚庣殑璁℃暟鍊� + */ + public long incrementAndGetByDb() { + String approveId = redisTemplate.opsForValue().get("approveNum"); + if(approveId == null){ + StartAndEndDateDto dateTime = getDateTime(); + LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>(); + approveProcessLambdaQueryWrapper + .eq(ApproveProcess::getApproveDelete,0) + .gt(ApproveProcess::getCreateTime,dateTime.getStartDate()) + .lt(ApproveProcess::getCreateTime,dateTime.getEndDate()); + Long aLong = approveProcessMapper.selectCount(approveProcessLambdaQueryWrapper); + if(aLong == null){ + redisTemplate.opsForValue().set("approveNum","1",1L, TimeUnit.HOURS); + return 1; + }else{ + aLong += 1; + redisTemplate.opsForValue().set("approveNum",aLong.toString(),1L, TimeUnit.HOURS); + return aLong; + } + }else{ + Long num = Long.parseLong(approveId) + 1; + redisTemplate.opsForValue().set("approveNum",num.toString(),1L, TimeUnit.HOURS); + return Long.parseLong(approveId); + } + + } + + /** + * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勫綋鍓嶆暟鍊� + * @param counterName 璁℃暟鍣ㄥ悕绉� + * @return 浠婃棩褰撳墠璁℃暟鍊硷紝鑻ヤ笉瀛樺湪鍒欒繑鍥�0 + */ + public long getCurrentCount(String counterName) { + String key = getKey(counterName); + String value = redisTemplate.opsForValue().get(key); + return value != null ? Long.parseLong(value) : 0; + } + + /** + * 璁$畻璺濈娆℃棩鍑屾櫒鐨勭鏁� + */ + private long calculateSecondsUntilMidnight() { + LocalDate tomorrow = LocalDate.now().plusDays(1); + LocalDate midnight = tomorrow.atStartOfDay().toLocalDate(); + return java.time.Duration.between( + LocalDate.now().atTime(23, 59, 59), + midnight.atTime(0, 0, 0) + ).getSeconds() + 1; + } + + /** + * 鐢熸垚Redis閿� + */ + private String getKey(String counterName) { + String today = LocalDate.now().format(DATE_FORMAT); + return KEY_PREFIX + counterName + ":" + today; + } +} -- Gitblit v1.9.3