Browse Source

Merge branch 'zx_online_cbs' of http://git.dayaedu.com/yonge/cooleshow into develop-new

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
#	cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicTagMapper.xml
#	pom.xml
zouxuan 7 months ago
parent
commit
e249c56911
27 changed files with 445 additions and 355 deletions
  1. 8 2
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  2. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.java
  3. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImUserFriend.java
  4. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  5. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Student.java
  6. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java
  7. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/im/EImUserFriendSourceForm.java
  8. 5 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java
  9. 0 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/cbs/CbsMusicScoreService.java
  10. 0 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/cbs/impl/CbsMusicScoreServiceImpl.java
  11. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  12. 19 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CustomerServiceBatchSendingServiceImpl.java
  13. 10 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  14. 62 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  15. 92 132
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  16. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  17. 23 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  18. 119 120
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  19. 4 18
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  20. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  21. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseCoursewareMapper.xml
  22. 4 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  23. 7 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  24. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  25. 13 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  26. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml
  27. 1 1
      pom.xml

+ 8 - 2
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -386,10 +386,16 @@
     <select id="getCustomerServiceByFriendLeast" resultMap="SysUser">
         select m.*
         from (SELECT te.user_id_,
-                     count(distinct iuf.friend_id_) friends
+                     count(k.user_id_) friends
               from teacher te
                        left join sys_user su on te.user_id_ = su.id_
-                       left join im_user_friend iuf on te.user_id_ = iuf.user_id_
+                       left join (select s.user_id_, s.customer_id_
+                                  from student s
+                                  where s.customer_id_ is not null
+                                  union all
+                                  select te.user_id_, te.customer_id_
+                                  from teacher te
+                                  where te.customer_service_ = 0 and te.customer_id_ is not null) k on te.user_id_ = k.customer_id_
               where te.lock_flag_ = 0
                 and te.customer_service_ = 1
                 and su.del_flag_ = 0

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImUserFriend.java

@@ -6,6 +6,7 @@ import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -64,6 +65,10 @@ public class ImUserFriend implements Serializable {
     @ApiModelProperty(value = "修改时间;")
     private Date updateTime;
 
+    @TableField("source_form_")
+    @ApiModelProperty(value = "建立好友时,标记建立身份,TEACHER:以老师身份建立,CUSTOMER:以客服身份建立")
+    private EImUserFriendSourceForm sourceForm;
+
     public String getFriendAvatar() {
         return friendAvatar;
     }
@@ -157,5 +162,13 @@ public class ImUserFriend implements Serializable {
     public void setFriendType(ClientEnum friendType) {
         this.friendType = friendType;
     }
+
+    public EImUserFriendSourceForm getSourceForm() {
+        return sourceForm;
+    }
+
+    public void setSourceForm(EImUserFriendSourceForm sourceForm) {
+        this.sourceForm = sourceForm;
+    }
 }
 

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -268,6 +268,10 @@ public class MusicSheet implements Serializable {
 	@TableField("score_type_")
 	private String scoreType;
 
+	@ApiModelProperty("是否节奏练习")
+	@TableField("is_all_subject_")
+	private Boolean isAllSubject;
+
 	public ChargeTypeEnum getChargeType() {
 		if (Objects.isNull(this.chargeType) && StringUtils.isNotEmpty(getPaymentType())) {
 

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Student.java

@@ -112,6 +112,10 @@ public class Student implements Serializable {
     @TableField(value = "im_device_id_")
     private String imDeviceId;
 
+    @ApiModelProperty("专属客服ID")
+    @TableField(value = "customer_id_")
+    private Long customerId;
+
     public Long getTenantId() {
         return tenantId;
     }
@@ -231,4 +235,12 @@ public class Student implements Serializable {
     public void setHideFlag(Integer hideFlag) {
         this.hideFlag = hideFlag;
     }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java

@@ -255,6 +255,10 @@ public class Teacher implements Serializable {
     @TableField(value = "customer_service_")
     private Boolean customerService;
 
+    @ApiModelProperty("专属客服ID")
+    @TableField(value = "customer_id_")
+    private Long customerId;
+
     public ESettlementFrom getSettlementFrom() {
         return settlementFrom;
     }

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/im/EImUserFriendSourceForm.java

@@ -0,0 +1,32 @@
+package com.yonge.cooleshow.biz.dal.enums.im;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 用户会员类型
+ */
+public enum EImUserFriendSourceForm implements BaseEnum<String, EImUserFriendSourceForm> {
+
+    TEACHER("老师身份"),
+    CUSTOMER("客服"),
+
+    ;
+    @EnumValue
+    private String code;
+    private String name;
+
+    EImUserFriendSourceForm(String name) {
+        this.code = this.name();
+        this.name = name;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 5 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.ImUserFriendDao;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.vo.im.ImUserFriendVO;
 import com.yonge.cooleshow.biz.dal.wrapper.im.CustomerService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
@@ -31,9 +32,9 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
     * @author zx
     * @date 2022/3/24 10:06
     */
-    void saveUserFriend(Long teacherId, Set<Long> studentIds);
+    void saveUserFriend(Long teacherId, Set<Long> studentIds, EImUserFriendSourceForm sourceForm);
 
-    void saveUserTeacherFriend(Long teacherId, Set<Long> teacherIds);
+    void saveUserTeacherFriend(Long teacherId, Set<Long> teacherIds, EImUserFriendSourceForm sourceForm);
 
     /**
     * @description: 获取用户详情
@@ -81,5 +82,7 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
     void delTeacherFriendByTenantId(Long tenantId, Long userId, String clientType);
 
     void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType);
+
+    void refreshCustomer(Long userId, ClientEnum userClientType, List<Long> friendIds, ClientEnum friendClientType);
 }
 

+ 0 - 12
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/cbs/CbsMusicScoreService.java

@@ -1,21 +1,9 @@
 package com.yonge.cooleshow.biz.dal.service.cbs;
 
-import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendClientWrapper;
-import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
-import com.microsvc.toolkit.common.response.paging.PageInfo;
-import com.microsvc.toolkit.common.response.template.R;
 import com.yonge.cooleshow.biz.dal.wrapper.MusicSheetApplicationExtendWrapper;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestBody;
 
 public interface CbsMusicScoreService {
-    R<PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> selectPage(CbsMusicSheetWrapper.MusicSheetApplicationQuery query);
-
-//    Long musicSheetAdd(CbsMusicSheetWrapper.AddMusicSheet addMusicSheet);
 
     void update(MusicSheetApplicationExtendWrapper addMusicSheetApplicationExtend);
 
-    void updateStatus(CbsMusicSheetApplicationExtendClientWrapper.MusicSheetApplicationExtendStatus status);
-
-    R<CbsMusicSheetWrapper.MusicSheet> musicSheetDetail(Long id);
 }

+ 0 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/cbs/impl/CbsMusicScoreServiceImpl.java

@@ -4,8 +4,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.dayaedu.cbs.common.enums.music.EMusicAvailableType;
 import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendClientWrapper;
-import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
-import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.template.R;
 import com.yonge.cooleshow.biz.dal.service.cbs.CbsMusicScoreService;
 import com.yonge.cooleshow.biz.dal.wrapper.MusicSheetApplicationExtendWrapper;
@@ -27,12 +25,6 @@ public class CbsMusicScoreServiceImpl implements CbsMusicScoreService {
     private MusicFeignClientService musicFeignClientService;
 
     @Override
-    public R<PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> selectPage(CbsMusicSheetWrapper.MusicSheetApplicationQuery query) {
-        query.setApplicationId(applicationId);
-        return musicFeignClientService.musicSheetPageByApplication(query);
-    }
-
-    @Override
     public void update(MusicSheetApplicationExtendWrapper addMusicSheetApplicationExtend) {
         CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend extend =
                 JSONObject.parseObject(JSONObject.toJSONString(addMusicSheetApplicationExtend), CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend.class);
@@ -45,17 +37,4 @@ public class CbsMusicScoreServiceImpl implements CbsMusicScoreService {
             throw new BizException("修改失败,{}",jsonObjectR.getMessage());
         }
     }
-
-    @Override
-    public void updateStatus(CbsMusicSheetApplicationExtendClientWrapper.MusicSheetApplicationExtendStatus status) {
-        R<JSONObject> jsonObjectR = musicFeignClientService.musicSheetApplicationExtendStatus(status);
-        if (jsonObjectR.getCode() != 200) {
-            throw new BizException("修改状态失败,{}",jsonObjectR.getMessage());
-        }
-    }
-
-    @Override
-    public R<CbsMusicSheetWrapper.MusicSheet> musicSheetDetail(Long id) {
-        return musicFeignClientService.musicSheetDetail(id, applicationId);
-    }
 }

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

@@ -23,6 +23,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.wrapper.course.CourseScheduleWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.liveroom.LiveRoomWrapper;
@@ -1200,7 +1201,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Set<Long> studentIds = new HashSet();
         studentIds.add(studentId);
         try {
-            imUserFriendService.saveUserFriend(teacherId, studentIds);
+            imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
+            imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
         } catch (Exception e) {
             log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);

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

@@ -62,6 +62,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Random;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -444,15 +445,22 @@ public class CustomerServiceBatchSendingServiceImpl extends ServiceImpl<Customer
                         messageNum += 1;
                     }
 
-                    int messageSendLimit; // 默认发送11000/分钟
+                    int messageSendLimit; // 默认发送10000/分钟
                     // 群发消息频率限制
                     SysConfig config = sysConfigService.findByParamName(SysConfigConstant.MESSAGE_SEND_LIMIT);
-                    // 群发消息频率限制不能超过11000/分钟,超过当前值默认取值为11000
-                    if (config != null && config.getParamValue().matches("\\d+")
-                        && Integer.parseInt(config.getParamValue()) < 11000) {
-                        messageSendLimit = Integer.parseInt(config.getParamValue());
+                    // 群发消息频率限制不能超过10000/分钟,超过当前值默认取值为10000
+                    if (config != null && config.getParamValue().matches("\\d+")) {
+                        int sendLimit = Integer.parseInt(config.getParamValue());
+                        if (sendLimit > 0 && sendLimit < 10000) {
+                            // 消息发送频率限制
+                            messageSendLimit = Integer.parseInt(config.getParamValue());
+                        } else {
+                            // 默认发送10000/分钟
+                            messageSendLimit = 10000;
+                        }
                     } else {
-                        messageSendLimit = 11000;
+                        // 默认发送10000/分钟
+                        messageSendLimit = 10000;
                     }
 
                     int finalMessageNum = messageNum;
@@ -461,7 +469,7 @@ public class CustomerServiceBatchSendingServiceImpl extends ServiceImpl<Customer
                         // 推送消息给匹配用户
                         List<String> targetGroups = Arrays.stream(info.getTargetGroup().split(",")).collect(Collectors.toList());
 
-                        targetGroups.parallelStream().forEach(clientType -> {
+                        targetGroups.forEach(clientType -> {
 
                             CustomerService.NotifyMessage receiveQuery = CustomerService.NotifyMessage.builder()
                                     .clientType(ClientEnum.valueOf(clientType))
@@ -489,6 +497,7 @@ public class CustomerServiceBatchSendingServiceImpl extends ServiceImpl<Customer
                                         .map(x -> imGroupService.getImUserId(x, clientType))
                                         .collect(Collectors.toList());
 
+                                // 累加线程休眠计算器,若大于指定阀值时,线程休眠1分钟
                                 sleepCount = messageSendSleepCondition(info, sleepCount, receiveUserIds.size(), finalMessageNum, messageSendLimit);
 
                                 batchSendCustomerServiceMessage(info, receiveNums, receiveUserIds);
@@ -539,7 +548,7 @@ public class CustomerServiceBatchSendingServiceImpl extends ServiceImpl<Customer
 
             });
 
-        });
+        }, 30L, TimeUnit.MINUTES);
     }
 
     /**
@@ -559,7 +568,8 @@ public class CustomerServiceBatchSendingServiceImpl extends ServiceImpl<Customer
             try {
                 // 线程休眠1分钟
                 Thread.sleep(1000 * 60);
-                log.info("messageSendSleepCondition THREAD_SLEEP END");
+                log.info("messageSendSleepCondition THREAD_SLEEP END, sleepCount={}, receiveSize={}, finalMessageNum={}, messageSendLimit={}",
+                    sleepCount, receiveSize, finalMessageNum, messageSendLimit);
             } catch (InterruptedException e) {
                 log.error("messageSendSleepCondition THREAD_SLEEP EX id={}", info.getId(), e);
             }

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

@@ -38,6 +38,7 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.RoleEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
@@ -401,7 +402,12 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         .eq(ImGroupMember::getGroupId, groupId)
                         .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.TEACHER)
                         .list();
-                    teacherList.forEach(teacher -> imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList));
+                    teacherList.forEach(teacher ->
+                            {
+                                imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList, EImUserFriendSourceForm.TEACHER);
+                                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(studentIdList), ClientEnum.STUDENT);
+                            }
+                    );
                 }
             } catch (Exception e) {
                 log.error("加入群组失败,{}", e.getMessage(), e);
@@ -431,7 +437,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         Date now = new Date();
         Long teacherId = courseGroup.getTeacherId();
         //保存老师学员关联的通讯录xz
-        imUserFriendService.saveUserFriend(teacherId, Sets.newHashSet(studentIds));
+        imUserFriendService.saveUserFriend(teacherId, Sets.newHashSet(studentIds),EImUserFriendSourceForm.TEACHER);
+        imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
+
 
         // 直播课、琴房课校验群成员人数限制
         if (CourseScheduleEnum.PIANO_ROOM_CLASS.getCode().equals(courseGroupType)

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
@@ -22,9 +23,12 @@ import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
@@ -53,7 +57,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -99,9 +102,15 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
         return this.baseMapper;
     }
 
+    /**
+     *
+     * @param teacherId 老师ID
+     * @param studentIds  学生列表
+     * @param sourceForm 建立关系方式,TEACHER:已老师身份添加或更新关系,CUSTOMER:以客服身份添加或者更新关系
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void saveUserFriend(Long teacherId, Set<Long> studentIds) {
+    public void saveUserFriend(Long teacherId, Set<Long> studentIds, EImUserFriendSourceForm sourceForm) {
         if (CollectionUtils.isEmpty(studentIds)) {
             return;
         }
@@ -135,6 +144,7 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
             teacherFriend.setFriendId(studentId);
             teacherFriend.setFriendType(ClientEnum.STUDENT);
             teacherFriend.setUserId(teacherId);
+            teacherFriend.setSourceForm(sourceForm);
             teacherFriend.setCreateTime(now);
             teacherFriend.setUpdateTime(now);
 
@@ -142,6 +152,7 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
             studentFriend.setFriendId(teacherId);
             studentFriend.setFriendType(ClientEnum.TEACHER);
             studentFriend.setUserId(studentId);
+            studentFriend.setSourceForm(sourceForm);
             studentFriend.setCreateTime(now);
             studentFriend.setUpdateTime(now);
             imUserFriends.add(teacherFriend);
@@ -152,7 +163,7 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void saveUserTeacherFriend(Long teacherId, Set<Long> teacherIds) {
+    public void saveUserTeacherFriend(Long teacherId, Set<Long> teacherIds, EImUserFriendSourceForm sourceForm) {
         if (CollectionUtils.isEmpty(teacherIds)) {
             return;
         }
@@ -182,6 +193,7 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
             teacherFriend.setFriendId(studentId);
             teacherFriend.setFriendType(ClientEnum.TEACHER);
             teacherFriend.setUserId(teacherId);
+            teacherFriend.setSourceForm(sourceForm);
             teacherFriend.setCreateTime(now);
             teacherFriend.setUpdateTime(now);
 
@@ -189,6 +201,7 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
             studentFriend.setFriendId(teacherId);
             studentFriend.setFriendType(ClientEnum.TEACHER);
             studentFriend.setUserId(studentId);
+            studentFriend.setSourceForm(sourceForm);
             studentFriend.setCreateTime(now);
             studentFriend.setUpdateTime(now);
             imUserFriends.add(teacherFriend);
@@ -296,12 +309,15 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
      * 新用户自动添加客服
      *
      * @param userId     新用户ID
-     * @param friendIds  好友ID
+     * @param friendIds  好友ID,客服ID
      * @param clientType 客户端类型
      * @return Integer
      */
     @Override
     public Integer registerUserBindCustomerService(Long userId, List<Long> friendIds, ClientEnum clientType) {
+        if(userId == null || CollectionUtils.isEmpty(friendIds)){
+            return 0;
+        }
 
         SysUser sysUser = sysUserMapper.getByUserId(userId);
         try {
@@ -310,12 +326,32 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
         } catch (Exception e) {
             log.error("注册用户失败:" + userId + ",type:" + clientType);
         }
+        // 判断是否是同一机构
+        EImUserFriendSourceForm sourceForm = EImUserFriendSourceForm.CUSTOMER;
+        Teacher customer = teacherDao.selectById(friendIds.get(0));
+        if (customer.getTenantId() != null && customer.getTenantId() > 0) {
+            if (ClientEnum.STUDENT.equals(clientType)) {
+                Student student = studentDao.selectById(userId);
+                if (customer.getTenantId().equals(student.getTenantId())) {
+                    sourceForm = EImUserFriendSourceForm.TEACHER;
+
+                }
+            } else if (ClientEnum.TEACHER.equals(clientType)) {
+                Teacher teacher = teacherDao.selectById(userId);
+                if (customer.getTenantId().equals(teacher.getTenantId())) {
+                    sourceForm = EImUserFriendSourceForm.TEACHER;
+                }
+            }
+        }
+
         // 添加新用户好友,客服默认为老师身份
         for (Long teacherId : friendIds) {
             if (ClientEnum.STUDENT == clientType) {
-                saveUserFriend(teacherId, Sets.newHashSet(userId));
+                saveUserFriend(teacherId, Sets.newHashSet(userId), sourceForm);
+                studentDao.update(null, new UpdateWrapper<Student>().lambda().eq(Student::getUserId, userId).set(Student::getCustomerId, teacherId));
             } else if (ClientEnum.TEACHER == clientType) {
-                saveUserTeacherFriend(teacherId, Sets.newHashSet(userId));
+                saveUserTeacherFriend(teacherId, Sets.newHashSet(userId), sourceForm);
+                teacherDao.update(null, new UpdateWrapper<Teacher>().lambda().eq(Teacher::getUserId, userId).set(Teacher::getCustomerId, teacherId));
             }
 
             // 新注册用户为老师身份时,更新好友关系为老师身份
@@ -614,5 +650,25 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
     public void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType) {
         this.baseMapper.delStudentFriendByTenantId(tenantId, userId, clientType);
     }
+
+    @Override
+    public void refreshCustomer(Long userId, ClientEnum userClientType, List<Long> friendIds, ClientEnum friendClientType) {
+
+        this.lambdaUpdate()
+                .set(ImUserFriend::getSourceForm, EImUserFriendSourceForm.TEACHER)
+                .eq(ImUserFriend::getUserId, userId)
+                .eq(ImUserFriend::getClientType, userClientType)
+                .in(ImUserFriend::getFriendId, friendIds)
+                .eq(ImUserFriend::getFriendType, friendClientType)
+                .update();
+
+        this.lambdaUpdate()
+                .set(ImUserFriend::getSourceForm, EImUserFriendSourceForm.TEACHER)
+                .in(ImUserFriend::getUserId, friendIds)
+                .eq(ImUserFriend::getClientType, friendClientType)
+                .eq(ImUserFriend::getFriendId, userId)
+                .eq(ImUserFriend::getFriendType, userClientType)
+                .update();
+    }
 }
 

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

@@ -34,7 +34,6 @@ import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.service.cbs.CbsMusicScoreService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.wrapper.*;
@@ -139,8 +138,6 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Resource
     private TenantAlbumMusicService tenantAlbumMusicService;
     @Resource
-    private CbsMusicScoreService cbsMusicScoreService;
-    @Resource
     private TenantAlbumService tenantAlbumService;
     @Resource
     private UserTenantAlbumRecordService userTenantAlbumRecordService;
@@ -308,17 +305,10 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (musicSheet == null) {
             throw new BizException("未找到曲目信息");
         }
-        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-        query.setApplicationId(applicationId);
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
         query.setMusicSheetIds(Collections.singletonList(musicSheet.getCbsMusicSheetId()));
-        query.setDelFlag(true);
-        query.setPage(1);
         query.setRows(1);
-        R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = musicFeignClientService.musicSheetPageByApplication(query);
-        if (pageInfoR.getCode() != 200) {
-            throw new BizException("获取曲目信息异常,{}", pageInfoR.getMessage());
-        }
-        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = pageInfoR.feignData().getRows();
+        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
         if (CollectionUtils.isEmpty(rows)) {
             throw new BizException("获取曲目信息失败");
         }
@@ -439,92 +429,87 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     public void initMusicSheetDetailVo(MusicSheetDetailVo detailVo,MusicSheet musicSheet) {
-        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-        query.setPage(1);
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
         query.setRows(1);
         query.setMusicSheetIds(Collections.singletonList(musicSheet.getCbsMusicSheetId()));
-        query.setDetailFlag(true);
-        R<PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = cbsMusicScoreService.selectPage(query);
-        if(pageInfoR.getCode() != 200){
+        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
+        if(CollectionUtils.isEmpty(rows)){
             throw new BizException("获取曲目信息失败");
         }
-        PageInfo<CbsMusicSheetWrapper.MusicSheetApplication> pageInfo = pageInfoR.getData();
-        if(pageInfo != null && CollectionUtils.isNotEmpty(pageInfo.getRows())){
-            CbsMusicSheetWrapper.MusicSheetApplication musicSheet1 = pageInfo.getRows().get(0);
-            CbsMusicSheetWrapper.MusicSheetExtend musicSheetExtend = musicSheet1.getMusicSheetExtend();
-            if (musicSheetExtend != null && musicSheetExtend.getUserId() != null) {
-                detailVo.setUserName(musicSheetExtend.getUserName());
-                detailVo.setUserId(musicSheetExtend.getUserId());
-                //获取用户头像
-                SysUser sysUser = sysUserFeignService.queryUserById(musicSheetExtend.getUserId());
-                if (sysUser != null) {
-                    detailVo.setUserAvatar(sysUser.getAvatar());
-                }
-            }
-            detailVo.setMusicPrice(musicSheet1.getMusicPrice());
-            detailVo.setSubjectNames(musicSheet1.getSubjectNames());
-            detailVo.setCode(musicSheet1.getSubjectCodes());
-            detailVo.setId(musicSheet.getId());
-            detailVo.setCbsMusicSheetId(musicSheet1.getId());
-            detailVo.setMp3Type(AudioTypeEnum.valueOf(musicSheet1.getIsPlayBeat()&&musicSheet1.getIsUseSystemBeat()?"MP3":"MP3_METRONOME"));
-            detailVo.setIsPlayBeat(musicSheet1.getIsPlayBeat());
-            detailVo.setAudioType(AudioTypeEnum.valueOf(musicSheet1.getPlayMode().getCode()));
-            detailVo.setCanEvaluate(musicSheet1.getIsEvaluated() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
-            detailVo.setShowFingering(musicSheet1.getIsShowFingering() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
-            detailVo.setMusicTagNames(musicSheet1.getMusicTagNames());
-            detailVo.setMusicImg(musicSheet1.getMusicImg());
-            detailVo.setTitleImg(musicSheet1.getMusicCover());
-            detailVo.setPlaySpeed(musicSheet1.getPlaySpeed());
-            List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheet1.getMusicSheetAccompanimentList();
-            if (CollectionUtils.isNotEmpty(accompanimentList)) {
-                detailVo.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
-            }
-            detailVo.setXmlFileUrl(musicSheet1.getXmlFileUrl());
-            detailVo.setMidiUrl(musicSheet1.getMidiFileUrl());
-            detailVo.setAuditVersion(musicSheet1.getAppAuditFlag() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
-            detailVo.setHasBeat((musicSheet1.getIsPlayBeat() && !musicSheet1.getIsUseSystemBeat()) ? YesOrNoEnum.YES : YesOrNoEnum.NO);
-            detailVo.setExtConfigJson(musicSheet1.getExtConfigJson());
-            detailVo.setMusicJSON(musicSheet1.getMusicJson());
-            detailVo.setMusicJianSvg(musicSheet1.getMusicJianSvg());
-            detailVo.setMusicFirstSvg(musicSheet1.getMusicFirstSvg());
-            detailVo.setFirstTone(musicSheet1.getMusicFirstImg());
-            detailVo.setFixedTone(musicSheet1.getMusicJianImg());
-            List<CbsMusicSheetWrapper.MusicSheetSound> soundList = musicSheet1.getMusicSheetSoundList();
-            if (CollectionUtils.isNotEmpty(soundList)) {
-                List<MusicSheetAccompaniment> background = new ArrayList<>();
-                for (CbsMusicSheetWrapper.MusicSheetSound sound : soundList) {
-                    MusicSheetAccompaniment accompaniment = new MusicSheetAccompaniment();
-                    accompaniment.setMusicSheetId(musicSheet.getId());
-                    accompaniment.setAudioFileUrl(sound.getAudioFileUrl());
-                    accompaniment.setSortNumber(sound.getSortNumber());
-                    accompaniment.setTrack(sound.getTrack());
-                    accompaniment.setMusicalInstrumentId(sound.getMusicalInstrumentId());
-                    background.add(accompaniment);
-                }
-                //按照sortNumber排序
+        CbsMusicSheetWrapper.MusicSheetApplication musicSheet1 = rows.get(0);
+        CbsMusicSheetWrapper.MusicSheetExtend musicSheetExtend = musicSheet1.getMusicSheetExtend();
+        if (musicSheetExtend != null && musicSheetExtend.getUserId() != null) {
+            detailVo.setUserName(musicSheetExtend.getUserName());
+            detailVo.setUserId(musicSheetExtend.getUserId());
+            //获取用户头像
+            SysUser sysUser = sysUserFeignService.queryUserById(musicSheetExtend.getUserId());
+            if (sysUser != null) {
+                detailVo.setUserAvatar(sysUser.getAvatar());
+            }
+        }
+        detailVo.setMusicPrice(musicSheet1.getMusicPrice());
+        detailVo.setSubjectNames(musicSheet1.getSubjectNames());
+        detailVo.setCode(musicSheet1.getSubjectCodes());
+        detailVo.setId(musicSheet.getId());
+        detailVo.setCbsMusicSheetId(musicSheet1.getId());
+        detailVo.setMp3Type(AudioTypeEnum.valueOf(musicSheet1.getIsPlayBeat()&&musicSheet1.getIsUseSystemBeat()?"MP3":"MP3_METRONOME"));
+        detailVo.setIsPlayBeat(musicSheet1.getIsPlayBeat());
+        detailVo.setAudioType(AudioTypeEnum.valueOf(musicSheet1.getPlayMode().getCode()));
+        detailVo.setCanEvaluate(musicSheet1.getIsEvaluated() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+        detailVo.setShowFingering(musicSheet1.getIsShowFingering() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+        detailVo.setMusicTagNames(musicSheet1.getMusicTagNames());
+        detailVo.setMusicImg(musicSheet1.getMusicImg());
+        detailVo.setTitleImg(musicSheet1.getMusicCover());
+        detailVo.setPlaySpeed(musicSheet1.getPlaySpeed());
+        List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheet1.getMusicSheetAccompanimentList();
+        if (CollectionUtils.isNotEmpty(accompanimentList)) {
+            detailVo.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
+        }
+        detailVo.setXmlFileUrl(musicSheet1.getXmlFileUrl());
+        detailVo.setMidiUrl(musicSheet1.getMidiFileUrl());
+        detailVo.setAuditVersion(musicSheet1.getAppAuditFlag() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+        detailVo.setHasBeat((musicSheet1.getIsPlayBeat() && !musicSheet1.getIsUseSystemBeat()) ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+        detailVo.setExtConfigJson(musicSheet1.getExtConfigJson());
+        detailVo.setMusicJSON(musicSheet1.getMusicJson());
+        detailVo.setMusicJianSvg(musicSheet1.getMusicJianSvg());
+        detailVo.setMusicFirstSvg(musicSheet1.getMusicFirstSvg());
+        detailVo.setFirstTone(musicSheet1.getMusicFirstImg());
+        detailVo.setFixedTone(musicSheet1.getMusicJianImg());
+        List<CbsMusicSheetWrapper.MusicSheetSound> soundList = musicSheet1.getMusicSheetSoundList();
+        if (CollectionUtils.isNotEmpty(soundList)) {
+            List<MusicSheetAccompaniment> background = new ArrayList<>();
+            for (CbsMusicSheetWrapper.MusicSheetSound sound : soundList) {
+                MusicSheetAccompaniment accompaniment = new MusicSheetAccompaniment();
+                accompaniment.setMusicSheetId(musicSheet.getId());
+                accompaniment.setAudioFileUrl(sound.getAudioFileUrl());
+                accompaniment.setSortNumber(sound.getSortNumber());
+                accompaniment.setTrack(sound.getTrack());
+                accompaniment.setMusicalInstrumentId(sound.getMusicalInstrumentId());
+                background.add(accompaniment);
+            }
+            //按照sortNumber排序
 //            background.sort(Comparator.comparing(MusicSheetAccompaniment::getSortNumber));
-                detailVo.setBackground(background);
-                //获取乐器名称
-                String instrumentIds = background.stream().map(e -> e.getMusicalInstrumentId()).filter(StringUtils::isNotEmpty).collect(Collectors.joining(","));
-                if (StringUtils.isNotEmpty(instrumentIds)) {
-                    List<Long> instrumentIsList = Arrays.stream(instrumentIds.split(",")).map(Long::valueOf).distinct().collect(Collectors.toList());
-                    List<InstrumentWrapper.Instrument> instruments = instrumentService.getInstruments(instrumentIsList);
-                    Map<Long,InstrumentWrapper.Instrument> instrumentMap =
-                            instruments.stream().collect(Collectors.toMap(InstrumentWrapper.Instrument::getId, o -> o, (o1, o2) -> o1));
-                    for (MusicSheetAccompaniment accompaniment : background) {
-                        if (StringUtils.isNotEmpty(accompaniment.getMusicalInstrumentId())){
-                            StringBuffer sb = new StringBuffer();
-                            for (String s : accompaniment.getMusicalInstrumentId().split(",")) {
-                                InstrumentWrapper.Instrument instrument = instrumentMap.get(Long.parseLong(s));
-                                if (instrument != null){
-                                    if(sb.length() > 0) {
-                                        sb.append(",");
-                                    }
-                                    sb.append(instrument.getName());
+            detailVo.setBackground(background);
+            //获取乐器名称
+            String instrumentIds = background.stream().map(e -> e.getMusicalInstrumentId()).filter(StringUtils::isNotEmpty).collect(Collectors.joining(","));
+            if (StringUtils.isNotEmpty(instrumentIds)) {
+                List<Long> instrumentIsList = Arrays.stream(instrumentIds.split(",")).map(Long::valueOf).distinct().collect(Collectors.toList());
+                List<InstrumentWrapper.Instrument> instruments = instrumentService.getInstruments(instrumentIsList);
+                Map<Long,InstrumentWrapper.Instrument> instrumentMap =
+                        instruments.stream().collect(Collectors.toMap(InstrumentWrapper.Instrument::getId, o -> o, (o1, o2) -> o1));
+                for (MusicSheetAccompaniment accompaniment : background) {
+                    if (StringUtils.isNotEmpty(accompaniment.getMusicalInstrumentId())){
+                        StringBuffer sb = new StringBuffer();
+                        for (String s : accompaniment.getMusicalInstrumentId().split(",")) {
+                            InstrumentWrapper.Instrument instrument = instrumentMap.get(Long.parseLong(s));
+                            if (instrument != null){
+                                if(sb.length() > 0) {
+                                    sb.append(",");
                                 }
+                                sb.append(instrument.getName());
                             }
-                            accompaniment.setMusicalInstrumentName(sb.toString());
                         }
+                        accompaniment.setMusicalInstrumentName(sb.toString());
                     }
                 }
             }
@@ -856,24 +841,19 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     public void initMusicSheetVos(List<MusicSheetVo> records) {
         if(CollectionUtils.isNotEmpty(records)){
             List<Long> cbsMusicSheetIds = records.stream().map(e -> e.getCbsMusicSheetId()).collect(Collectors.toList());
-            CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-            query.setPage(1);
+            CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
             query.setRows(cbsMusicSheetIds.size());
             query.setMusicSheetIds(cbsMusicSheetIds);
-            query.setDetailFlag(true);
-            R<PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = cbsMusicScoreService.selectPage(query);
-            if(pageInfoR.getCode() != 200){
+            List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
+            if(CollectionUtils.isEmpty(rows)){
                 throw new BizException("获取曲目信息失败");
             }
-            PageInfo<CbsMusicSheetWrapper.MusicSheetApplication> pageInfo = pageInfoR.getData();
-            if(pageInfo != null && CollectionUtils.isNotEmpty(pageInfo.getRows())){
-                Map<Long, CbsMusicSheetWrapper.MusicSheetApplication> musicSheetApplicationMap = pageInfo.getRows()
-                        .stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplication::getId, Function.identity()));
-                for (MusicSheetVo record : records) {
-                    CbsMusicSheetWrapper.MusicSheetApplication musicSheetApplication = musicSheetApplicationMap.get(record.getCbsMusicSheetId());
-                    if(musicSheetApplication != null){
-                        this.initMusicSheetVo(record,musicSheetApplication);
-                    }
+            Map<Long, CbsMusicSheetWrapper.MusicSheetApplication> musicSheetApplicationMap = rows
+                    .stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplication::getId, Function.identity()));
+            for (MusicSheetVo record : records) {
+                CbsMusicSheetWrapper.MusicSheetApplication musicSheetApplication = musicSheetApplicationMap.get(record.getCbsMusicSheetId());
+                if(musicSheetApplication != null){
+                    this.initMusicSheetVo(record,musicSheetApplication);
                 }
             }
         }
@@ -1036,17 +1016,10 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (musicSheet == null) {
             throw new BizException("曲目不存在");
         }
-        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-        query.setApplicationId(applicationId);
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
         query.setMusicSheetIds(Collections.singletonList(musicSheet.getCbsMusicSheetId()));
-        query.setDelFlag(true);
-        query.setPage(1);
         query.setRows(1);
-        R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = musicFeignClientService.musicSheetPageByApplication(query);
-        if (pageInfoR.getCode() != 200) {
-            throw new BizException("获取曲目信息异常,{}", pageInfoR.getMessage());
-        }
-        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = pageInfoR.feignData().getRows();
+        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
         if (CollectionUtils.isEmpty(rows)) {
             throw new BizException("获取曲目信息失败");
         }
@@ -1538,17 +1511,10 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         List<Long> musicSheets = Arrays.stream(reasonDto.getMusicSheetIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
         List<MusicSheet> musicSheetList = musicSheetService.lambdaQuery().in(MusicSheet::getId, musicSheets).list();
 
-        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-        query.setApplicationId(applicationId);
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
         query.setMusicSheetIds(musicSheetList.stream().map(MusicSheet::getCbsMusicSheetId).collect(Collectors.toList()));
-        query.setDelFlag(true);
-        query.setPage(1);
         query.setRows(musicSheets.size());
-        R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = musicFeignClientService.musicSheetPageByApplication(query);
-        if (pageInfoR.getCode() != 200) {
-            throw new BizException("获取曲目信息异常,{}", pageInfoR.getMessage());
-        }
-        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = pageInfoR.feignData().getRows();
+        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
         if (CollectionUtils.isEmpty(rows)) {
             throw new BizException("获取曲目信息失败");
         }
@@ -1577,17 +1543,10 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if(CollectionUtils.isEmpty(sheetDetailVos)){
             return;
         }
-        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-        query.setApplicationId(applicationId);
-        query.setMusicSheetIds(sheetDetailVos.stream().map(e->e.getCbsMusicSheetId()).collect(Collectors.toList()));
-        query.setDelFlag(true);
-        query.setPage(1);
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
+        query.setMusicSheetIds(sheetDetailVos.stream().map(MusicSheet::getCbsMusicSheetId).collect(Collectors.toList()));
         query.setRows(query.getMusicSheetIds().size());
-        R<PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = musicFeignClientService.musicSheetPageByApplication(query);
-        if(pageInfoR.getCode() != 200){
-            throw new BizException("查询曲谱信息异常");
-        }
-        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = pageInfoR.feignData().getRows();
+        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
         if (CollectionUtils.isEmpty(rows)){
             throw new BizException("查询曲谱信息失败");
         }
@@ -2390,6 +2349,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         query.setDetailFlag(true);
         query.setDelFlag(true);
         query.setPage(1);
+        query.setAudioPlayTypeFlag(false);
         query.setApplicationId(applicationId);
         return query;
     }

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

@@ -22,6 +22,7 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.course.CourseRelationTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.mapper.PaymentDivMemberRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -463,7 +464,8 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         Set<Long> studentIds = new HashSet();
         studentIds.add(studentId);
         try {
-            imUserFriendService.saveUserFriend(teacherId, studentIds);
+            imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
+            imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
         } catch (Exception e) {
             log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);

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

@@ -18,6 +18,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.QueryMyFollowSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
@@ -33,6 +34,7 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
@@ -383,8 +385,10 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             //学生老师增加好友关系
             Set<Long> studentIds = new HashSet<>();
             studentIds.add(studentVo.getUserId());
-            imUserFriendService.saveUserFriend(userId, studentIds);
+            imUserFriendService.saveUserFriend(userId, studentIds, EImUserFriendSourceForm.TEACHER);
         }
+        imUserFriendService.refreshCustomer(userId, ClientEnum.TEACHER, Collections.singletonList(studentVo.getUserId()), ClientEnum.STUDENT);
+//        }
         resMap.put("now", detail);
         return HttpResponseResult.succeed(resMap);
     }
@@ -645,7 +649,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             for (Teacher teacher : teachers) {
                 HashSet<Long> studentIds = new HashSet<>();
                 studentIds.add(student.getUserId());
-                imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds);
+                imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             }
             addBindUnBindRecord(student.getUserId(),student.getTenantId(),true);
         }
@@ -736,7 +741,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             for (Teacher teacher : teachers) {
                 HashSet<Long> studentIds = new HashSet<>();
                 studentIds.add(student.getUserId());
-                imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds);
+                imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds,EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             }
 
             addBindUnBindRecord(student.getUserId(),studentInfo.getTenantId(),true);
@@ -885,6 +891,13 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         student.setTenantGroupId(studentInfo.getTenantGroupId());
 
         save(student);
+        //  与好友数量最少的客服建立好友关系
+        List<TeacherWrapper.TeacherFriend> customerServiceFriendNums = teacherDao.getCustomerServiceFriendNums();
+        if (!customerServiceFriendNums.isEmpty()) {
+            Long teacherId = customerServiceFriendNums.get(0).getTeacherId();
+            imUserFriendService.registerUserBindCustomerService(student.getUserId(),
+                    Collections.singletonList(teacherId), ClientEnum.STUDENT);
+        }
         try {
             // 注册IM
             imGroupCoreService.register(String.valueOf(student.getUserId()),ClientEnum.STUDENT.getCode(), sysUser.getUsername(), avatar);
@@ -898,17 +911,15 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(Teacher::getTenantId, student.getTenantId());
             List<Teacher> teacherList = teacherDao.selectList(queryWrapper);
-            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
-                    new HashSet<>(ImmutableList.of(sysUser.getId()))));
+            teacherList.forEach(next ->
+                    {
+                        imUserFriendService.saveUserFriend(next.getUserId(), new HashSet<>(ImmutableList.of(sysUser.getId())), EImUserFriendSourceForm.TEACHER);
+                        imUserFriendService.refreshCustomer(next.getUserId(), ClientEnum.TEACHER, Collections.singletonList(sysUser.getId()), ClientEnum.STUDENT);
+                    }
+            );
 
-            addBindUnBindRecord(student.getUserId(), student.getTenantId(), true);
-        }
 
-        //  与好友数量最少的客服建立好友关系
-        Teacher customerService = teacherDao.getCustomerServiceByFriendLeast();
-        if (customerService != null) {
-            imUserFriendService.registerUserBindCustomerService(student.getUserId(),
-                    Collections.singletonList(customerService.getUserId()), ClientEnum.STUDENT);
+            addBindUnBindRecord(student.getUserId(), student.getTenantId(), true);
         }
 
         // 加入机构小组群

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -27,6 +28,7 @@ import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.im.EImGroupMemberRoleType;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantBindRecordMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
@@ -328,8 +330,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> submit(TeacherSubmitReq teacherSubmitReq) throws BizException {
+        Long tenantId = teacherSubmitReq.getTenantId();
+        Boolean customerService = teacherSubmitReq.getCustomerService();
+        if (tenantId != null && tenantId > 0 && Boolean.TRUE.equals(customerService)) {
+            throw new BizException("客服不能有机构老师身份");
+        }
         // todo 暂时不上客服相关
-        teacherSubmitReq.setCustomerService(null);
+//        teacherSubmitReq.setCustomerService(null);
         if (null == teacherSubmitReq.getUserId()) {
 
             if (StringUtils.isNoneBlank(teacherSubmitReq.getPhone(), teacherSubmitReq.getCode())) {
@@ -540,7 +547,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                     .eq(Student::getTenantId, teacher.getTenantId()).list().stream()
                     .map(Student::getUserId).collect(Collectors.toSet());
 
-            imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+            imUserFriendService.saveUserFriend(teacher.getUserId(), collect, EImUserFriendSourceForm.TEACHER);
 
         }
 
@@ -626,10 +633,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
             //  与客服建立好友
             if (!Boolean.TRUE.equals(teacher.getCustomerService())) {
-                Teacher customerServiceTeacher = getCustomerServiceByFriendLeast();
-                if (customerServiceTeacher != null) {
+                List<TeacherWrapper.TeacherFriend> customerServiceFriendNums = this.getBaseMapper().getCustomerServiceFriendNums();
+                if (!customerServiceFriendNums.isEmpty()) {
+                    Long teacherId = customerServiceFriendNums.get(0).getTeacherId();
                     imUserFriendService.registerUserBindCustomerService(teacher.getUserId(),
-                            Collections.singletonList(customerServiceTeacher.getUserId()), ClientEnum.TEACHER);
+                            Collections.singletonList(teacherId), ClientEnum.TEACHER);
                 }
             }
         } else {
@@ -637,7 +645,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             Boolean customerService = teacher.getCustomerService();
             List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = new ArrayList<>();
             if (Boolean.TRUE.equals(customerService) && Boolean.FALSE.equals(teacherSubmitReq.getCustomerService())) {
-                customerServiceSendMsg2User.addAll(transferFriend(teacher.getUserId(), true));
+                customerServiceSendMsg2User.addAll(transferFriendV2(teacher.getUserId(), true));
+                clearUserCustomerRelation(teacherSubmitReq.getUserId());
+                this.update(null, new UpdateWrapper<Teacher>().lambda()
+                        .set(Teacher::getCustomerId, null)
+                        .eq(Teacher::getUserId, teacherSubmitReq.getUserId()));
+                teacher.setCustomerId(null);
             }
             // 如果机构解绑,更新机构ID为-1
             if (Boolean.TRUE.equals(teacherSubmitReq.getBindTenant())) {
@@ -690,8 +703,17 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return teacher;
     }
 
-    // 客服好友移交给其他客服
-    private List<TeacherWrapper.CustomerServiceSendMsg2User> transferFriend(Long userId, boolean saveGroupFriend) {
+    // 清除专属客服信息
+    private void clearUserCustomerRelation(Long userId) {
+        this.update(null, new UpdateWrapper<Teacher>().lambda()
+                .eq(Teacher::getCustomerId, userId)
+                .set(Teacher::getCustomerId, null));
+        studentService.update(null, new UpdateWrapper<Student>().lambda()
+                .eq(Student::getCustomerId, userId)
+                .set(Student::getCustomerId, null));
+    }
+
+    private List<TeacherWrapper.CustomerServiceSendMsg2User> transferFriendV2(Long userId, boolean saveGroupFriend){
         List<TeacherWrapper.CustomerServiceSendMsg2User> result = new ArrayList<>();
         // 所有的好友
         List<ImUserFriend> userFriendList = imUserFriendService.lambdaQuery()
@@ -699,6 +721,25 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
                 .list();
 
+        // 好友保留
+        userFriendList.stream().filter(n -> Boolean.FALSE.equals(saveGroupFriend) || EImUserFriendSourceForm.CUSTOMER.equals(n.getSourceForm()))
+                .collect(Collectors.groupingBy(ImUserFriend::getFriendType)).forEach((client, friends) -> {
+                    List<Long> friendIds = friends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList());
+                    imUserFriendService.lambdaUpdate()
+                            .eq(ImUserFriend::getUserId, userId)
+                            .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
+                            .in(ImUserFriend::getFriendId, friendIds)
+                            .eq(ImUserFriend::getFriendType, client)
+                            .remove();
+
+                    imUserFriendService.lambdaUpdate()
+                            .eq(ImUserFriend::getFriendId, userId)
+                            .eq(ImUserFriend::getFriendType, ClientEnum.TEACHER)
+                            .in(ImUserFriend::getUserId, friendIds)
+                            .eq(ImUserFriend::getClientType, client)
+                            .remove();
+                });
+
         // 其他客服
         List<TeacherWrapper.TeacherFriend> customerServiceFriendNums = this.getBaseMapper().getCustomerServiceFriendNums();
         customerServiceFriendNums.removeIf(n -> n.getTeacherId().equals(userId));
@@ -708,117 +749,34 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             return result;
         }
 
-        List<ImUserFriend> removeFriendList = userFriendList;
-        if (saveGroupFriend) {
-            // 群里的好友保留
-            List<String> groupIdList = imGroupMemberService.lambdaQuery()
-                    .eq(ImGroupMember::getUserId, userId)
-                    .eq(ImGroupMember::getIsAdmin, true)
-                    .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
-                    .list()
-                    .stream()
-                    .map(ImGroupMember::getGroupId).collect(Collectors.toList());
-
-            List<Long> savedTeacherIdList = new ArrayList<>();
-            List<Long> savedStudentIdList = new ArrayList<>();
-
-            if (!groupIdList.isEmpty()) {
-                List<ImGroupMember> savedMemberList = imGroupMemberService.lambdaQuery()
-                        .in(ImGroupMember::getGroupId, groupIdList)
-                        .eq(ImGroupMember::getIsAdmin, false)
-                        .ne(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
-                        .list();
-
-                savedTeacherIdList.addAll(savedMemberList.stream()
-                        .filter(n -> ImGroupMemberRoleType.TEACHER.equals(n.getRoleType()))
-                        .map(ImGroupMember::getUserId)
-                        .collect(Collectors.toList()));
-
-                savedStudentIdList.addAll(savedMemberList.stream()
-                        .filter(n -> ImGroupMemberRoleType.STUDENT.equals(n.getRoleType()))
-                        .map(ImGroupMember::getUserId)
-                        .collect(Collectors.toList()));
-            }
-
-            // 机构好友保留
-            Teacher teacher = this.getById(userId);
-            List<Long> tenantTeacherIds = new ArrayList<>();
-            List<Long> tenantStudentIds = new ArrayList<>();
-            if (teacher.getTenantId() > 0) {
-                List<Long> teacherIdList = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getFriendType())).map(ImUserFriend::getFriendId).collect(Collectors.toList());
-                List<Long> studentIdList = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getFriendType())).map(ImUserFriend::getFriendId).collect(Collectors.toList());
-                if (!teacherIdList.isEmpty()) {
-                    List<Long> tenantTeacherIdsTemp = this.lambdaQuery().in(Teacher::getUserId, teacherIdList)
-                            .eq(Teacher::getTenantId, teacher.getTenantId())
-                            .list()
-                            .stream().filter(n -> n.getTenantId() > 0).map(Teacher::getUserId).collect(Collectors.toList());
-                    tenantTeacherIds.addAll(tenantTeacherIdsTemp);
-                }
-                if (!studentIdList.isEmpty()) {
-                    List<Long> tenantStudentIdsTemp = studentService.lambdaQuery().in(Student::getUserId, studentIdList)
-                            .eq(Student::getTenantId, teacher.getTenantId())
-                            .list()
-                            .stream().filter(n -> n.getTenantId() > 0).map(Student::getUserId).collect(Collectors.toList());
-                    tenantStudentIds.addAll(tenantStudentIdsTemp);
-                }
-            }
-
-            // 删除的好友
-            removeFriendList = userFriendList.stream().filter(n -> {
-                if (ClientEnum.STUDENT.equals(n.getFriendType())) {
-                    if (tenantStudentIds.contains(n.getFriendId())) {
-                        return false;
-                    }
-                    return !savedStudentIdList.contains(n.getFriendId());
-                }
-                if (ClientEnum.TEACHER.equals(n.getFriendType())) {
-                    if (tenantTeacherIds.contains(n.getFriendId())) {
-                        return false;
-                    }
-                    return !savedTeacherIdList.contains(n.getFriendId());
-                }
-                return false;
-            }).collect(Collectors.toList());
-        }
-
-        // 删除好友
-        removeFriendList.stream().collect(Collectors.groupingBy(ImUserFriend::getFriendType)).forEach((client, friends) -> {
-            List<Long> friendIds = friends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList());
-            imUserFriendService.lambdaUpdate()
-                    .eq(ImUserFriend::getUserId, userId)
-                    .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
-                    .in(ImUserFriend::getFriendId, friendIds)
-                    .eq(ImUserFriend::getFriendType, client)
-                    .remove();
-
-            imUserFriendService.lambdaUpdate()
-                    .eq(ImUserFriend::getFriendId, userId)
-                    .eq(ImUserFriend::getFriendType, ClientEnum.TEACHER)
-                    .in(ImUserFriend::getUserId, friendIds)
-                    .eq(ImUserFriend::getClientType, client)
-                    .remove();
-        });
-
         if (customerIds.isEmpty()) {
             return result;
         }
-        // 去除好友里面存在其他客服关系的好友,只有没有客服好友的好友,才需要与客服建立好友关系
+
+        // 好友分配
+        // 存在专属客服的好友不需要分配
         List<ImUserFriend> teacherFriends = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getFriendType())).collect(Collectors.toList());
         if (!teacherFriends.isEmpty()) {
-            String teacherFriendIds = teacherFriends.stream().map(n -> n.getFriendId().toString()).distinct().collect(Collectors.joining(","));
-            List<Long> existFriendIds = imUserFriendService.getDao().queryExistCustomerServiceFriend(teacherFriendIds, ClientEnum.TEACHER.getCode())
+            List<Long> teacherFriendIds = teacherFriends.stream().map(ImUserFriend::getFriendId).distinct().collect(Collectors.toList());
+            List<Long> existFriendIds = this.lambdaQuery()
+                    .in(Teacher::getUserId, teacherFriendIds)
+                    .list()
                     .stream()
-                    .map(ImUserFriend::getUserId)
+                    .filter(n -> customerIds.contains(n.getCustomerId()))
+                    .map(Teacher::getUserId)
                     .collect(Collectors.toList());
             userFriendList.removeIf(n -> ClientEnum.TEACHER.equals(n.getFriendType()) && existFriendIds.contains(n.getFriendId()));
         }
 
         List<ImUserFriend> studentFriends = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getFriendType())).collect(Collectors.toList());
         if (!studentFriends.isEmpty()) {
-            String studentFriendIds = studentFriends.stream().map(n -> n.getFriendId().toString()).distinct().collect(Collectors.joining(","));
-            List<Long> existFriendIds = imUserFriendService.getDao().queryExistCustomerServiceFriend(studentFriendIds, ClientEnum.STUDENT.getCode())
+            List<Long> studentFriendIds = studentFriends.stream().map(ImUserFriend::getFriendId).distinct().collect(Collectors.toList());
+            List<Long> existFriendIds = studentService.lambdaQuery()
+                    .in(Student::getUserId, studentFriendIds)
+                    .list()
                     .stream()
-                    .map(ImUserFriend::getUserId)
+                    .filter(n -> customerIds.contains(n.getCustomerId()))
+                    .map(Student::getUserId)
                     .collect(Collectors.toList());
             userFriendList.removeIf(n -> ClientEnum.STUDENT.equals(n.getFriendType()) && existFriendIds.contains(n.getFriendId()));
         }
@@ -846,7 +804,16 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
 
         teacherFriendMap.forEach((teacherId, teacherIds) -> {
-            imUserFriendService.saveUserTeacherFriend(teacherId, teacherIds);
+            List<Long> sameTenant = getSameTenant(teacherId, teacherIds, ClientEnum.TEACHER);
+            Set<Long> same = teacherIds.stream().filter(sameTenant::contains).collect(Collectors.toSet());
+            if (!same.isEmpty()) {
+                imUserFriendService.saveUserTeacherFriend(teacherId, same, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(same), ClientEnum.TEACHER);
+            }
+            Set<Long> notSame = teacherIds.stream().filter(n->!sameTenant.contains(n)).collect(Collectors.toSet());
+            imUserFriendService.saveUserTeacherFriend(teacherId, notSame, EImUserFriendSourceForm.CUSTOMER);
+
+            this.lambdaUpdate().set(Teacher::getCustomerId,teacherId).in(Teacher::getUserId,teacherIds).update();
             // 发送消息
             TeacherWrapper.CustomerServiceSendMsg2User customerServiceSendMsg2User = new TeacherWrapper.CustomerServiceSendMsg2User();
             customerServiceSendMsg2User.setCustomerId(teacherId);
@@ -855,16 +822,43 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 //            imUserFriendService.sendCustomerServiceAddFriendMessage(teacherId, customerTitle, customerMessage, new ArrayList<>(teacherIds), ClientEnum.TEACHER);
         });
         studentFriendMap.forEach((teacherId, studentIds) -> {
-            imUserFriendService.saveUserFriend(teacherId, studentIds);
+            List<Long> sameTenant = getSameTenant(teacherId, studentIds, ClientEnum.STUDENT);
+            Set<Long> same = studentIds.stream().filter(sameTenant::contains).collect(Collectors.toSet());
+            if (!same.isEmpty()) {
+                imUserFriendService.saveUserFriend(teacherId, same, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(same), ClientEnum.STUDENT);
+            }
+            Set<Long> notSame = studentIds.stream().filter(n->!sameTenant.contains(n)).collect(Collectors.toSet());
+            imUserFriendService.saveUserFriend(teacherId, notSame, EImUserFriendSourceForm.CUSTOMER);
+
+            studentService.lambdaUpdate().set(Student::getCustomerId, teacherId).in(Student::getUserId, studentIds).update();
             TeacherWrapper.CustomerServiceSendMsg2User customerServiceSendMsg2User = new TeacherWrapper.CustomerServiceSendMsg2User();
             customerServiceSendMsg2User.setCustomerId(teacherId);
-            customerServiceSendMsg2User.getTeacherIds().addAll(studentIds);
+            customerServiceSendMsg2User.getStudentIds().addAll(studentIds);
             result.add(customerServiceSendMsg2User);
 //            imUserFriendService.sendCustomerServiceAddFriendMessage(teacherId, customerTitle, customerMessage, new ArrayList<>(studentIds), ClientEnum.STUDENT);
         });
         return result;
     }
 
+    private List<Long> getSameTenant(Long teacherId, Set<Long> userIds, ClientEnum clientEnum) {
+        Teacher teacher = this.getById(teacherId);
+        Long tenantId = teacher.getTenantId();
+        if (tenantId == null || tenantId <= 0) {
+            return new ArrayList<>();
+        }
+        if (ClientEnum.STUDENT.equals(clientEnum)) {
+            return studentService.lambdaQuery().in(Student::getUserId, userIds).list()
+                    .stream().filter(n -> tenantId.equals(n.getTenantId()))
+                    .map(Student::getUserId).collect(Collectors.toList());
+        }
+        if (ClientEnum.TEACHER.equals(clientEnum)) {
+            return this.lambdaQuery().in(Teacher::getUserId, userIds).list()
+                    .stream().filter(n -> tenantId.equals(n.getTenantId()))
+                    .map(Teacher::getUserId).collect(Collectors.toList());
+        }
+        return new ArrayList<>();
+    }
     /***
      * 封装用户信息
      * @author liweifan
@@ -1336,10 +1330,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 });
             }
             // 删除好友关系
-            Boolean customerService = teacher.getCustomerService();
-            if (Boolean.FALSE.equals(customerService)) {
-                imUserFriendService.delStudentFriendByTenantId(teacher.getTenantId(), teacher.getUserId(), ClientEnum.TEACHER.getCode());
-            }
+            imUserFriendService.delStudentFriendByTenantId(teacher.getTenantId(), teacher.getUserId(), ClientEnum.TEACHER.getCode());
             addBindUnBindRecord(teacher.getUserId(), teacher.getTenantId(), false);
             SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
             sendBindUnBindSMS(teacher.getUserId(), sysUser.getPhone(), MessageTypeEnum.TEACHER_UNBIND_TENANT, teacher.getTenantId());
@@ -1363,7 +1354,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                     .collect(Collectors.toSet());
 
             if (!collect.isEmpty()) {
-                imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+                imUserFriendService.saveUserFriend(teacher.getUserId(), collect, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(collect), ClientEnum.STUDENT);
             }
             addBindUnBindRecord(teacher.getUserId(),updateTenant.getTenantId(),true);
             SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
@@ -1511,16 +1503,23 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (teacher == null) {
             throw new BizException("无效的老师账号");
         }
+        Long tenantId = teacher.getTenantId();
+        Boolean customerService = teacher.getCustomerService();
+        if (tenantId != null && tenantId > 0 && Boolean.TRUE.equals(customerService)) {
+            throw new BizException("客服不能有机构老师身份");
+        }
 
-        // todo 暂时不上,逻辑调整
         // 冻结客服,移交好友给其他客服
-//        Boolean customerService = teacher.getCustomerService();
-        Boolean customerService = null;
         if (UserLockFlag.NORMAL.equals(teacher.getLockFlag()) && Boolean.TRUE.equals(customerService)) {
-            List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = transferFriend(teacherId, false);
-            String customerMessage = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG);
-            String customerTitle = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG_TITLE);
+            List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = transferFriendV2(teacherId, false);
+            clearUserCustomerRelation(teacherId);
+            this.update(null, new UpdateWrapper<Teacher>().lambda()
+                    .set(Teacher::getCustomerId, null)
+                    .eq(Teacher::getUserId, teacherId));
+            teacher.setCustomerId(null);
             for (TeacherWrapper.CustomerServiceSendMsg2User serviceSendMsg2User : customerServiceSendMsg2User) {
+                String customerMessage = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG);
+                String customerTitle = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG_TITLE);
                 imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getTeacherIds(),
                         ClientEnum.TEACHER);
                 imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getStudentIds(),

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

@@ -4,24 +4,17 @@ import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dayaedu.cbs.common.enums.EClientType;
 import com.dayaedu.cbs.common.enums.school.ECourseType;
 import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
-import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
-import com.dayaedu.cbs.openfeign.service.CbsMusicSheetService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsCourseTypeWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
-import com.microsvc.toolkit.common.response.template.R;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
-import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.service.cbs.CbsMusicScoreService;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.toolset.base.exception.BizException;
@@ -70,9 +63,6 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     private MusicFavoriteService musicFavoriteService;
 
     @Autowired
-    private CbsMusicScoreService cbsMusicScoreService;
-
-    @Autowired
     private TenantAlbumCategoryDetailService tenantAlbumCategoryDetailService;
 
     @Autowired
@@ -108,19 +98,15 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
             if (CollectionUtils.isEmpty(musicSheets)) {
                 return page.setRecords(musicSheets);
             }
-            CbsMusicSheetWrapper.MusicSheetApplicationQuery cbsQuery = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
+            CbsMusicSheetWrapper.MusicSheetApplicationQuery cbsQuery = musicSheetService.getMusicSheetApplicationQuery();
             List<Long> cbsMusicSheetIds = musicSheets.stream().map(e -> e.getCbsMusicSheetId()).collect(Collectors.toList());
             cbsQuery.setMusicSheetIds(cbsMusicSheetIds);
-            cbsQuery.setDelFlag(true);
-            cbsQuery.setPage(1);
             cbsQuery.setRows(cbsMusicSheetIds.size());
-            R<PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = cbsMusicScoreService.selectPage(cbsQuery);
-            if (pageInfoR.getCode() != 200) {
-                log.error("查询内容平台曲目失败,{}", pageInfoR.getMessage());
+            List<CbsMusicSheetWrapper.MusicSheetApplication> rows = musicSheetService.queryCbsMusicSheetApplication(cbsQuery);
+            if (CollectionUtils.isEmpty(rows)) {
                 throw new BizException("查询内容平台曲目失败");
             }
-            Map<Long,CbsMusicSheetWrapper.MusicSheetApplication> recordMap = pageInfoR.getData().getRows()
-                    .stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplication::getId, o -> o));
+            Map<Long,CbsMusicSheetWrapper.MusicSheetApplication> recordMap = rows.stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplication::getId, o -> o));
 
             // 设置上传人
             List<Long> userIds = musicSheets.stream()

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

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseCoursewareMapper.xml

@@ -51,7 +51,7 @@
                 </foreach>
             </if>
             <if test="param.subjectIdList != null and param.subjectIdList.size() != 0">
-                and (ms.music_subject_ is null or ms.music_subject_ = '' OR ms.music_sheet_type_ = 'CONCERT' OR
+                and (ms.music_subject_ is null or ms.music_subject_ = '' OR ms.music_sheet_type_ = 'CONCERT' OR ms.is_all_subject_ OR
                 <foreach collection="param.subjectIdList" separator="or" item="item" open="(" close=")">
                     find_in_set(#{item},ms.music_subject_)
                 </foreach>)

+ 4 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml

@@ -8,6 +8,7 @@
         <result column="friend_nickname_" jdbcType="VARCHAR" property="friendNickname"/>
         <result column="friend_avatar_" jdbcType="VARCHAR" property="friendAvatar"/>
         <result column="memo_" jdbcType="VARCHAR" property="memo"/>
+        <result column="source_form_" jdbcType="VARCHAR" property="sourceForm"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
     </resultMap>
@@ -18,9 +19,10 @@
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.ImUserFriend">
-        INSERT INTO im_user_friend(user_id_, client_type_, friend_id_, friend_type_, friend_nickname_,friend_avatar_, memo_, create_time_, update_time_) VALUES
+        INSERT INTO im_user_friend(user_id_, client_type_, friend_id_, friend_type_, friend_nickname_,friend_avatar_, memo_, source_form_, create_time_, update_time_) VALUES
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.userId}, #{entity.clientType}, #{entity.friendId}, #{entity.friendType}, #{entity.friendNickname}, #{entity.friendAvatar}, #{entity.memo}, #{entity.createTime}, #{entity.updateTime})
+            (#{entity.userId}, #{entity.clientType}, #{entity.friendId}, #{entity.friendType}, #{entity.friendNickname}, #{entity.friendAvatar}, #{entity.memo},
+            #{entity.sourceForm},#{entity.createTime}, #{entity.updateTime})
         </foreach>
         ON DUPLICATE KEY UPDATE user_id_ = VALUES(user_id_), client_type_ = VALUES(client_type_), friend_id_ = VALUES(friend_id_), friend_type_ = VALUES(friend_type_)
     </insert>

+ 7 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -101,7 +101,7 @@
         (cbs_music_sheet_id_,music_tag_,payment_type_,charge_type_,top_flag_,exquisite_flag_,sort_number_,state_,audit_status_
             ,music_sheet_name_,music_subject_,music_svg_,composer_,accompaniment_type_,play_speed_,
          music_price_,notation_,music_sheet_type_,source_type_,provider_type_,audio_type_,show_fingering_,
-         can_evaluate_,create_by_,user_id_,score_type_
+         can_evaluate_,create_by_,user_id_,score_type_,is_all_subject_
         )
         values
         <foreach collection="vos" item="item" separator=",">
@@ -126,7 +126,7 @@
             #{item.musicSheetUpdate.showFingering},
             #{item.musicSheetUpdate.canEvaluate},
             #{item.musicSheetUpdate.userId},#{item.musicSheetUpdate.userId},
-            #{item.scoreType}
+            #{item.scoreType},#{item.musicSheetUpdate.isAllSubject}
              )
         </foreach>
     </insert>
@@ -218,11 +218,11 @@
             <foreach collection="param.subjectIdList" separator="or" item="item" open="(" close=")">
                 find_in_set(#{item},t.music_subject_)
             </foreach>
-            or t.music_subject_ is null or t.music_subject_ = ''  or t.music_sheet_type_ = 'CONCERT'
+            or t.music_subject_ is null or t.music_subject_ = ''  or t.music_sheet_type_ = 'CONCERT' OR t.is_all_subject_
             )
         </if>
         <if test="param.subjectIds != null and param.subjectIds != ''">
-            and(find_in_set(#{param.subjectIds},t.music_subject_) or t.music_subject_ is null or t.music_subject_ = ''  or t.music_sheet_type_ = 'CONCERT')
+            and(find_in_set(#{param.subjectIds},t.music_subject_) or t.music_subject_ is null or t.music_subject_ = ''  or t.music_sheet_type_ = 'CONCERT' OR t.is_all_subject_)
         </if>
         <if test="param.musicSheetIdlist != null and param.musicSheetIdlist.size() != 0">
             and t.id_ in
@@ -932,6 +932,7 @@
                 ms.audio_type_ = #{item.musicSheetUpdate.playMode},
                 ms.show_fingering_ = #{item.musicSheetUpdate.showFingering},
                 ms.can_evaluate_ = #{item.musicSheetUpdate.canEvaluate},
+                ms.is_all_subject_ = #{item.musicSheetUpdate.isAllSubject},
                 ms.source_type_ = CASE WHEN #{item.musicSheetUpdate.sourceType} = 'PLATFORM' THEN 'PLATFORM'
                 WHEN #{item.musicSheetUpdate.sourceType} = 'PERSON' THEN 'TEACHER' ELSE 'TENANT' END
             </if>
@@ -948,7 +949,7 @@
         update music_sheet
         set music_sheet_name_ = #{param.name},music_subject_ = #{param.subjectIds},music_svg_ = #{param.musicSvg},
             composer_ = #{param.composer},title_img_ = #{param.musicCover},music_img_ = #{param.musicCover},accompaniment_type_ = #{param.audioType},
-            play_speed_ = #{param.playSpeed},
+            play_speed_ = #{param.playSpeed},is_all_subject_ = #{item.isAllSubject},
             music_sheet_type_ = #{param.musicSheetType},source_type_ = CASE WHEN #{param.sourceType} = 'PLATFORM' THEN 'PLATFORM' ELSE 'TEACHER' END,
             create_by_ = #{param.userId}
         where cbs_music_sheet_id_ = #{param.id}
@@ -972,7 +973,7 @@
             <where>
                 t.state_=1 and t.audit_version_ = 0 and t.del_flag_ = 0 and t.audit_status_ = 'PASS'
                 <if test="param.subjectId != null">
-                    and ( t.music_subject_ = #{param.subjectId} or t.music_subject_ is null or t.music_subject_ = ''  or t.music_sheet_type_ = 'CONCERT')
+                    and ( t.music_subject_ = #{param.subjectId} or t.music_subject_ is null or t.music_subject_ = ''  or t.music_sheet_type_ = 'CONCERT' OR t.is_all_subject_)
                 </if>
                 <if test="param.name != null and param.name != ''">
                     and t.music_sheet_name_ like concat('%',#{param.name},'%')

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -16,6 +16,7 @@
         <result column="avatar_" property="avatar"/>
         <result column="tenant_group_id_" property="tenantGroupId"/>
         <result column="im_device_id_" property="imDeviceId"/>
+        <result column="customer_id_" property="customerId"/>
     </resultMap>
 
     <!-- 表字段 -->
@@ -35,6 +36,7 @@
         , t.update_time_ as `updateTime`
         , t.tenant_group_id_ as `tenantGroupId`
         , t.im_device_id_ as imDeviceId
+        , t.customer_id_ as customerId
         </sql>
     <update id="setSubject">
         update student set subject_id_ = #{subjectIds},update_time_ = now() where user_id_ = #{id}

+ 13 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -41,6 +41,7 @@
         <result column="update_time_" property="updateTime"/>
         <result column="im_device_id_" property="imDeviceId"/>
         <result column="customer_service_" property="customerService"/>
+        <result column="customer_id_" property="customerId"/>
     </resultMap>
 
     <resultMap id="HotTeacherVoMap" type="com.yonge.cooleshow.biz.dal.vo.HotTeacherVo">
@@ -93,6 +94,7 @@
         , t.settlement_from_ as settlementFrom
         , t.im_device_id_ as imDeviceId
         , t.customer_service_ as customerService
+        , t.customer_id_ as customerId
     </sql>
 
     <!-- 分页查询 -->
@@ -439,10 +441,10 @@
         from
         ( SELECT
         te.user_id_,
-        count(distinct iuf.friend_id_) friends
+        count(iuf.friend_id_) friends
         from teacher te
         left join sys_user su on te.user_id_ = su.id_
-        left join im_user_friend iuf on te.user_id_ = iuf.user_id_
+        left join im_user_friend iuf on te.user_id_ = iuf.user_id_ and iuf.source_form_='CUSTOMER'
         where te.lock_flag_ = 0 and te.customer_service_ = 1 and su.del_flag_ = 0 and su.lock_flag_ = 0
         group by te.user_id_
         order by friends
@@ -451,11 +453,17 @@
     </select>
 
     <select id="getCustomerServiceFriendNums" resultType="com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper$TeacherFriend">
-        SELECT te.user_id_                    teacherId,
-               count(distinct iuf.friend_id_) friendNums
+        SELECT te.user_id_       teacherId,
+               count(k.user_id_) friendNums
         from teacher te
                  left join sys_user su on te.user_id_ = su.id_
-                 left join im_user_friend iuf on te.user_id_ = iuf.user_id_ and iuf.client_type_ = 'TEACHER'
+                 left join (select s.user_id_, s.customer_id_
+                            from student s
+                            where s.customer_id_ is not null
+                            union all
+                            select te.user_id_, te.customer_id_
+                            from teacher te
+                            where te.customer_service_ = 0 and te.customer_id_ is not null) k on te.user_id_ = k.customer_id_
         where te.lock_flag_ = 0
           and te.customer_service_ = 1
           and su.del_flag_ = 0

+ 2 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml

@@ -37,7 +37,7 @@
                 and (find_in_set(#{param.musicTagId},m.music_tag_))
             </if>
             <if test="param.subjectId != null" >
-                and (find_in_set(#{param.subjectId},m.music_subject_) or m.music_subject_ is null or m.music_subject_ = '' or m.music_sheet_type_ = 'CONCERT')
+                and (find_in_set(#{param.subjectId},m.music_subject_) or m.music_subject_ is null or m.music_subject_ = '' or m.music_sheet_type_ = 'CONCERT' OR m.is_all_subject_)
             </if>
             <if test="param.subjectType != null">
                 and t.subject_type_ = #{param.subjectType}
@@ -124,7 +124,7 @@
         </if>
         <if test="param.subjectId != null">
             and ( find_in_set(#{param.subjectId},m.music_subject_) or m.music_subject_ is null or m.music_subject_ = ''
-            or m.music_sheet_type_ = 'CONCERT'  or t.subject_type_ not in  ('ENSEMBLE', 'MUSIC', 'SUBJECT'))
+            or m.music_sheet_type_ = 'CONCERT'  or t.subject_type_ not in  ('ENSEMBLE', 'MUSIC', 'SUBJECT') OR m.is_all_subject_)
         </if>
     </select>
 </mapper>

+ 1 - 1
pom.xml

@@ -23,7 +23,7 @@
 		<google.zxing.version>3.4.0</google.zxing.version>
 		<redisson.version>3.11.5</redisson.version>
 		<maven.test.skip>true</maven.test.skip>
-		<cbs.version>1.0.12</cbs.version>
+		<cbs.version>1.0.13</cbs.version>
 		<microsvc.version>1.0.8</microsvc.version>
 	</properties>