Procházet zdrojové kódy

Merge branch 'feature/0721-tenant' into develop

# Conflicts:
#	cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
yuanliang před 1 rokem
rodič
revize
338185ce72
16 změnil soubory, kde provedl 217 přidání a 34 odebrání
  1. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherSubmitReq.java
  2. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java
  3. 4 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  4. 8 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  5. 0 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  6. 43 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  7. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  8. 16 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  9. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  10. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  11. 19 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  12. 6 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  13. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  14. 22 2
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  15. 9 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  16. 21 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/TenantActivationCodeVo.java

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherSubmitReq.java

@@ -59,6 +59,9 @@ public class TeacherSubmitReq implements Serializable {
     @ApiModelProperty("邀请码验证码")
     @ApiModelProperty("邀请码验证码")
     private String code;
     private String code;
 
 
+    @ApiModelProperty("老师头像")
+    private String avatar;
+
     public Long getUserId() {
     public Long getUserId() {
         return userId;
         return userId;
     }
     }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java

@@ -6,7 +6,6 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
-import org.springframework.transaction.annotation.Transactional;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -76,4 +75,6 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
                           Long tenantId, Long userId, Long tenantAlbumPurchaseId);
                           Long tenantId, Long userId, Long tenantAlbumPurchaseId);
 
 
     void activeById(String id, Long userId);
     void activeById(String id, Long userId);
+
+    void resend(String code, Long userId, Long tenantId, Long tenantAlbumPurchaseId);
 }
 }

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

@@ -1320,7 +1320,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         if (CollectionUtils.isEmpty(orderNoList)) {
         if (CollectionUtils.isEmpty(orderNoList)) {
             return;
             return;
         }
         }
-        Collection<UserOrder> userOrders = userOrderService.listByIds(orderNoList);
+        Map<String, UserOrder> mapByOrderNos = userOrderService.getMapByOrderNos(orderNoList);
+        Collection<UserOrder> userOrders = mapByOrderNos.values();
+
         for (UserOrder order : userOrders) {
         for (UserOrder order : userOrders) {
             try {
             try {
                 if (order.getPaymentVersion().equals(EPaymentVersion.V1)) {
                 if (order.getPaymentVersion().equals(EPaymentVersion.V1)) {
@@ -1333,7 +1335,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                 couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.builder().orderNo(order.getOrderNo()).reset(true).build());
                 couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.builder().orderNo(order.getOrderNo()).reset(true).build());
             } catch (Exception e) {
             } catch (Exception e) {
                 log.warn("直播课成课失败退款 退款失败,退款订单号 {}", order);
                 log.warn("直播课成课失败退款 退款失败,退款订单号 {}", order);
-                log.error("直播课成课失败退款 退款失败", e.getCause());
+                log.error("直播课成课失败退款 退款失败", e);
             }
             }
         }
         }
     }
     }

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

@@ -1,33 +1,23 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
-import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
-import com.yonge.cooleshow.biz.dal.dao.AlbumMusicRelateDao;
-import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
-import com.yonge.cooleshow.biz.dal.dao.MusicSheetPurchaseRecordDao;
-import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.StudentMusicAlbumOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentMusicAlbumOrderVo;
-import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
@@ -551,8 +541,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         return album;
         return album;
     }
     }
 
 
+
     @Override
     @Override
     public TenantAlbumWrapper.TenantAlbum tenantDetailAlbum(String albumId) {
     public TenantAlbumWrapper.TenantAlbum tenantDetailAlbum(String albumId) {
+        Integer size = 0;
         Long tenantAlbumId;
         Long tenantAlbumId;
         if (StringUtils.isEmpty(albumId)){
         if (StringUtils.isEmpty(albumId)){
             //如果没传专辑id  则查询对应机构的专辑详情
             //如果没传专辑id  则查询对应机构的专辑详情
@@ -596,8 +588,12 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         //机构专辑曲目数
         //机构专辑曲目数
         List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
         List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
                 .eq(TenantAlbumMusic::getDelFlag,false).list();
                 .eq(TenantAlbumMusic::getDelFlag,false).list();
-        List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
-        int size = MusicSheetIds.size();
+        List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
+        //计算符合条件的个数
+        if (CollectionUtils.isNotEmpty(MusicSheetIds)){
+            size = musicSheetService.lambdaQuery().in(MusicSheet::getId, MusicSheetIds).eq(MusicSheet::getState, true)
+                    .eq(MusicSheet::getDelFlag, false).count();
+        }
 
 
         //Integer musicNum = tenantAlbum.getMusicNum();
         //Integer musicNum = tenantAlbum.getMusicNum();
         //机构专辑简介
         //机构专辑简介

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

@@ -1674,8 +1674,6 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 if (Objects.isNull(album)) {
                 if (Objects.isNull(album)) {
                     throw new BizException("无效的专辑信息");
                     throw new BizException("无效的专辑信息");
                 }
                 }
-
-                userOrderDetail.setMerchId(0L);
                 userOrderDetail.setBizId(album.getId());
                 userOrderDetail.setBizId(album.getId());
                 userOrderDetail.setOriginalPrice(BigDecimal.valueOf(album.getAlbumPrice()));
                 userOrderDetail.setOriginalPrice(BigDecimal.valueOf(album.getAlbumPrice()));
                 userOrderDetail.setExpectPrice(BigDecimal.valueOf(album.getAlbumPrice()));
                 userOrderDetail.setExpectPrice(BigDecimal.valueOf(album.getAlbumPrice()));

+ 43 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java

@@ -141,6 +141,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     @Autowired
     @Autowired
     private RedisCacheService redisCacheService;
     private RedisCacheService redisCacheService;
 
 
+    @Autowired
+    private StudentService studentService;
+
+
     /**
     /**
      * 查询详情
      * 查询详情
      *
      *
@@ -339,12 +343,15 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             serviceFeeAmount = actualPrice;
             serviceFeeAmount = actualPrice;
         }
         }
 
 
-        // 消息通知
-//        CompletableFuture.runAsync(() -> {
-//                    musicSheetService.sendBuyMessage(userPaymentOrder.getMerchId(), userPaymentOrder.getUserId(),
-//                            userPaymentOrder.getBizId(), userPaymentOrder.getOrderClient(), userPaymentOrder.getOrderType());
-//                }
-//        );
+        // 平台学生 发送推送
+        if(checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient())) {
+            // 消息通知
+            CompletableFuture.runAsync(() -> {
+                        musicSheetService.sendBuyMessage(userPaymentOrder.getMerchId(), userPaymentOrder.getUserId(),
+                                userPaymentOrder.getBizId(), userPaymentOrder.getOrderClient(), userPaymentOrder.getOrderType());
+                    }
+            );
+        }
 
 
 
 
         // 计算分润
         // 计算分润
@@ -352,6 +359,19 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
     }
     }
 
 
+    private boolean checkSendMessage(Long userId, ClientEnum orderClient) {
+        if (orderClient == null) {
+            return false;
+        }
+        if (orderClient.equals(ClientEnum.STUDENT)) {
+            Student student = studentService.getById(userId);
+            if (student == null) {
+                return false;
+            } else return student.getTenantId() == -1;
+        }
+        return true;
+    }
+
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public void practiceCourse(UserOrderDetailVo userPaymentOrder) {
     public void practiceCourse(UserOrderDetailVo userPaymentOrder) {
@@ -462,7 +482,11 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
 
         //消息推送
         //消息推送
         try {
         try {
-//            courseScheduleService.practiceSend(paymentList.get(0).getTeacherId(), userPaymentOrder.getUserId(), paymentList.size() + "", orderNo);
+
+            // 平台学生 发送推送
+            if(checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient())) {
+                courseScheduleService.practiceSend(paymentList.get(0).getTeacherId(), userPaymentOrder.getUserId(), paymentList.size() + "", orderNo);
+            }
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("陪练课消息推送失败");
             log.error("陪练课消息推送失败");
         }
         }
@@ -587,7 +611,12 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         }
         }
         log.info("buyLiveCourseSuccess ok");
         log.info("buyLiveCourseSuccess ok");
         //课程购买成功后进行消息推送
         //课程购买成功后进行消息推送
-//        courseGroupService.buyLiveSendMessage(studentPayment, courseGroup);
+
+        // 平台学生 发送推送
+        if(checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient())) {
+            courseGroupService.buyLiveSendMessage(studentPayment, courseGroup);
+        }
+
     }
     }
 
 
     @Override
     @Override
@@ -665,7 +694,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 
 
 
 
-//        videoLessonPurchaseRecordService.videoSend(lessonGroup.getTeacherId(), purchaseRecord.getStudentId(), lessonGroup);
+        // 平台学生 发送推送
+        if(checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient())) {
+            videoLessonPurchaseRecordService.videoSend(lessonGroup.getTeacherId(), purchaseRecord.getStudentId(), lessonGroup);
+        }
 
 
         // 赠品曲目、专辑插入用户曲目购买记录表
         // 赠品曲目、专辑插入用户曲目购买记录表
         List<CourseRelationMusicAlbum> musicAlbums = courseRelationMusicAlbumService.lambdaQuery()
         List<CourseRelationMusicAlbum> musicAlbums = courseRelationMusicAlbumService.lambdaQuery()
@@ -742,7 +774,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         // 计算分润
         // 计算分润
         teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
         teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 
 
-        memberPriceSettingsService.orderSuccess(userPaymentOrder,false);
+        memberPriceSettingsService.orderSuccess(userPaymentOrder,checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient()));
 
 
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
     }
     }
@@ -768,7 +800,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
         teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 
 
 
 
-        activityPlanService.orderSuccess(userPaymentOrder,false);
+        activityPlanService.orderSuccess(userPaymentOrder,checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient()));
 
 
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
     }
     }

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

@@ -646,6 +646,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         sysUser.setGender(studentInfo.getGender());
         sysUser.setGender(studentInfo.getGender());
         sysUser.setAvatar(student.getAvatar());
         sysUser.setAvatar(student.getAvatar());
         sysUser.setUsername(studentInfo.getName());
         sysUser.setUsername(studentInfo.getName());
+        sysUser.setBirthdate(studentInfo.getBirthdate());
         sysUserMapper.updateById(sysUser);
         sysUserMapper.updateById(sysUser);
         return true;
         return true;
     }
     }

+ 16 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
@@ -490,7 +491,18 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             updateSysUser(teacherSubmitReq);
             updateSysUser(teacherSubmitReq);
         }
         }
         //新增修改老师表
         //新增修改老师表
-        insertOrUpdateTeacher(teacherSubmitReq);
+        Teacher teacher = insertOrUpdateTeacher(teacherSubmitReq);
+
+        // 机构老师与学生互加好友关系
+        if (Optional.ofNullable(teacher.getTenantId()).orElse(-1L) > 0) {
+            // 自动与机构老师成为好友
+            Set<Long> collect = studentService.lambdaQuery()
+                    .eq(Student::getTenantId, teacher.getTenantId()).list().stream()
+                    .map(Student::getUserId).collect(Collectors.toSet());
+
+            imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+        }
+
         return HttpResponseResult.succeed(true);
         return HttpResponseResult.succeed(true);
     }
     }
 
 
@@ -574,7 +586,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                         .eq(Teacher::getUserId, teacher.getUserId())
                         .eq(Teacher::getUserId, teacher.getUserId())
                 );
                 );
             }
             }
-
+            // 老师头像
+            teacher.setAvatar(Optional.ofNullable(teacherSubmitReq.getAvatar()).orElse(teacher.getAvatar()));
             baseMapper.updateById(teacher);
             baseMapper.updateById(teacher);
         }
         }
 
 
@@ -641,6 +654,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacher.setIsTestUser(teacherSubmitReq.getIsTestUser());
         teacher.setIsTestUser(teacherSubmitReq.getIsTestUser());
         teacher.setSettlementFrom(teacherSubmitReq.getSettlementFrom());
         teacher.setSettlementFrom(teacherSubmitReq.getSettlementFrom());
         teacher.setTenantId(teacherSubmitReq.getTenantId() == null ? -1L : teacherSubmitReq.getTenantId());
         teacher.setTenantId(teacherSubmitReq.getTenantId() == null ? -1L : teacherSubmitReq.getTenantId());
+        teacher.setAvatar(Optional.ofNullable(teacherSubmitReq.getAvatar()).orElse(teacher.getAvatar()));
         if (teacher.getTenantId() == -1L) {
         if (teacher.getTenantId() == -1L) {
             teacher.setSettlementFrom(ESettlementFrom.TEACHER);
             teacher.setSettlementFrom(ESettlementFrom.TEACHER);
         } else if (teacherSubmitReq.getIsSettlement() != null) {
         } else if (teacherSubmitReq.getIsSettlement() != null) {

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

@@ -276,6 +276,31 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
 
 
     }
     }
 
 
+    @Override
+    public void resend(String code, Long userId, Long tenantId, Long tenantAlbumPurchaseId) {
+        // 查询激活码信息
+        TenantActivationCode one = this.lambdaQuery()
+                .eq(TenantActivationCode::getActivationCode, code)
+                .eq(TenantActivationCode::getTenantId, tenantId)
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
+                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
+                .last("limit 1")
+                .one();
+        if(one == null) {
+            throw new BizException("当前激活码不可以重发");
+        }
+        if (Boolean.TRUE.equals(one.getActivationStatus())) {
+            throw new BizException("激活码已经被使用");
+        }
+
+        SysUser sysUser = sysUserMapper.selectById(userId);
+        if (sysUser == null) {
+            throw new BizException("用户不存在");
+        }
+        one.setActivationPhone(sysUser.getPhone());
+        this.updateById(one);
+    }
+
 
 
     /**
     /**
      * 添加用户机构专辑激活记录
      * 添加用户机构专辑激活记录

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

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.biz.dal.dao.MusicFavoriteDao;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
@@ -12,6 +14,7 @@ import com.yonge.toolset.base.exception.BizException;
 import jodd.util.StringUtil;
 import jodd.util.StringUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
@@ -55,6 +58,12 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     private TenantAlbumMusicService tenantAlbumMusicService;
     private TenantAlbumMusicService tenantAlbumMusicService;
 
 
 
 
+    @Autowired
+    private MusicFavoriteService musicFavoriteService;
+
+    @Autowired
+    private  SysUserFeignService sysUserFeignService;
+
     /**
     /**
      * 查询详情
      * 查询详情
      * @param id 详情ID
      * @param id 详情ID
@@ -74,6 +83,8 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
      */
      */
     @Override
     @Override
     public IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page, TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
     public IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page, TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
+        com.yonge.cooleshow.auth.api.entity.SysUser user = sysUserFeignService.queryUserInfo();
+        Long sysUserId = user.getId();
 
 
         String albumId = query.getAlbumId();
         String albumId = query.getAlbumId();
         if (StringUtil.isEmpty(albumId)){
         if (StringUtil.isEmpty(albumId)){
@@ -105,6 +116,7 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         musicSheetQuery.setKeyword(query.getKeyword());
         musicSheetQuery.setKeyword(query.getKeyword());
 
 
         List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = tenantAlbumMusicMapper.selectPage(page, musicSheetQuery);
         List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = tenantAlbumMusicMapper.selectPage(page, musicSheetQuery);
+
         musicSheets.stream().forEach(m->{
         musicSheets.stream().forEach(m->{
             Long userId = m.getUserId();
             Long userId = m.getUserId();
             String musicSubject = m.getMusicSubject();
             String musicSubject = m.getMusicSubject();
@@ -121,6 +133,22 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
                 Subject subject1 = subject.get(0);
                 Subject subject1 = subject.get(0);
                 m.setMusicSubjectName(subject1.getName());
                 m.setMusicSubjectName(subject1.getName());
             }
             }
+
+            //是否收藏
+            Long id = m.getId();
+            List<MusicFavorite> list = musicFavoriteService.lambdaQuery().eq(MusicFavorite::getMusicSheetId, id).list();
+            if (CollectionUtils.isNotEmpty(list)){
+                List<Long> collect = list.stream().map(MusicFavorite::getUserId).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(collect)){
+                    collect.stream().forEach(c->{
+                        if (c.equals(sysUserId) ){
+                            m.setFavorite(true);
+                        }
+                    });
+
+                }
+            }
+
         });
         });
 
 
 
 

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

@@ -109,7 +109,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
     private PaymentDivMemberRecordService paymentDivMemberRecordService;
     private PaymentDivMemberRecordService paymentDivMemberRecordService;
 
 
     @Autowired
     @Autowired
-    private StudentService studentService;
+    private TenantAlbumMusicService tenantAlbumMusicService;
 
 
 
 
     @Autowired
     @Autowired
@@ -531,6 +531,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
                 // 填充商品基础信息,校验参数合法以性
                 // 填充商品基础信息,校验参数合法以性
                 orderGoodsCreate.get(item.getGoodType()).accept(item);
                 orderGoodsCreate.get(item.getGoodType()).accept(item);
                 UserOrderDetail userOrderDetail = item.getUserOrderDetail();
                 UserOrderDetail userOrderDetail = item.getUserOrderDetail();
+                userOrderDetail.setMerchId(orderReq.getRecomUserId());
                 orderDetails.add(userOrderDetail);
                 orderDetails.add(userOrderDetail);
                 // 根据优惠券计算实际优惠金额
                 // 根据优惠券计算实际优惠金额
                 // 计算优惠券金额
                 // 计算优惠券金额
@@ -963,6 +964,23 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         if (payTypeReq.getClientType().equals(ClientEnum.TENANT)) {
         if (payTypeReq.getClientType().equals(ClientEnum.TENANT)) {
             resp.setPaymentVersion(EPaymentVersion.V2);
             resp.setPaymentVersion(EPaymentVersion.V2);
         }
         }
+        //检查曲目数量
+        if(payTypeReq.getGoodType() == GoodTypeEnum.TENANT_ALBUM){
+            //机构专辑曲目数
+            List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, payTypeReq.getBizId())
+                    .eq(TenantAlbumMusic::getDelFlag,false).list();
+            List<Long> musicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(musicSheetIds)){
+                Integer count = musicSheetService.lambdaQuery().in(MusicSheet::getId, musicSheetIds)
+                        .eq(MusicSheet::getState, true)
+                        .eq(MusicSheet::getDelFlag, false).count();
+                if(count < 1){
+                    throw new BizException("当前教程不可购买");
+                }
+            }else {
+                throw new BizException("当前教程不可购买");
+            }
+        }
         // 检测商品是属于老师,老师是否设置的结算给机构
         // 检测商品是属于老师,老师是否设置的结算给机构
 
 
         switch (payTypeReq.getGoodType()) {
         switch (payTypeReq.getGoodType()) {

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

@@ -248,6 +248,7 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
     @Override
     @Override
     public TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId) {
     public TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId) {
 
 
+        Integer size = 0;
         TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
         TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
 
 
         //如果没传专辑id  则查询对应机构的专辑详情
         //如果没传专辑id  则查询对应机构的专辑详情
@@ -335,7 +336,11 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         //机构专辑曲目数
         //机构专辑曲目数
         List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).eq(TenantAlbumMusic::getDelFlag,false).list();
         List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
-        int size = MusicSheetIds.size();
+       //计算符合条件的个数
+        if (CollectionUtils.isNotEmpty(MusicSheetIds)){
+             size = musicSheetService.lambdaQuery().in(MusicSheet::getId, MusicSheetIds).eq(MusicSheet::getState, true)
+                    .eq(MusicSheet::getDelFlag, false).count();
+        }
         //Integer musicNum = tenantAlbum.getMusicNum();
         //Integer musicNum = tenantAlbum.getMusicNum();
 
 
         //获取合奏曲目数量
         //获取合奏曲目数量

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java

@@ -163,6 +163,10 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("机构id")
         @ApiModelProperty("机构id")
         private Long tenantId;
         private Long tenantId;
 
 
+
+
+
+
         public String getKeyword() {
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
         }
         }
@@ -210,6 +214,12 @@ public class TenantAlbumMusicWrapper {
             @ApiModelProperty(value = "上传人")
             @ApiModelProperty(value = "上传人")
             private String userName;
             private String userName;
 
 
+            @ApiModelProperty("曲目收藏数")
+            private Integer musicSheetLikeCounts;
+
+            @ApiModelProperty("1:收藏 0:未收藏")
+            private boolean favorite;
+
             public String jsonString() {
             public String jsonString() {
                 return JSON.toJSONString(this);
                 return JSON.toJSONString(this);
             }
             }

+ 22 - 2
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java

@@ -2,13 +2,17 @@ package com.yonge.cooleshow.tenant.controller;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.ImmutableList;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
@@ -41,8 +45,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -51,12 +57,15 @@ import java.util.stream.Collectors;
 @RequestMapping("/student")
 @RequestMapping("/student")
 @Api(value = "学生表", tags = "学生表")
 @Api(value = "学生表", tags = "学生表")
 public class StudentController extends BaseController {
 public class StudentController extends BaseController {
+
     @Autowired
     @Autowired
     private StudentService studentService;
     private StudentService studentService;
-
     @Autowired
     @Autowired
+    private TeacherService teacherService;
+    @Resource
     private SysUserFeignService sysUserFeignService;
     private SysUserFeignService sysUserFeignService;
-
+    @Autowired
+    private ImUserFriendService imUserFriendService;
     @Autowired
     @Autowired
     private TenantInfoService tenantInfoService;
     private TenantInfoService tenantInfoService;
 
 
@@ -149,6 +158,17 @@ public class StudentController extends BaseController {
         }
         }
 
 
         studentService.save(studentInfo);
         studentService.save(studentInfo);
+
+        // 加好友
+        if (studentInfo.getId() == null) {
+            SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
+            // 自动与机构老师成为好友
+            List<Teacher> teacherList = teacherService.lambdaQuery()
+                    .eq(Teacher::getTenantId, studentInfo.getTenantId()).list();
+            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
+                    new HashSet<>(ImmutableList.of(sysUser.getId()))));
+        }
+
         return succeed();
         return succeed();
     }
     }
 
 

+ 9 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -138,6 +138,15 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
         return succeed();
     }
     }
 
 
+
+    @ApiOperation(value = "激活码重发", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
+    @PostMapping("/resend")
+    public HttpResponseResult<Boolean> resend(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeResend send) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.resend(send.getCode(),send.getUserId(),tenantInfo.getId(),send.getTenantAlbumPurchaseId());
+        return succeed();
+    }
+
     @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
     @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
     @PostMapping("/sendCancel")
     @PostMapping("/sendCancel")
     public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
     public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {

+ 21 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/TenantActivationCodeVo.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import javax.validation.constraints.Size;
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -34,6 +35,26 @@ public class TenantActivationCodeVo {
         private List<Long> studentIdList = new ArrayList<>();
         private List<Long> studentIdList = new ArrayList<>();
     }
     }
 
 
+
+    @Data
+    @ApiModel(" TenantActivationCodeSend-机构激活码重发")
+    public static class TenantActivationCodeResend {
+
+
+        @ApiModelProperty("专辑购买记录的ID")
+        @NotNull(message = "专辑购买记录的ID不能为空")
+        private Long tenantAlbumPurchaseId;
+
+        @ApiModelProperty("激活码")
+        @NotBlank(message = "激活码不能为空")
+        private String code;
+
+        @ApiModelProperty("用户ID")
+        @NotNull(message = "用户ID不能为空")
+        private Long userId;
+    }
+
+
     @Data
     @Data
     @ApiModel(" TenantActivationCode-机构激活码")
     @ApiModel(" TenantActivationCode-机构激活码")
     public static class TenantActivationCode {
     public static class TenantActivationCode {