Selaa lähdekoodia

调整业务逻辑

yfh 19 tuntia sitten
vanhempi
commit
145743fb9d

+ 1 - 1
fs-admin/src/main/java/com/fs/course/controller/FsCourseTrafficLogController.java

@@ -154,7 +154,7 @@ public class FsCourseTrafficLogController extends BaseController
     public R rechargeTraffic(@RequestBody InternetTrafficParam internetTrafficParam) {
 
         fsCourseTrafficLogService.updateTrafficStatus(internetTrafficParam);
-        return R.ok().put("data", null);  // 返回计算结果
+        return R.ok();  // 返回计算结果
     }
 
 }

+ 22 - 0
fs-admin/src/main/java/com/fs/task/trafficlog/TrafficlogTask.java

@@ -0,0 +1,22 @@
+package com.fs.task.trafficlog;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fs.course.service.IFsCourseTrafficLogService;
+import com.fs.crm.service.ICrmCustomerService;
+import com.fs.system.domain.SysConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("trafficlogTask")
+@Slf4j
+public class TrafficlogTask {
+    @Autowired
+    private IFsCourseTrafficLogService fsCourseTrafficLogService;
+    /**
+     * 汇总crm订单成交总额
+     */
+    public void sumTrafficlog(){
+//        fsCourseTrafficLogService.sumTrafficlog();
+    }
+}

+ 4 - 3
fs-admin/src/test/java/com/fs/course/controller/AdHtmlClickLogServiceImplTest.java

@@ -21,8 +21,9 @@ public class AdHtmlClickLogServiceImplTest {
 
     @Test
     public void test(){
-        InternetTrafficParam internetTrafficParam = new InternetTrafficParam();
-        internetTrafficParam.setAccount("1");
-        fsCourseTrafficLogService.updateTrafficStatus(internetTrafficParam);
+//        InternetTrafficParam internetTrafficParam = new InternetTrafficParam();
+//        internetTrafficParam.setAccount("1");
+//        fsCourseTrafficLogService.updateTrafficStatus(internetTrafficParam);
+        fsCourseTrafficLogService.sumTrafficlog();
     }
 }

+ 17 - 5
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java

@@ -1,5 +1,6 @@
 package com.fs.course.mapper;
 
+import java.util.Date;
 import java.util.List;
 import com.fs.course.domain.FsCourseTrafficLog;
 import com.fs.course.param.FsCourseTrafficLogParam;
@@ -103,19 +104,19 @@ public interface FsCourseTrafficLogMapper
     // 按创建时间查询未使用的流量记录(用于分批更新)
     @Select("<script>" +
             "SELECT COALESCE(sum(internet_traffic), 0) FROM fs_course_traffic_log " +
-            "WHERE status = 0" +
+            "WHERE status &lt;&gt;1" +
             "<if test='companyId != null'>AND company_id = #{companyId}</if> " +
             "</script>")
     Long findRecordsNum(@Param("companyId") Long companyId);
 
     // 批量更新状态
     @Update("<script>" +
-            "UPDATE fs_course_traffic_log SET status = 1 WHERE log_id IN " +
+            "UPDATE fs_course_traffic_log SET status = #{status} WHERE log_id IN " +
             "<foreach item='id' collection='ids' open='(' separator=',' close=')'>" +
             "#{id}" +
             "</foreach>" +
             "</script>")
-    int updateStatusByIds(@Param("ids") List<Long> ids);
+    int updateStatusByIds(@Param("ids") List<Long> ids,@Param("status")Integer status);
 
     @Select("<script>" +
             "SELECT internet_traffic FROM fs_course_traffic_log WHERE log_id IN " +
@@ -128,7 +129,7 @@ public interface FsCourseTrafficLogMapper
     // 新增带流量字段的记录查询(按公司ID)
     @Select("<script>" +
             "SELECT log_id, internet_traffic FROM fs_course_traffic_log " +
-            "WHERE status = 0" +
+            "WHERE status &lt;&gt;1" +
             "<if test='companyId != null'>AND company_id = #{companyId}</if> " +
             "ORDER BY create_time ASC " +
             "LIMIT #{offset}, #{pageSize}" +
@@ -137,6 +138,17 @@ public interface FsCourseTrafficLogMapper
             @Param("companyId") Long companyId,
             @Param("offset") int offset,
             @Param("pageSize") int pageSize);
+    @Select("<script>" +
+            "SELECT COALESCE(sum(internet_traffic), 0) FROM fs_course_traffic_log " +
+            "WHERE status =0" +
+            "<if test='createTime != null'>AND create_time &lt;= #{createTime}</if> " +
+            "</script>")
+    Long findRecordsNumBYD( @Param("createTime") Date createTime);
 
-
+    @Select("<script>" +
+            "SELECT log_id FROM fs_course_traffic_log " +
+            "WHERE status =0" +
+            "<if test='createTime != null'>AND create_time &lt;= #{createTime}</if> " +
+            "</script>")
+    List<Long> findRecordsNumByIds( @Param("createTime") Date createTime);
 }

+ 5 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsCourseTrafficLogService.java

@@ -67,4 +67,9 @@ public interface IFsCourseTrafficLogService
     List<FsCourseTrafficLogListVO> selectTrafficNew(FsCourseTrafficLogParam param);
 
     void updateTrafficStatus(InternetTrafficParam internetTrafficParam);
+
+    /**
+     * 定时统计流量总数
+     */
+    void sumTrafficlog();
 }

+ 88 - 58
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java

@@ -98,17 +98,7 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
     public int insertFsCourseTrafficLog(FsCourseTrafficLog fsCourseTrafficLog)
     {
         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);
     }
 
@@ -197,23 +187,25 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
         System.out.println("充值金额:" + account + " 元,对应可用流量:" + trafficKB + " KB");
 
         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) {
             loopCount++;
-            int offset = pageNum * pageSize; // 计算当前查询的偏移量
+            int offset = pageNum * pageSize;
 
             // 查询当前分页的数据
             List<TrafficRecord> trafficRecords =
-                    fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(internetTrafficParam.getCompanyId(), offset, pageSize);
+                    fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
+                            internetTrafficParam.getCompanyId(), offset, pageSize);
 
             if (trafficRecords.isEmpty()) {
                 break;
@@ -221,26 +213,22 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 
             // 处理当前批次的数据
             for (TrafficRecord record : trafficRecords) {
-                if (updatedTrafficKB >= trafficKB) break;  // 达到目标流量则退出
-
                 Long logId = record.getLogId();
+
                 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 {
                 Thread.sleep(100);
             } catch (InterruptedException e) {
@@ -248,55 +236,97 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
                 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()) {
-            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 overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB)+count;
+        long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB) + count;
         if (overflowTrafficKB > 0) {
             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("已使用流量:" + updatedTrafficKB + " KB");
         long finalRemainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
         System.out.println("最终剩余流量:" + finalRemainingTrafficKB + " KB");
+
+        // 系统配置更新逻辑保持不变...
         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)){
             sysConfig = new SysConfig();
             sysConfig.setConfigKey("redPacket.Traffic.config");
             sysConfig.setConfigName("红包流量配置");
-            sysConfig.setConfigValue(trafficCount);
+            sysConfig.setConfigValue("-"+count);
             iSysConfigService.insertConfig(sysConfig);
         }else {
-            sysConfig.setConfigValue(trafficCount);
+            sysConfig.setConfigValue(String.valueOf((Long.parseLong(sysConfig.getConfigValue())-count)));
             iSysConfigService.updateConfig(sysConfig);
         }
+        fsCourseTrafficLogMapper.updateStatusByIds(ids,2);
     }
 
 
-
-
-
 }