|
@@ -98,17 +98,7 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
|
|
public int insertFsCourseTrafficLog(FsCourseTrafficLog fsCourseTrafficLog)
|
|
public int insertFsCourseTrafficLog(FsCourseTrafficLog fsCourseTrafficLog)
|
|
{
|
|
{
|
|
fsCourseTrafficLog.setCreateTime(DateUtils.getNowDate());
|
|
fsCourseTrafficLog.setCreateTime(DateUtils.getNowDate());
|
|
- SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
|
|
|
|
- if (ObjectUtils.isEmpty(sysConfig)){
|
|
|
|
- sysConfig = new SysConfig();
|
|
|
|
- sysConfig.setConfigKey("redPacket.Traffic.config");
|
|
|
|
- sysConfig.setConfigName("红包流量配置");
|
|
|
|
- sysConfig.setConfigValue("-"+fsCourseTrafficLog.getInternetTraffic());
|
|
|
|
- iSysConfigService.insertConfig(sysConfig);
|
|
|
|
- }else {
|
|
|
|
- sysConfig.setConfigValue(String.valueOf((Long.parseLong(sysConfig.getConfigValue())-fsCourseTrafficLog.getInternetTraffic())));
|
|
|
|
- iSysConfigService.updateConfig(sysConfig);
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
return fsCourseTrafficLogMapper.insertFsCourseTrafficLog(fsCourseTrafficLog);
|
|
return fsCourseTrafficLogMapper.insertFsCourseTrafficLog(fsCourseTrafficLog);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -197,23 +187,25 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
|
|
System.out.println("充值金额:" + account + " 元,对应可用流量:" + trafficKB + " KB");
|
|
System.out.println("充值金额:" + account + " 元,对应可用流量:" + trafficKB + " KB");
|
|
|
|
|
|
long updatedTrafficKB = 0L;
|
|
long updatedTrafficKB = 0L;
|
|
- int pageSize = 3; // 每次查询1000条
|
|
|
|
- int pageNum = 0; // 分页页码
|
|
|
|
- int loopCount = 0; // 查询次数
|
|
|
|
- int maxLoop = 20; // 最大循环次数
|
|
|
|
|
|
+ int pageSize = 1000; // 每次查询1000条
|
|
|
|
+ int pageNum = 0; // 分页页码
|
|
|
|
+ int loopCount = 0; // 查询次数
|
|
|
|
+ int maxLoop = 20; // 最大循环次数
|
|
|
|
|
|
- List<Long> idsToUpdate = new ArrayList<>();
|
|
|
|
- Set<Long> processedIds = new HashSet<>(); // 用于去重
|
|
|
|
- long remainingTrafficKB = trafficKB; // 还需补充的流量
|
|
|
|
- long totalInternetTrafficRemaining = 0L; // 记录未处理的流量总和
|
|
|
|
|
|
+ List<Long> idsToUpdate = new ArrayList<>(); // 用于更新状态为1的ID
|
|
|
|
+ Set<Long> processedIds = new HashSet<>(); // 用于去重
|
|
|
|
+ long remainingTrafficKB = trafficKB; // 还需补充的流量
|
|
|
|
+ long totalInternetTrafficRemaining = 0L; // 记录未处理的流量总和
|
|
|
|
|
|
|
|
+ // 第一阶段:处理需要用于充值的记录
|
|
while (updatedTrafficKB < trafficKB && loopCount < maxLoop) {
|
|
while (updatedTrafficKB < trafficKB && loopCount < maxLoop) {
|
|
loopCount++;
|
|
loopCount++;
|
|
- int offset = pageNum * pageSize; // 计算当前查询的偏移量
|
|
|
|
|
|
+ int offset = pageNum * pageSize;
|
|
|
|
|
|
// 查询当前分页的数据
|
|
// 查询当前分页的数据
|
|
List<TrafficRecord> trafficRecords =
|
|
List<TrafficRecord> trafficRecords =
|
|
- fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(internetTrafficParam.getCompanyId(), offset, pageSize);
|
|
|
|
|
|
+ fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
|
|
|
|
+ internetTrafficParam.getCompanyId(), offset, pageSize);
|
|
|
|
|
|
if (trafficRecords.isEmpty()) {
|
|
if (trafficRecords.isEmpty()) {
|
|
break;
|
|
break;
|
|
@@ -221,26 +213,22 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
|
|
|
|
|
|
// 处理当前批次的数据
|
|
// 处理当前批次的数据
|
|
for (TrafficRecord record : trafficRecords) {
|
|
for (TrafficRecord record : trafficRecords) {
|
|
- if (updatedTrafficKB >= trafficKB) break; // 达到目标流量则退出
|
|
|
|
-
|
|
|
|
Long logId = record.getLogId();
|
|
Long logId = record.getLogId();
|
|
|
|
+
|
|
if (processedIds.contains(logId)) {
|
|
if (processedIds.contains(logId)) {
|
|
- continue; // 如果记录已处理过,则跳过
|
|
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
|
|
|
|
- updatedTrafficKB += record.getInternetTraffic(); // 累加已使用的流量
|
|
|
|
- idsToUpdate.add(logId); // 记录需要更新的ID
|
|
|
|
- processedIds.add(logId); // 标记为已处理
|
|
|
|
-
|
|
|
|
- remainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB); // 更新剩余流量
|
|
|
|
- totalInternetTrafficRemaining += record.getInternetTraffic(); // 累计未处理的流量
|
|
|
|
- // 如果剩余流量不足,则停止处理
|
|
|
|
- if (remainingTrafficKB == 0) {
|
|
|
|
- break;
|
|
|
|
|
|
+ if (updatedTrafficKB < trafficKB) {
|
|
|
|
+ updatedTrafficKB += record.getInternetTraffic();
|
|
|
|
+ idsToUpdate.add(logId);
|
|
|
|
+ remainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ processedIds.add(logId);
|
|
|
|
+ totalInternetTrafficRemaining += record.getInternetTraffic();
|
|
}
|
|
}
|
|
|
|
|
|
- // 模拟数据库压力,休眠一段时间
|
|
|
|
try {
|
|
try {
|
|
Thread.sleep(100);
|
|
Thread.sleep(100);
|
|
} catch (InterruptedException e) {
|
|
} catch (InterruptedException e) {
|
|
@@ -248,55 +236,97 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- pageNum++; // 翻到下一页
|
|
|
|
|
|
+ pageNum++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 第二阶段:将所有未处理的记录状态改为3
|
|
|
|
+ List<Long> allUnprocessedIds = new ArrayList<>();
|
|
|
|
+ pageNum = 0; // 重置分页
|
|
|
|
+ boolean hasMore = true;
|
|
|
|
+
|
|
|
|
+ while (hasMore && loopCount < maxLoop * 2) { // 扩大循环次数限制
|
|
|
|
+ loopCount++;
|
|
|
|
+ int offset = pageNum * pageSize;
|
|
|
|
+
|
|
|
|
+ List<TrafficRecord> allRecords =
|
|
|
|
+ fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
|
|
|
|
+ internetTrafficParam.getCompanyId(), offset, pageSize);
|
|
|
|
+
|
|
|
|
+ if (allRecords.isEmpty()) {
|
|
|
|
+ hasMore = false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (TrafficRecord record : allRecords) {
|
|
|
|
+ Long logId = record.getLogId();
|
|
|
|
+ if (!idsToUpdate.contains(logId)) { // 不是已处理的记录
|
|
|
|
+ allUnprocessedIds.add(logId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pageNum++;
|
|
}
|
|
}
|
|
|
|
+
|
|
// 更新数据库状态
|
|
// 更新数据库状态
|
|
if (!idsToUpdate.isEmpty()) {
|
|
if (!idsToUpdate.isEmpty()) {
|
|
- fsCourseTrafficLogMapper.updateStatusByIds(idsToUpdate);
|
|
|
|
- System.out.println("共更新状态记录数:" + idsToUpdate.size());
|
|
|
|
- } else {
|
|
|
|
- System.out.println("没有记录被更新。");
|
|
|
|
|
|
+ fsCourseTrafficLogMapper.updateStatusByIds(idsToUpdate, 1);
|
|
|
|
+ System.out.println("共更新状态为1的记录数:" + idsToUpdate.size());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!allUnprocessedIds.isEmpty()) {
|
|
|
|
+ fsCourseTrafficLogMapper.updateStatusByIds(allUnprocessedIds, 3);
|
|
|
|
+ System.out.println("共更新状态为3的记录数:" + allUnprocessedIds.size());
|
|
}
|
|
}
|
|
|
|
|
|
- // 计算超出充值流量的部分
|
|
|
|
|
|
+ // 剩余的计算和输出逻辑保持不变...
|
|
Long count = fsCourseTrafficLogMapper.findRecordsNum(internetTrafficParam.getCompanyId());
|
|
Long count = fsCourseTrafficLogMapper.findRecordsNum(internetTrafficParam.getCompanyId());
|
|
- long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB)+count;
|
|
|
|
|
|
+ long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB) + count;
|
|
if (overflowTrafficKB > 0) {
|
|
if (overflowTrafficKB > 0) {
|
|
System.out.println("已使用流量超过充值流量,超出部分:" + overflowTrafficKB + " KB");
|
|
System.out.println("已使用流量超过充值流量,超出部分:" + overflowTrafficKB + " KB");
|
|
}
|
|
}
|
|
|
|
|
|
- // 输出未处理的流量信息
|
|
|
|
- long remainingUnprocessedTrafficKB = totalInternetTrafficRemaining - overflowTrafficKB;
|
|
|
|
- if (updatedTrafficKB < trafficKB) {
|
|
|
|
- System.out.println("处理完毕,未使用完的剩余流量:" + remainingUnprocessedTrafficKB + " KB");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 输出最终统计结果
|
|
|
|
System.out.println("充值总流量:" + trafficKB + " KB");
|
|
System.out.println("充值总流量:" + trafficKB + " KB");
|
|
System.out.println("已使用流量:" + updatedTrafficKB + " KB");
|
|
System.out.println("已使用流量:" + updatedTrafficKB + " KB");
|
|
long finalRemainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
|
|
long finalRemainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
|
|
System.out.println("最终剩余流量:" + finalRemainingTrafficKB + " KB");
|
|
System.out.println("最终剩余流量:" + finalRemainingTrafficKB + " KB");
|
|
|
|
+
|
|
|
|
+ // 系统配置更新逻辑保持不变...
|
|
SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
|
|
SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
|
|
- String trafficCount = null;
|
|
|
|
- if (finalRemainingTrafficKB==0){
|
|
|
|
- trafficCount = "-"+overflowTrafficKB;
|
|
|
|
- }else {
|
|
|
|
- trafficCount = String.valueOf(finalRemainingTrafficKB);
|
|
|
|
|
|
+ String trafficCount = finalRemainingTrafficKB == 0 ?
|
|
|
|
+ "-" + overflowTrafficKB : String.valueOf(finalRemainingTrafficKB);
|
|
|
|
+
|
|
|
|
+ if (ObjectUtils.isEmpty(sysConfig)) {
|
|
|
|
+ sysConfig = new SysConfig();
|
|
|
|
+ sysConfig.setConfigKey("redPacket.Traffic.config");
|
|
|
|
+ sysConfig.setConfigName("红包流量配置");
|
|
|
|
+ sysConfig.setConfigValue(trafficCount);
|
|
|
|
+ iSysConfigService.insertConfig(sysConfig);
|
|
|
|
+ } else {
|
|
|
|
+ sysConfig.setConfigValue(trafficCount);
|
|
|
|
+ iSysConfigService.updateConfig(sysConfig);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ @Override
|
|
|
|
+ public void sumTrafficlog() {
|
|
|
|
+ SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
|
|
|
|
+ Date date = new Date();
|
|
|
|
+ Long count = fsCourseTrafficLogMapper.findRecordsNumBYD(date);
|
|
|
|
+ List<Long> ids = fsCourseTrafficLogMapper.findRecordsNumByIds(date);
|
|
|
|
+ if (count<=0){
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
if (ObjectUtils.isEmpty(sysConfig)){
|
|
if (ObjectUtils.isEmpty(sysConfig)){
|
|
sysConfig = new SysConfig();
|
|
sysConfig = new SysConfig();
|
|
sysConfig.setConfigKey("redPacket.Traffic.config");
|
|
sysConfig.setConfigKey("redPacket.Traffic.config");
|
|
sysConfig.setConfigName("红包流量配置");
|
|
sysConfig.setConfigName("红包流量配置");
|
|
- sysConfig.setConfigValue(trafficCount);
|
|
|
|
|
|
+ sysConfig.setConfigValue("-"+count);
|
|
iSysConfigService.insertConfig(sysConfig);
|
|
iSysConfigService.insertConfig(sysConfig);
|
|
}else {
|
|
}else {
|
|
- sysConfig.setConfigValue(trafficCount);
|
|
|
|
|
|
+ sysConfig.setConfigValue(String.valueOf((Long.parseLong(sysConfig.getConfigValue())-count)));
|
|
iSysConfigService.updateConfig(sysConfig);
|
|
iSysConfigService.updateConfig(sysConfig);
|
|
}
|
|
}
|
|
|
|
+ fsCourseTrafficLogMapper.updateStatusByIds(ids,2);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
}
|
|
}
|