Ver Fonte

Merge branch 'zx_online_update_1218' of http://git.dayaedu.com/yonge/cooleshow into feature/1219_opt

# Conflicts:
#	cooleshow-app/src/main/java/com/yonge/cooleshow/student/task/TaskController.java
zouxuan há 4 meses atrás
pai
commit
bb1e34698c

+ 134 - 35
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -6,7 +6,9 @@ import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.payment.util.DistributedLock;
 import com.yonge.toolset.utils.date.DateUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
@@ -32,6 +34,7 @@ import java.util.concurrent.TimeUnit;
 @RestController
 @RequestMapping("${app-config.url.admin:}/task")
 @ApiIgnore
+@Slf4j
 public class TaskController extends BaseController {
     @Autowired
     private UserOrderService userOrderService;
@@ -82,6 +85,7 @@ public class TaskController extends BaseController {
 
     @Autowired
     private UserMusicService userMusicService;
+
     /***
      * 轮询用户订单
      * @author liweifan
@@ -90,9 +94,17 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/pollingOrder")
     public HttpResponseResult pollingOrder() {
-        userOrderService.pollingOrder();
-        userPaymentCoreService.scanPaymentTimeoutOrderRecord();
-        userPaymentCoreService.scanRefundOrderRecord();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("pollingOrder", () -> {
+            try {
+
+                userOrderService.pollingOrder();
+                userPaymentCoreService.scanPaymentTimeoutOrderRecord();
+                userPaymentCoreService.scanRefundOrderRecord();
+            }catch (Exception e){
+                log.error("pollingOrder error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return succeed();
     }
 
@@ -104,24 +116,48 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/daysTask")
     public HttpResponseResult<Boolean> daysTask() {
-        //超过天数无琴房课的解除绑定关系
-        userBindingTeacherService.unbindTask();
-        //平台老师结算
-        platformCashAccountRecordService.updateWaitRecord();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("daysTask", () -> {
+            try {
+
+                //超过天数无琴房课的解除绑定关系
+                userBindingTeacherService.unbindTask();
+                //平台老师结算
+                platformCashAccountRecordService.updateWaitRecord();
+            }catch (Exception e){
+                log.error("daysTask error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return succeed(true);
     }
 
     // 老师作业布置
     @PostMapping(value = "/teacherSend")
     public HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework() {
-        courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("teacherSend", () -> {
+            try {
+
+                courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
+            }catch (Exception e){
+                log.error("teacherSend error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
     //老师课酬
     @PostMapping(value = "/teacherEarning")
     public HttpResponseResult<Object> sendTeacherEarning() {
-        userAccountRecordService.sendTeacherEarning();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("teacherEarning", () -> {
+            try {
+
+                userAccountRecordService.sendTeacherEarning();
+            }catch (Exception e){
+                log.error("teacherEarning error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -142,14 +178,30 @@ public class TaskController extends BaseController {
     //营销活动
     @PostMapping(value = "/activityState")
     public HttpResponseResult<Object> activityState() {
-        activityPlanService.activityState();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("activityState", () -> {
+            try {
+
+                activityPlanService.activityState();
+            }catch (Exception e){
+                log.error("activityState error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
     //活动中定时轮询
     @PostMapping(value = "/activityIng")
     public HttpResponseResult<Object> activityIng() {
-        activityPlanService.activityIng();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("activityIng", () -> {
+            try {
+
+                activityPlanService.activityIng();
+            }catch (Exception e){
+                log.error("activityIng error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -161,7 +213,14 @@ public class TaskController extends BaseController {
     @GetMapping("/test")
     public HttpResponseResult<Object> test(@RequestParam("activityId") Long activityId) {
 
-        activityPlanEvaluationService.successActivity(activityId);
+        DistributedLock.of(redissonClient).runIfLockCanGet("test", () -> {
+            try {
+
+                activityPlanEvaluationService.successActivity(activityId);
+            }catch (Exception e){
+                log.error("test error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -172,15 +231,21 @@ public class TaskController extends BaseController {
     @GetMapping("/virtualNumber")
     public HttpResponseResult<Object> virtualNumber() {
 
-        // 曲目
-        musicSheetService.setVirtualNumber();
-        // 专辑
-        musicAlbumService.setVirtualNumber();
-        // 视频课 暂时不做课程数据
-        // videoLessonGroupService.setVirtualNumber();
-        // 个人风采
-        teacherStyleVideoService.setVirtualNumber();
-
+        DistributedLock.of(redissonClient).runIfLockCanGet("virtualNumber", () -> {
+            try {
+
+                // 曲目
+                musicSheetService.setVirtualNumber();
+                // 专辑
+                musicAlbumService.setVirtualNumber();
+                // 视频课 暂时不做课程数据
+                // videoLessonGroupService.setVirtualNumber();
+                // 个人风采
+                teacherStyleVideoService.setVirtualNumber();
+            }catch (Exception e){
+                log.error("virtualNumber error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -189,10 +254,15 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/batchSending")
     public HttpResponseResult<Object> batchSending() {
+        DistributedLock.of(redissonClient).runIfLockCanGet("batchSending", () -> {
+            try {
 
-        // 群发消息定时
-        customerServiceBatchSendingService.scheduleSendMessage();
-
+                // 群发消息定时
+                customerServiceBatchSendingService.scheduleSendMessage();
+            }catch (Exception e){
+                log.error("batchSending error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -202,10 +272,15 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/destroyLiveRoom")
     public HttpResponseResult<Object> destroyLiveRoom() {
+        DistributedLock.of(redissonClient).runIfLockCanGet("destroyLiveRoom", () -> {
+            try {
 
-        // 群发消息定时
-        liveRoomService.destroyLiveRoom();
-
+                // 群发消息定时
+                liveRoomService.destroyLiveRoom();
+            }catch (Exception e){
+                log.error("destroyLiveRoom error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -231,10 +306,15 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/sendPlatformAuditMessage")
     public HttpResponseResult<Object> sendPlatformAuditMessage() {
+        DistributedLock.of(redissonClient).runIfLockCanGet("sendPlatformAuditMessage", () -> {
+            try {
 
-        // 群发消息定时
-        tenantUnbindRecordService.sendPlatformAuditMessage();
-
+                // 群发消息定时
+                tenantUnbindRecordService.sendPlatformAuditMessage();
+            }catch (Exception e){
+                log.error("sendPlatformAuditMessage error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -244,10 +324,15 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/sendTenantAlbumMessage")
     public HttpResponseResult<Object> sendTenantAlbumMessage() {
+        DistributedLock.of(redissonClient).runIfLockCanGet("sendTenantAlbumMessage", () -> {
+            try {
 
-        // 群发消息定时
-        userTenantAlbumRecordService.sendTenantAlbumMessage();
-
+                // 群发消息定时
+                userTenantAlbumRecordService.sendTenantAlbumMessage();
+            }catch (Exception e){
+                log.error("sendTenantAlbumMessage error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
@@ -257,12 +342,26 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/workOverdue")
     public void workOverdue(){
-        userMusicService.workOverdue();
+        DistributedLock.of(redissonClient).runIfLockCanGet("workOverdue", () -> {
+            try {
+
+                userMusicService.workOverdue();
+            }catch (Exception e){
+                log.error("workOverdue error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
     }
 
     //课程开始前一20分组提醒
     @GetMapping("/courseStartRemind")
     public void courseStartRemind(){
-        courseScheduleService.courseStartRemind();
+        DistributedLock.of(redissonClient).runIfLockCanGet("courseStartRemind", () -> {
+            try {
+
+                courseScheduleService.courseStartRemind();
+            }catch (Exception e){
+                log.error("courseStartRemind error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
     }
 }

+ 38 - 6
cooleshow-app/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

@@ -4,6 +4,9 @@ import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.payment.util.DistributedLock;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -12,6 +15,7 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @Author: liweifan
@@ -20,6 +24,7 @@ import java.util.List;
 @RestController
 @RequestMapping("${app-config.url.student:}/task")
 @ApiIgnore
+@Slf4j
 public class TaskController extends BaseController {
     @Resource
     private StudentTotalService studentTotalService;
@@ -31,6 +36,10 @@ public class TaskController extends BaseController {
     private DiscountCardRecordService discountCardRecordService;
     @Resource
     private CourseRepliedService repliedService;
+
+
+    @Autowired
+    private RedissonClient redissonClient;
     /***
      * 查询所有学生统计数据
      * @author liweifan
@@ -50,10 +59,17 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/halfHourTask")
     public HttpResponseResult<Boolean> halfHourTask() {
-        //会员卡到期提醒
-        vipCardRecordService.pollExpireMsg();
-        //畅学卡到期提醒
-        discountCardRecordService.pollExpireMsg();
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("halfHourTask", () -> {
+            try {
+                //会员卡到期提醒
+                vipCardRecordService.pollExpireMsg();
+                //畅学卡到期提醒
+                discountCardRecordService.pollExpireMsg();
+            }catch (Exception e){
+                log.error("halfHourTask error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return succeed(true);
     }
 
@@ -67,7 +83,15 @@ public class TaskController extends BaseController {
     @GetMapping("/studentFirstBuy")
     public HttpResponseResult<Boolean> studentFirstBuy() {
         //统计学员第一次购买时间
-        studentTimeService.totalStudentTime();
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("studentFirstBuy", () -> {
+            try {
+
+                studentTimeService.totalStudentTime();
+            }catch (Exception e){
+                log.error("studentFirstBuy error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return succeed(true);
     }
 
@@ -78,7 +102,15 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/noRepliedTeacher")
     public HttpResponseResult noRepliedTeacher() {
-        repliedService.noRepliedTeacher();
+
+        DistributedLock.of(redissonClient).runIfLockCanGet("noRepliedTeacher", () -> {
+            try {
+
+                repliedService.noRepliedTeacher();
+            }catch (Exception e){
+                log.error("noRepliedTeacher error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return succeed();
     }
 }

+ 95 - 8
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java

@@ -4,7 +4,10 @@ import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.payment.util.DistributedLock;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -12,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @Author: liweifan
@@ -20,6 +24,7 @@ import java.util.List;
 @RestController
 @RequestMapping("${app-config.url.teacher:}/task")
 @ApiIgnore
+@Slf4j
 public class TaskController extends BaseController {
     @Autowired
     private TeacherTotalService teacherTotalService;
@@ -33,6 +38,8 @@ public class TaskController extends BaseController {
     @Autowired
     private DivBackRecordService divBackRecordService;
 
+    @Autowired
+    private RedissonClient redissonClient;
     /***
      * 查询所有老师统计数据
      * @author liweifan
@@ -41,7 +48,19 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/queryTeacherTotal")
     public HttpResponseResult<List<TeacherTotal>> queryTeacherTotal() {
-        return succeed(teacherTotalService.queryTeacherTotal());
+
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("queryTeacherTotal", () -> {
+            try {
+
+                 succeed(teacherTotalService.queryTeacherTotal());
+            }catch (Exception e){
+                log.error("queryTeacherTotal error", e);
+            }
+
+
+        }, 10L, TimeUnit.SECONDS);
+        return succeed();
     }
 
     /**
@@ -50,20 +69,52 @@ public class TaskController extends BaseController {
      */
     @GetMapping("/opsCourseGroup")
     public HttpResponseResult<Object> opsCourseGroup() {
-        courseGroupService.opsCourseGroup();
+
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("opsCourseGroup", () -> {
+            try {
+
+                courseGroupService.opsCourseGroup();
+            }catch (Exception e){
+                log.error("opsCourseGroup error", e);
+            }
+
+
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
     @ApiOperation("定时任务-销毁房间-直播间")
     @GetMapping("/destroyExpiredLiveRoom")
     public void destroyExpiredLiveRoom() {
-        liveRoomService.destroyExpiredLiveRoom();
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("destroyExpiredLiveRoom", () -> {
+            try {
+
+                liveRoomService.destroyExpiredLiveRoom();
+            }catch (Exception e){
+                log.error("destroyExpiredLiveRoom error", e);
+            }
+
+
+        }, 10L, TimeUnit.SECONDS);
     }
 
     @ApiOperation("定时任务-创建房间-直播间")
     @GetMapping("/createCourseLiveRoom")
     public void createCourseLiveRoom() {
-        liveRoomService.createCourseLiveRoom();
+
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("createCourseLiveRoom", () -> {
+            try {
+
+                liveRoomService.createCourseLiveRoom();
+            }catch (Exception e){
+                log.error("createCourseLiveRoom error", e);
+            }
+
+
+        }, 10L, TimeUnit.SECONDS);
     }
 
     @GetMapping("/getRedisValueByKey")
@@ -73,26 +124,62 @@ public class TaskController extends BaseController {
 
     @GetMapping("/courseRemind")
     public HttpResponseResult<Object> courseRemind() {
-        scheduleService.courseRemind();
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("courseRemind", () -> {
+            try {
+
+                scheduleService.courseRemind();
+            }catch (Exception e){
+                log.error("courseRemind error", e);
+            }
+
+
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
     @GetMapping("/courseStatus")
     public HttpResponseResult<Object> courseStatus() {
-        scheduleService.scheduleTask();
+
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("courseStatus", () -> {
+            try {
+
+                scheduleService.scheduleTask();
+            }catch (Exception e){
+                log.error("courseStatus error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
     @GetMapping("/teacherSalary")
     public HttpResponseResult<Object> teacherSalary() {
-        scheduleService.teacherSalaryTask();
+
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("teacherSalary", () -> {
+            try {
+
+                scheduleService.teacherSalaryTask();
+            }catch (Exception e){
+                log.error("teacherSalary error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 
 
     @GetMapping("/divBack")
     public HttpResponseResult<Object> divBack() {
-        divBackRecordService.divBack();
+        // 并发执行锁
+        DistributedLock.of(redissonClient).runIfLockCanGet("divBack", () -> {
+            try {
+
+                divBackRecordService.divBack();
+            }catch (Exception e){
+                log.error("divBack error", e);
+            }
+        }, 10L, TimeUnit.SECONDS);
         return HttpResponseResult.succeed();
     }
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -589,7 +589,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                         vo.setSubjectName(subjectList.stream().map(Subject::getName).collect(Collectors.joining(",")));
                     }
                 }
-                vo.setImUserId(imGroupService.getImUserId(String.valueOf(e),
+                vo.setImUserId(imGroupService.getImUserId(String.valueOf(e.getUserId()),
                         ClientEnum.STUDENT.name()));
                 result.add(vo);
             });

+ 20 - 12
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java

@@ -40,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -49,29 +50,29 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
 
     private static final Logger log = LoggerFactory.getLogger(CourseHomeworkServiceImpl.class);
 
-    @Autowired
+    @Resource
     @Lazy
     private CourseScheduleService courseScheduleService;
 
-    @Autowired
+    @Resource
     private StudentCourseHomeworkService studentCourseHomeworkService;
 
-    @Autowired
+    @Resource
     private SysMessageService sysMessageService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
-    @Autowired
+    @Resource
     private ImGroupService imGroupService;
 
-    @Autowired
+    @Resource
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 
-    @Autowired
+    @Resource
     private SysConfigService sysConfigService;
 
-    @Autowired
+    @Resource
     private WordFilter wordFilter;
 
 	@Override
@@ -242,17 +243,24 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
     @Transactional(rollbackFor = Exception.class)
     public boolean decorateCourseHomework(CourseHomeworkSaveDto saveDto) {
         // 检查 老师 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
-        checkCourseSchedule(saveDto.getCourseScheduleId());
-
+        CourseSchedule courseSchedule = courseScheduleService.getById(saveDto.getCourseScheduleId());
+        // 2. 检查课程结束
+        if (!CourseScheduleEnum.COMPLETE.getCode().equals(courseSchedule.getStatus())) {
+            throw  new BizException("课程未正常完成,不能布置课后作业");
+        }
         // 检查已经布置了课后作业
         CourseHomework homework = checkHasHomework(saveDto.getCourseScheduleId());
         if (homework != null) {
             saveDto.setCourseHomeworkId(homework.getId());
         }
-
-        CourseSchedule courseSchedule = courseScheduleService.getById(saveDto.getCourseScheduleId());
         // 创建课后作业
         CourseHomework courseHomework = getCourseHomework(saveDto, courseSchedule);
+        //获取学生人数
+        List<CourseScheduleStudentPayment> studentPaymentList = courseScheduleStudentPaymentService.getByCourseId(
+                courseSchedule.getId());
+        if (!CollectionUtils.isEmpty(studentPaymentList)) {
+            courseHomework.setExpectNum(studentPaymentList.size());
+        }
 
         boolean flag = this.saveOrUpdate(courseHomework);
 

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountRecordServiceImpl.java

@@ -210,6 +210,21 @@ public class UserAccountRecordServiceImpl extends ServiceImpl<UserAccountRecordD
                 bizIds.add(userOrderDetailVo.getBizId());
             }
             records.addAll(baseMapper.selectRecordByOrderDetail(userOrderDetailVo.getOrderNo(),AccountBizTypeEnum.LIVE, bizIds));
+        }else if(GoodTypeEnum.GROUP.equals(userOrderDetailVo.getGoodType())){
+
+            List<Long> groupId = Arrays.asList(userOrderDetailVo.getBizId());
+            records.addAll(baseMapper.selectRecordByOrderDetail(userOrderDetailVo.getOrderNo(), AccountBizTypeEnum.GROUP_SHARE, groupId));
+
+            if (userOrderDetailVo.getPaymentVersion().equals(EPaymentVersion.V1)  || !tenantFlag) {
+                //查询课程组下所有课程id
+                List<CourseSchedule> cancel = courseScheduleService.list(Wrappers.<CourseSchedule>lambdaQuery()
+                        .eq(CourseSchedule::getCourseGroupId, userOrderDetailVo.getBizId())
+                );
+                cancel.stream().forEach(o -> bizIds.add(o.getId()));
+            } else {
+                bizIds.add(userOrderDetailVo.getBizId());
+            }
+            records.addAll(baseMapper.selectRecordByOrderDetail(userOrderDetailVo.getOrderNo(),AccountBizTypeEnum.GROUP, bizIds));
         }
         return records;
     }

+ 59 - 25
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java

@@ -341,81 +341,115 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
         if (total.getTotalInAmount().doubleValue() > 0) {
             total.setPracticeAmount(practiceAmount);
             total.setPracticeRate(total.getPracticeAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setVipCourseAmount(vipCourseAmount);
             total.setVipCourseRate(total.getVipCourseAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setLiveAmount(liveAmount);
             total.setLiveRate(total.getLiveAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
 
             total.setGroupAmount(groupAmount);
             total.setGroupRate(total.getGroupAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setVideoAmount(videoAmount);
             total.setVideoRate(total.getVideoAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setMusicAmount(musicAmount);
             total.setMusicRate(total.getMusicAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setLiveShareAmount(liveShareAmount);
             total.setLiveShareRate(total.getLiveShareAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setVideoShareAmount(videoShareAmount);
             total.setVideoShareRate(total.getVideoShareAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setMusicShareAmount(musicShareAmount);
             total.setMusicShareRate(total.getMusicShareAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setAlbumShareAmount(albumShareAmount);
             total.setAlbumShareRate(total.getAlbumShareAmount()
-                                         .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                                         .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                                          .multiply(new BigDecimal("100")));
 
             total.setVipShareAmount(vipShareAmount);
             total.setVipShareRate(total.getVipShareAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setMallShareAmount(mallShareAmount);
             total.setMallShareRate(total.getMallShareAmount()
-                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP)
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
                     .multiply(new BigDecimal("100")));
 
             total.setActiRegistShareAmount(actiRegistShareAmount);
             total.setActiRegistShareRate(
-                    BigDecimal.valueOf(100)
-                            .subtract(total.getPracticeRate())
-                            .subtract(total.getVipCourseRate())
-                            .subtract(total.getLiveRate())
-                            .subtract(total.getGroupRate())
-                            .subtract(total.getVideoRate())
-                            .subtract(total.getMusicRate())
-                            .subtract(total.getMusicShareRate())
-                            .subtract(total.getLiveShareRate())
-                            .subtract(total.getVideoShareRate())
-                            .subtract(total.getAlbumShareRate())
-                            .subtract(total.getVipShareRate())
-                            .subtract(total.getMallShareRate())
+                    total.getActiRegistShareAmount()
+                            .divide(total.getTotalInAmount(), 4, RoundingMode.DOWN)
+                            .multiply(new BigDecimal("100"))
             );
+
+            BigDecimal subtract = BigDecimal.valueOf(100)
+                    .subtract(total.getPracticeRate())
+                    .subtract(total.getVipCourseRate())
+                    .subtract(total.getLiveRate())
+                    .subtract(total.getGroupRate())
+                    .subtract(total.getVideoRate())
+                    .subtract(total.getMusicRate())
+                    .subtract(total.getMusicShareRate())
+                    .subtract(total.getLiveShareRate())
+                    .subtract(total.getVideoShareRate())
+                    .subtract(total.getAlbumShareRate())
+                    .subtract(total.getVipShareRate())
+                    .subtract(total.getMallShareRate())
+                    .subtract(total.getActiRegistShareAmount());
+            if (subtract.compareTo(BigDecimal.ZERO) > 0) {
+                if (total.getVipCourseAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setVipCourseRate(total.getVipCourseRate().add(subtract));
+                } else if (total.getPracticeAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setPracticeRate(total.getPracticeRate().add(subtract));
+                } else if (total.getLiveAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setLiveRate(total.getLiveRate().add(subtract));
+                } else if (total.getGroupAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setGroupRate(total.getGroupRate().add(subtract));
+                } else if (total.getVideoAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setVideoRate(total.getVideoRate().add(subtract));
+                } else if (total.getMusicAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setMusicRate(total.getMusicRate().add(subtract));
+                } else if (total.getMusicShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setMusicShareRate(total.getMusicShareRate().add(subtract));
+                } else if (total.getLiveShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setLiveShareRate(total.getLiveShareRate().add(subtract));
+                } else if (total.getVideoShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setVideoShareRate(total.getVideoShareRate().add(subtract));
+                } else if (total.getAlbumShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setAlbumShareRate(total.getAlbumShareRate().add(subtract));
+                } else if (total.getVipShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setVipShareRate(total.getVipShareRate().add(subtract));
+                } else if (total.getMallShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setMallShareRate(total.getMallShareRate().add(subtract));
+                } else if (total.getActiRegistShareAmount().compareTo(BigDecimal.ZERO) >0) {
+                    total.setActiRegistShareRate(total.getActiRegistShareRate().add(subtract));
+                }
+            }
         }
         total.setInfoList(infoList);
         return HttpResponseResult.succeed(total);

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -97,6 +97,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
     private void init() {
         /**********退费单生成前******************/
         refundSuccess.put(GoodTypeEnum.LIVE, courseGroupService::refundSuccess);
+        refundSuccess.put(GoodTypeEnum.GROUP, courseGroupService::refundSuccess);
     }
 
     @Override