Просмотр исходного кода

红包扣减修复类型、看课缓存表确认有看课数据后才存入课程流量表

yjwang 1 месяц назад
Родитель
Сommit
5af5a42b7a

+ 1 - 1
fs-admin/src/main/java/com/fs/his/controller/FsCompanyDeductController.java

@@ -186,8 +186,8 @@ public class FsCompanyDeductController extends BaseController
                 deptConfig.setRedPackage(nowMoney);
                 deptConfig.setUpdateBy(loginUser.getUsername());
                 deptConfig.setUpdateTime(new Date());
-                sysDeptConfigLogService.addLog(deptConfig.getDeptId(), 1, 0, deduct.getMoney().toString(), redPackage.toString(), nowMoney.toString(), loginUser.getUsername(), "扣减公司红包");
                 sysDeptConfigService.updateById(deptConfig);
+                sysDeptConfigLogService.addLog(deptConfig.getDeptId(), 0, 0, deduct.getMoney().toString(), redPackage.toString(), nowMoney.toString(), loginUser.getUsername(), "扣减公司红包返回部门");
             }
         }
         deduct.setAuditTime(new Date());

+ 3 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -559,4 +559,7 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
 
     // 统计当天各公司的观看人数和完播人数, 存到redis中,定时任务每 ? 分钟执行一次
     List<WatchCourseStatisticsResultDTO> watchCourseStatisticsGroupByCompany(@Param("params") Map<String, Object> params);
+
+    @Select("select * from fs_course_watch_log where user_id = #{userId} and video_id = #{videoId} and period_id = #{periodId}")
+    FsCourseWatchLog getWatchCourseVideoInfo(@Param("userId") Long userId, @Param("videoId") Long videoId, @Param("periodId") Long periodId);
 }

+ 36 - 15
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1001,22 +1001,26 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 return R.error("公司不存在");
             }
 
-            // 计算流量
-            BigDecimal result = param.getBufferRate().divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP);
-            BigDecimal longAsBigDecimal = BigDecimal.valueOf(video.getFileSize());
-            long roundedResult = result.multiply(longAsBigDecimal).setScale(0, RoundingMode.HALF_UP).longValue();
-            trafficLog.setInternetTraffic(roundedResult);
-            // 获取课程所属项目id
-            FsUserCourse fsUserCourse = fsUserCourseMapper.selectFsUserCourseByCourseId(param.getCourseId());
-            if(fsUserCourse != null){
-                trafficLog.setProject(fsUserCourse.getProject());
-            }
+            //验证看课记录是否存在
+            FsCourseWatchLog log = courseWatchLogMapper.getWatchCourseVideoInfo(param.getUserId(), param.getVideoId(), param.getPeriodId());
+            if(log != null){
+                // 计算流量
+                BigDecimal result = param.getBufferRate().divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP);
+                BigDecimal longAsBigDecimal = BigDecimal.valueOf(video.getFileSize());
+                long roundedResult = result.multiply(longAsBigDecimal).multiply(new BigDecimal("1.4")).setScale(0, RoundingMode.HALF_UP).longValue();
+                trafficLog.setInternetTraffic(roundedResult);
+                // 获取课程所属项目id
+                FsUserCourse fsUserCourse = fsUserCourseMapper.selectFsUserCourseByCourseId(param.getCourseId());
+                if(fsUserCourse != null){
+                    trafficLog.setProject(fsUserCourse.getProject());
+                }
 
-            // 处理 UUID 为空的情况
-            if (StringUtils.isNotEmpty(trafficLog.getUuId())) {
-                // 插入或更新
-                asyncDeductTraffic(company, trafficLog);
-                fsCourseTrafficLogMapper.insertOrUpdateTrafficLog(trafficLog);
+                // 处理 UUID 为空的情况
+                if (StringUtils.isNotEmpty(trafficLog.getUuId())) {
+                    // 插入或更新
+                    asyncDeductTraffic(company, trafficLog);
+                    fsCourseTrafficLogMapper.insertOrUpdateTrafficLog(trafficLog);
+                }
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -3647,5 +3651,22 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
     }
 
+    public static boolean isWithin20Minutes(Date createTime) {
+        if (createTime == null) {
+            return false;
+        }
+
+        // 转换为LocalDateTime
+        LocalDateTime createLocalDateTime = createTime.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+        LocalDateTime now = LocalDateTime.now();
+
+        // 计算时间差
+        Duration duration = Duration.between(createLocalDateTime, now);
+        long minutesDifference = Math.abs(duration.toMinutes());
+
+        return minutesDifference <= 20;
+    }
 }