Forráskód Böngészése

修改云教室扣费人数的获取方式

hgw 3 éve
szülő
commit
61178b712f

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantAssetsInfoDao.java

@@ -21,5 +21,7 @@ public interface TenantAssetsInfoDao extends BaseMapper<TenantAssetsInfo> {
     int deductAmount(BigDecimal deductAmount, Integer tenantId);
 
     int checkDeductAmount(BigDecimal deductAmount, Integer tenantId);
+
+    Integer queryPeopleNum(Integer courseId);
 }
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -212,7 +212,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 
     private void delayCheckTenant() {
         RBucket<Object> bucket = redissonClient.getBucket("delay_check_tenant");
-        if (!bucket.trySet(1, 35L, TimeUnit.SECONDS)) {
+        if (!bucket.trySet(1, 15L, TimeUnit.SECONDS)) {
             return;
         }
         //异步
@@ -222,6 +222,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                 try {
                     Thread.sleep(3000);//每3秒触发一次
                     tenantOrderRecordService.checkTenantOrder();
+                    log.info("delayCheckTenant >>>>>  start {}", i);
                 } catch (InterruptedException e) {
                     return;
                 }

+ 22 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java

@@ -24,6 +24,7 @@ import java.math.MathContext;
 import java.math.RoundingMode;
 import java.text.ParseException;
 import java.util.*;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 /**
@@ -42,6 +43,10 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
     @Autowired
     private TenantCloudCourseRecordService tenantCloudCourseRecordService;
 
+    private final Predicate<String> VipPredicate = (o) -> Objects.equals(o, CourseSchedule.CourseScheduleType.VIP.getCode());
+
+    private final Predicate<String> PracticePredicate = (o) -> Objects.equals(o, CourseSchedule.CourseScheduleType.PRACTICE.getCode());
+
     /**
      * 手动执行未扣费的流水
      *
@@ -60,8 +65,8 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
         }
         records.forEach(record -> {
             log.info("manualDeductAmount >>>>>> {}", record);
-            //获取总人数 ,+1是算上老师
-            Integer totalPeople = record.getStudentNum() + 1;
+            //获取总人数 (算上老师
+            String totalPeople = getTotalPeople(record.getType(), record.getCourseId());
             //获取云教室规则  String人数-BigDecimal每分钟扣费标准
             Map<String, BigDecimal> rule = getRule(record.getTenantId());
             if (Objects.isNull(rule)) {
@@ -107,8 +112,8 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
             if (Objects.isNull(course.getTenantId())) {
                 return;
             }
-            //获取总人数 ,+1算上老师
-            Integer totalPeople = course.getStudentNum() + 1;
+            //获取总人数 ,+1算上老师
+            String totalPeople = getTotalPeople(course.getType().getCode(), course.getId().intValue());
             //获取云教室规则  String人数-BigDecimal每分钟扣费标准
             Map<String, BigDecimal> rule = getRule(course.getTenantId());
             if (Objects.isNull(rule)) {
@@ -117,7 +122,7 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
                 return;
             }
             //获取每分钟扣费标准
-            BigDecimal minutePrice = rule.get(String.valueOf(totalPeople));
+            BigDecimal minutePrice = rule.get(totalPeople);
             if (Objects.isNull(minutePrice)) {
                 //没有这个扣费标准,写未扣费流水记录
                 insertRecord(course, BigDecimal.ZERO, 3);
@@ -159,9 +164,21 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
         }
         return dto.stream()
                 .filter(c -> c.getTeachMode().equals(TeachModeEnum.ONLINE))
+                .filter(c -> VipPredicate.or(PracticePredicate).test(c.getType().getCode()))
                 .collect(Collectors.toList());
     }
 
+    private String getTotalPeople(String type, Integer courseId) {
+        String result = "2";
+        if (VipPredicate.test(type)) {
+            result = Optional.ofNullable(courseId)
+                    .map(baseMapper::queryPeopleNum)
+                    .map(String::valueOf)
+                    .orElse(result);
+        }
+        return result;
+    }
+
     private Map<String, BigDecimal> getRule(Integer tenantId) {
         //查询云教室扣费标准
         TenantConfig tenantConfig = tenantConfigService.getOne(new WrapperUtil<TenantConfig>()

+ 3 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -107,6 +107,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         if (!bucket.trySet(1, 3L, TimeUnit.SECONDS)) {
             return;
         }
+        log.info("delayCheckTenant  checkTenantOrder>>>>>");
         List<TenantOrderRecord> list = this.list(new WrapperUtil<TenantOrderRecord>().queryWrapper()
                 .isNotNull("trans_no_")
                 .eq("order_state_", 0));
@@ -140,9 +141,6 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         bucket.delete();
     }
 
-    //丢弃5分钟之前的订单 300000 = 5 * 60秒 * 1000
-    long exTime = 300000L;
-
     //主动去第三方查询订单状态
     private void checkTransOrderState(TenantOrderRecord orderRecord) {
         if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
@@ -162,7 +160,8 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
                     } else {
                         long orderTime = orderRecord.getCreatedTime().getTime();//订单创建时间
                         long nowTime = new Date().getTime();
-                        //丢弃5分钟之前的订单
+                        //丢弃5分钟之前的订单 300000 = 5 * 60秒 * 1000
+                        long exTime = 300000L;
                         if (nowTime - orderTime > exTime) {
                             orderRecord.setOrderState(2);
                         }

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/TenantAssetsInfoMapper.xml

@@ -38,4 +38,13 @@
           and balance_  <![CDATA[ >= ]]> #{deductAmount}
     </update>
 
+    <select id="queryPeopleNum" parameterType="integer" resultType="integer">
+        select c.student_num_ +1
+        from course_schedule as a
+                 left join vip_group as b
+                           on a.music_group_id_ = b.id_
+                 left join vip_group_category as c on b.vip_group_category_id_ = c.id_
+        where a.id_ =#{courseId}
+    </select>
+
 </mapper>