Преглед на файлове

Merge branch 'online' of http://git.dayaedu.com/yonge/cooleshow into zx_online_0910

# Conflicts:
#	pom.xml
zouxuan преди 8 месеца
родител
ревизия
fc250c5cac
променени са 71 файла, в които са добавени 940 реда и са изтрити 145 реда
  1. 2 9
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 6 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallPortalFeignService.java
  3. 20 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/ApiWrapper.java
  4. 39 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/enums/CheckStatus.java
  5. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  6. 8 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/MallPortalFeignServiceFallback.java
  7. 50 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/ImUserFriendController.java
  8. 26 8
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SysUserController.java
  9. 5 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/ImController.java
  10. 17 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java
  11. 3 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java
  12. 16 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java
  13. 12 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  14. 4 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  15. 5 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java
  16. 1 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  17. 16 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/wrapper/LogOffWrapper.java
  18. 1 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  19. 30 19
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  20. 4 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  21. 5 5
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  22. 6 1
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  23. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  24. 12 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  25. 2 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/OmsOrderReturnApplyDao.java
  26. 11 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsOrderReturnApplyVo.java
  27. 4 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java
  28. 70 8
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  29. 8 0
      cooleshow-mall/mall-portal/src/main/resources/config/mybatis/OmsOrderReturnApplyDao.xml
  30. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetAuthRecordDao.java
  31. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  32. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentStarDao.java
  33. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicSheetResult.java
  34. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  35. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetAccompaniment.java
  36. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java
  37. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java
  38. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  39. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentTotalService.java
  40. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java
  41. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  42. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherTotalService.java
  43. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/im/ImGroupCoreService.java
  44. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/im/impl/ImGroupCoreServiceImpl.java
  45. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseCoursewareServiceImpl.java
  46. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  47. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  48. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java
  49. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  50. 26 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  51. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentStarServiceImpl.java
  52. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTotalServiceImpl.java
  53. 194 55
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java
  54. 16 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  55. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherTotalServiceImpl.java
  56. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  57. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseCoursewareVo.java
  58. 14 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkVo.java
  59. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java
  60. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeworkVo.java
  61. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/im/ImUserFriendVO.java
  62. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  63. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  64. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  65. 5 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetAuthRecordMapper.xml
  66. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  67. 14 10
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentStarMapper.xml
  68. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserMapper.xml
  69. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  70. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  71. 1 1
      pom.xml

+ 2 - 9
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -1,13 +1,6 @@
 package com.yonge.cooleshow.api.feign;
 
-import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
-import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
-import com.yonge.cooleshow.api.feign.dto.ImUserInfo;
-import com.yonge.cooleshow.api.feign.dto.StudentApi;
-import com.yonge.cooleshow.api.feign.dto.StudentWrapper;
-import com.yonge.cooleshow.api.feign.dto.TeacherApi;
-import com.yonge.cooleshow.api.feign.dto.TenantWrapper;
-import com.yonge.cooleshow.api.feign.dto.UserFriendInfoVO;
+import com.yonge.cooleshow.api.feign.dto.*;
 import com.yonge.cooleshow.api.feign.fallback.AdminFeignServiceFallback;
 import com.yonge.cooleshow.common.entity.ContractDto;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -213,7 +206,7 @@ public interface AdminFeignService {
      * 账号注销校验
      */
     @PostMapping("/sysUser/logoffCheck")
-    HttpResponseResult<List<String>> accountLogoffCheck(@RequestParam(value = "phone") String phone);
+    HttpResponseResult<List<ApiWrapper.LogOff>> accountLogoffCheck(@RequestParam(value = "phone") String phone);
 
     @PostMapping("/sysUser/logoffQuitImGroup")
     HttpResponseResult<Boolean> logoffQuitImGroup(@RequestParam(value = "phone") String phone);

+ 6 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallPortalFeignService.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.api.feign;
 
 import com.yonge.cooleshow.api.feign.dto.OmsOrderDetail;
+import com.yonge.cooleshow.api.feign.enums.CheckStatus;
 import com.yonge.cooleshow.api.feign.fallback.MallPortalFeignServiceFallback;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.feign.config.FeignConfiguration;
@@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 @FeignClient(name = "${app-config.open-feign.mall-portal-server.name:mall-portal-server}", url = "${app-config.open-feign.mall-portal-server.url:}",
         configuration = FeignConfiguration.class, fallback = MallPortalFeignServiceFallback.class)
@@ -42,4 +45,7 @@ public interface MallPortalFeignService {
     @GetMapping("/order/queryOrderList")
     HttpResponseResult<List<OmsOrderDetail>> queryOrderList(@RequestParam("status") String status,
                                                             @RequestParam("userId") Long userId);
+
+    @GetMapping("/order/checkOrderStatus")
+    HttpResponseResult<Map<String, Set<CheckStatus>>> checkOrderStatus(@RequestParam("userId") Long userId);
 }

+ 20 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/ApiWrapper.java

@@ -0,0 +1,20 @@
+package com.yonge.cooleshow.api.feign.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.util.List;
+
+public class ApiWrapper {
+
+    @Data
+    public static class LogOff{
+
+        @ApiModelProperty("客户端类型")
+        private String client;
+
+        @ApiModelProperty("错误信息")
+        private List<String> errList;
+    }
+}

+ 39 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/enums/CheckStatus.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.api.feign.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 活动资源类型
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum CheckStatus implements BaseEnum<String, CheckStatus> {
+
+    // 待支付
+    WAIT_PAY("待支付"),
+    // 未确认收货
+    WAIT_CONFIRM("未确认收货"),
+    // 售后处理中
+    WAIT_AFTER_SALE("售后处理中"),
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    CheckStatus(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 1 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -207,7 +207,7 @@ public class AdminFeignServiceFallback implements AdminFeignService {
 
 
     @Override
-    public HttpResponseResult<List<String>> accountLogoffCheck(String phone) {
+    public HttpResponseResult<List<ApiWrapper.LogOff>> accountLogoffCheck(String phone) {
         return null;
     }
 

+ 8 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/MallPortalFeignServiceFallback.java

@@ -3,9 +3,12 @@ package com.yonge.cooleshow.api.feign.fallback;
 
 import com.yonge.cooleshow.api.feign.MallPortalFeignService;
 import com.yonge.cooleshow.api.feign.dto.OmsOrderDetail;
+import com.yonge.cooleshow.api.feign.enums.CheckStatus;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Description
@@ -33,4 +36,9 @@ public class MallPortalFeignServiceFallback implements MallPortalFeignService {
     public HttpResponseResult<List<OmsOrderDetail>> queryOrderList(String status, Long userId) {
         return null;
     }
+
+    @Override
+    public HttpResponseResult<Map<String, Set<CheckStatus>>> checkOrderStatus(Long userId) {
+        return null;
+    }
 }

+ 50 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/ImUserFriendController.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.admin.controller;
+
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MK;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
+import com.yonge.cooleshow.biz.dal.vo.im.ImUserFriendVO;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 用户通讯录表(ImUserFriend)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:59
+ */
+@Api(tags = "用户通讯录表")
+@RestController
+@RequestMapping("${app-config.url.admin:}/imUserFriend")
+public class ImUserFriendController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private ImUserFriendService imUserFriendService;
+
+    @ApiOperation("获取聊天用户详情")
+    @PostMapping(value = "/getMessageUser/{userId}")
+    public HttpResponseResult<ImUserFriendVO.ImMessageUser> getMessageUser(@ApiParam(value = "用户编号", required = true) @PathVariable("userId") String userId) {
+
+
+        // 用户ID
+        ImUserFriendVO.ImMessageUser imMessageUser = imUserFriendService.getImMessageUser(userId);
+        return succeed(imMessageUser);
+
+    }
+}
+

+ 26 - 8
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SysUserController.java

@@ -1,15 +1,19 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.api.feign.dto.ApiWrapper;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -21,15 +25,20 @@ public class SysUserController extends BaseController {
     @Autowired
     private SysUserService sysUserService;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private ImGroupCoreService imGroupCoreService;
 
     /**
      * 账号注销校验
      */
     @PostMapping("/logoffCheck")
-    HttpResponseResult<List<String>> accountLogoffCheck(@RequestParam("phone") String phone) {
-        List<String> strings = sysUserService.accountLogoffCheck(phone);
-        if (!CollectionUtils.isEmpty(strings)) {
-            return HttpResponseResult.succeed(strings);
+    HttpResponseResult<List<ApiWrapper.LogOff>> accountLogoffCheck(@RequestParam("phone") String phone) {
+        List<ApiWrapper.LogOff> logOffs = sysUserService.accountLogoffCheck(phone);
+        if (!CollectionUtils.isEmpty(logOffs)) {
+            return HttpResponseResult.succeed(logOffs);
         }
         return HttpResponseResult.succeed();
     }
@@ -40,4 +49,13 @@ public class SysUserController extends BaseController {
         return HttpResponseResult.succeed(true);
     }
 
+    @ApiOperation(value = "用户注销账号校验")
+    @GetMapping(value = "/logoffUser/{id}")
+    public HttpResponseResult<Void> logoffUser(@PathVariable("id") Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserById(id);
+        if (sysUser == null) {
+            return failed("用户不存在");
+        }
+        return sysUserFeignService.logoffUser(id);
+    }
 }

+ 5 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/ImController.java

@@ -24,6 +24,7 @@ import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
+import feign.Client;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -315,6 +316,10 @@ public class ImController extends BaseController {
         log.info("注册im用户");
 
         try {
+            if (ClientEnum.QR_TEACHER == clientType) {
+                // 机构老师扫码
+                clientType = ClientEnum.TEACHER;
+            }
             ImGroupWrapper.ImUserInfo register = imGroupService.register(userId, clientType, username, avatar);
             return JSON.parseObject(JSON.toJSONString(register), ImUserInfo.class);
         } catch (Exception e) {

+ 17 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java

@@ -7,8 +7,10 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.vo.im.ImUserFriendVO;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -50,6 +52,9 @@ public class ImUserFriendController extends BaseController {
     @Autowired
     private ImGroupService imGroupService;
 
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
     @ApiImplicitParams({
             @ApiImplicitParam(name = "search", dataType = "String", value = "根据用户编号、昵称模糊查询")
     })
@@ -102,5 +107,17 @@ public class ImUserFriendController extends BaseController {
 
         return succeed(userFriend);
     }
+
+
+    @ApiOperation("获取聊天用户详情")
+    @PostMapping(value = "/getMessageUser/{userId}")
+    public HttpResponseResult<ImUserFriendVO.ImMessageUser> getMessageUser(@ApiParam(value = "用户编号", required = true) @PathVariable("userId") String userId) {
+
+
+        // 用户ID
+        ImUserFriendVO.ImMessageUser imMessageUser = imUserFriendService.getImMessageUser(userId);
+        return succeed(imMessageUser);
+
+    }
 }
 

+ 3 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java

@@ -127,6 +127,9 @@ public class TeacherController extends BaseController {
     @GetMapping("/queryHotTeacherList")
     public HttpResponseResult<List<HotTeacherVo>> queryHotTeacherList() {
         SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
         Long userId = null;
         if (user != null && null != user.getId()) {
             userId = user.getId();

+ 16 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

@@ -2,9 +2,11 @@ package com.yonge.cooleshow.teacher.controller;
 
 
 import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
@@ -18,6 +20,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -50,6 +53,9 @@ public class ImUserFriendController extends BaseController {
     @Autowired
     private ImGroupService imGroupService;
 
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
     @SuppressWarnings("unchecked")//因为返回是集合,这里提示你集合内容较多排序可能回耗费性能
     @ApiImplicitParams({
             @ApiImplicitParam(name = "search", dataType = "String", value = "根据用户编号、昵称模糊查询")
@@ -104,5 +110,15 @@ public class ImUserFriendController extends BaseController {
         return succeed(userFriend);
     }
 
+    @ApiOperation("获取聊天用户详情")
+    @PostMapping(value = "/getMessageUser/{userId}")
+    public HttpResponseResult<ImUserFriendVO.ImMessageUser> getMessageUser(@ApiParam(value = "用户编号", required = true) @PathVariable("userId") String userId) {
+
+
+        // 用户ID
+        ImUserFriendVO.ImMessageUser imMessageUser = imUserFriendService.getImMessageUser(userId);
+        return succeed(imMessageUser);
+
+    }
 }
 

+ 12 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -210,6 +210,18 @@ public class TeacherController extends BaseController {
     }
 
 
+    @ApiOperation(value = "移除粉丝")
+    @PostMapping(value = "/delFans/{userId}")
+    public HttpResponseResult<Void> delFans(@PathVariable("userId") Long userId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        teacherService.delFans(userId, sysUser.getId());
+        return succeed();
+    }
+
+
     /**
      * 最近练习
      */

+ 4 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java

@@ -98,4 +98,8 @@ public interface SysUserFeignService {
 													@RequestParam("clientId")String clientId,
 													@RequestParam("clientSecret")String clientSecret);
 
+    @ApiOperation(value = "用户注销账号校验")
+    @GetMapping(value = "/user/logoffUser/{id}")
+    HttpResponseResult<Void> logoffUser(@PathVariable("id") Long id);
+
 }

+ 5 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -129,4 +129,9 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 	public HttpResponseResult<Map<String, Object>> smsLogin(String phone, String smsCode, String loginType, String clientId, String clientSecret) {
 		return null;
 	}
+    @Override
+    public HttpResponseResult<Void> logoffUser(Long id) {
+        return null;
+    }
+
 }

+ 1 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -188,4 +188,5 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
 
     SysUser getCustomerServiceByFriendLeast();
 
+    void updateNameAndImg(@Param("userId") Long userId);
 }

+ 16 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/wrapper/LogOffWrapper.java

@@ -0,0 +1,16 @@
+package com.yonge.cooleshow.auth.dal.wrapper;
+
+import lombok.Data;
+
+import java.util.List;
+
+public class LogOffWrapper {
+
+    @Data
+    public static class LogOff {
+
+        private boolean status = false;
+
+        private List<String> message;
+    }
+}

+ 1 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
 import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
+import com.yonge.cooleshow.auth.dal.wrapper.LogOffWrapper;
 import com.yonge.cooleshow.auth.enums.EClientType;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.ImUserModel;

+ 30 - 19
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.auth.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.api.feign.dto.ApiWrapper;
 import com.yonge.cooleshow.auth.api.dto.QRLoginDto;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
@@ -11,6 +13,7 @@ import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.config.RongCloudConfig;
 import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
 import com.yonge.cooleshow.auth.dal.dao.SysUserDao;
+import com.yonge.cooleshow.auth.dal.wrapper.LogOffWrapper;
 import com.yonge.cooleshow.auth.enums.EClientType;
 import com.yonge.cooleshow.auth.service.SysConfigService;
 import com.yonge.cooleshow.auth.service.SysRoleMenuService;
@@ -423,17 +426,22 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Void> logoffByPhone(String phone) {
-
         // todo: 暂时不上
-//        try {
-//            HttpResponseResult<List<String>> check = adminFeignService.accountLogoffCheck(phone);
-//            List<String> errMsg = check.getData();
-//            if (!CollectionUtils.isEmpty(errMsg)) {
-//                return HttpResponseResult.failed(5101, null, String.join(",", errMsg));
-//            }
-//        } catch (Exception e) {
-//            throw new BizException("数据检查失败");
-//        }
+        try {
+            HttpResponseResult<List<ApiWrapper.LogOff>> check = adminFeignService.accountLogoffCheck(phone);
+            if (!check.getStatus()) {
+                log.error("logoffByPhone check error", check.getMsg());
+                throw new BizException("数据检查失败");
+            }
+            List<ApiWrapper.LogOff> errMsg = check.getData();
+            if (!CollectionUtils.isEmpty(errMsg)) {
+                return HttpResponseResult.failed(5201, null, JSON.toJSONString(errMsg));
+            }
+        } catch (Exception e) {
+            log.error("logoffByPhone check error", e);
+            throw new BizException("数据检查失败");
+        }
+        SysUser sysUser = sysUserDao.queryByPhone(phone);
         int num = sysUserDao.countByPhone(phone);
         //冻结相关所有客户端账号
         sysUserDao.updateLockStatusByPhone(phone);
@@ -442,8 +450,11 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         if(i < 1){
             throw new BizException("用户不存在或已注销");
         }
+
+        // 修改名称 和头像
+        sysUserDao.updateNameAndImg(sysUser.getId());
         // 解散群、退群、删除好友关系
-//        adminFeignService.logoffQuitImGroup(phone);
+        adminFeignService.logoffQuitImGroup(phone);
 
         //退出登录
         tokenService.revokeTokenByPhone(phone);
@@ -452,14 +463,14 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
 
     @Override
     public HttpResponseResult<List<String>> logoffCheckByPhone(String phone) {
-        HttpResponseResult<List<String>> check = adminFeignService.accountLogoffCheck(phone);
-        if (check == null) {
-            throw new BizException("数据检查失败");
-        }
-        List<String> errMsg = check.getData();
-        if (!CollectionUtils.isEmpty(errMsg)) {
-            return HttpResponseResult.failed(500, errMsg, "存在未处理事项");
-        }
+//        HttpResponseResult<List<ApiWrapper.LogOff>> check = adminFeignService.accountLogoffCheck(phone);
+//        if (check == null) {
+//            throw new BizException("数据检查失败");
+//        }
+//        List<ApiWrapper.LogOff> errMsg = check.getData();
+//        if (!CollectionUtils.isEmpty(errMsg)) {
+//            return HttpResponseResult.failed(500, errMsg, "存在未处理事项");
+//        }
         return HttpResponseResult.succeed();
     }
 

+ 4 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -49,6 +49,7 @@ import java.util.Base64;
 import java.util.Calendar;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
@@ -97,6 +98,9 @@ public class TokenController extends BaseController {
         if (authUser != null) {
             // 获取用户信息
             SysUser sysUser = userService.get(authUser.getUserId());
+            if (Objects.isNull(sysUser)) {
+                return null;
+            }
             // 获取用户机构信息
             sysUser.setTenantId(userService.getTenantByClient(authUser.getUserId(),authUser.getClientId()));
             return sysUser;

+ 5 - 5
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.entity.UserPassword;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
+import com.yonge.cooleshow.auth.dal.wrapper.LogOffWrapper;
 import com.yonge.cooleshow.auth.service.SysConfigService;
 import com.yonge.cooleshow.auth.service.SysRoleService;
 import com.yonge.cooleshow.auth.service.SysUserRoleService;
@@ -456,14 +457,13 @@ public class UserController extends BaseController {
     }
 
     @ApiOperation(value = "用户注销账号校验")
-    @GetMapping(value = "/logoffCheck")
-    public HttpResponseResult<List<String>> logoffCheck() {
-        AuthUser authUser = SecurityUtils.getUser();
-        SysUser sysUser = sysUserService.get(authUser.getUserId());
+    @GetMapping(value = "/logoffUser/{id}")
+    public HttpResponseResult<Void> logoffUser(@PathVariable("id") Long id) {
+        SysUser sysUser = sysUserService.get(id);
         if (sysUser == null) {
             return failed("用户不存在");
         }
-        return sysUserService.logoffCheckByPhone(sysUser.getPhone());
+        return sysUserService.logoffByPhone(sysUser.getPhone());
     }
 
     @ApiOperation(value = "刷新token")

+ 6 - 1
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -53,7 +53,7 @@
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="SysUser">
 		SELECT su.* FROM sys_user su
-        WHERE su.del_flag_ = 0 and su.id_ = #{id}
+        WHERE su.id_ = #{id}
 	</select>
 
     <!-- 全查询 -->
@@ -405,4 +405,9 @@
               limit 1) t
                  left join sys_user m on m.id_ = t.user_id_
     </select>
+
+    <update id="updateNameAndImg">
+        update sys_user set bak_username_ = username_,username_ = concat('账号已注销',id_)
+                          ,avatar_ = (select param_value_ from sys_config where param_name_ = 'logoff_img') where id_= #{userId};
+    </update>
 </mapper>

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -478,4 +478,5 @@ public interface SysConfigConstant {
      */
     String TENANT_ALBUM_MUSIC_TYPE_CATEGORY = "tenant_album_music_type_category";
     String COURSE_SUBJECT_MAP = "course_subject_map";
+    String LOGOFF_IMG = "logoff_img";
 }

+ 12 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.portal.controller;
 
+import com.yonge.cooleshow.api.feign.enums.CheckStatus;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -126,6 +128,16 @@ public class OmsPortalOrderController {
         return HttpResponseResult.succeed(portalOrderService.queryOrderList(userId, status));
     }
 
+
+    /**
+     * feign 接口
+     */
+    @RequestMapping(value = "/checkOrderStatus", method = RequestMethod.GET)
+    @ResponseBody
+    public HttpResponseResult<Map<String, Set<CheckStatus>>> checkOrderStatus(@RequestParam("userId") Long userId) {
+        return HttpResponseResult.succeed(portalOrderService.checkOrderStatus(userId));
+    }
+
     @ApiOperation("根据ID获取订单详情")
     @RequestMapping(value = "/detail/{orderId}", method = RequestMethod.GET)
     @ResponseBody

+ 2 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/OmsOrderReturnApplyDao.java

@@ -21,4 +21,6 @@ public interface OmsOrderReturnApplyDao {
      * 获取申请详情
      */
     OmsOrderReturnApplyResult getDetail(@Param("id")Long id);
+
+    List<OmsOrderReturnApplyVo> getCheckOrder(@Param("userId") Long userId);
 }

+ 11 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsOrderReturnApplyVo.java

@@ -19,6 +19,17 @@ public class OmsOrderReturnApplyVo extends OmsOrderReturnApply {
     @ApiModelProperty("退款状态 pending 交易处理中 succeeded 交易成功 failed 交易失败")
     private String refundStatus;
 
+    @ApiModelProperty("下单平台 STUDENT TEACHER")
+    private String platformType;
+
+    public String getPlatformType() {
+        return platformType;
+    }
+
+    public void setPlatformType(String platformType) {
+        this.platformType = platformType;
+    }
+
     public Date getArrivalTime() {
         return arrivalTime;
     }

+ 4 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.portal.service;
 
+import com.yonge.cooleshow.api.feign.enums.CheckStatus;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
 import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
@@ -14,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 前台订单管理Service
@@ -163,4 +165,6 @@ public interface OmsPortalOrderService {
     Boolean lockSku(Long skuId, String platform, Boolean lockState);
 
     List<OmsOrderDetail> queryOrderList(Long userId, String status);
+
+    Map<String, Set<CheckStatus>> checkOrderStatus(Long userId);
 }

+ 70 - 8
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -4,9 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.api.feign.AdminFeignService;
 import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
 import com.yonge.cooleshow.api.feign.dto.StudentWrapper;
+import com.yonge.cooleshow.api.feign.enums.CheckStatus;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.entity.ContractDto;
@@ -45,6 +47,7 @@ import com.yonge.cooleshow.mbg.model.UmsMemberReceiveAddress;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 import com.yonge.cooleshow.mbg.model.UserOrderRefund;
 import com.yonge.cooleshow.portal.component.CancelOrderSender;
+import com.yonge.cooleshow.portal.dao.OmsOrderReturnApplyDao;
 import com.yonge.cooleshow.portal.dao.PortalOrderDao;
 import com.yonge.cooleshow.portal.dao.PortalOrderItemDao;
 import com.yonge.cooleshow.portal.dao.PortalProductDao;
@@ -54,6 +57,7 @@ import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
 import com.yonge.cooleshow.portal.domain.OrderParam;
 import com.yonge.cooleshow.portal.domain.ProductStock;
 import com.yonge.cooleshow.portal.domain.SmsCouponHistoryDetail;
+import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyVo;
 import com.yonge.cooleshow.portal.dto.OrderCreate;
 import com.yonge.cooleshow.portal.dto.OrderPayReq;
 import com.yonge.cooleshow.portal.dto.OrderPayRes;
@@ -94,12 +98,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -171,6 +170,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     @Autowired
     private OmsOrderCourierService orderCourierService;
 
+    @Autowired
+    private OmsOrderReturnApplyDao omsOrderReturnApplyDao;
 
     @Autowired
     private PortalProductDao productDao;
@@ -365,7 +366,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         }
         orderItemDao.insertList(orderItemList);
         //如使用优惠券更新优惠券使用状态
-        if (orderParam.getCouponId() != null) {
+        if (!StringUtil.isEmpty(orderParam.getCouponId())) {
             // updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
             // todo 远程调用更新优惠券使用
             adminFeignService.updateCouponOrderInfo(orderParam.getCouponId(),false,order.getOrderSn());
@@ -574,7 +575,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             // updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
             // todo 退回优惠券
 
-            adminFeignService.updateCouponOrderInfo(cancelOrder.getCouponId(),true,cancelOrder.getOrderSn());
+            if (!StringUtil.isEmpty(cancelOrder.getCouponId())) {
+                adminFeignService.updateCouponOrderInfo(cancelOrder.getCouponId(), true, cancelOrder.getOrderSn());
+            }
             //返还使用积分
             if (cancelOrder.getUseIntegration() != null) {
                 UmsMember member = memberService.getById(cancelOrder.getMemberId());
@@ -698,6 +701,65 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     }
 
     @Override
+    public Map<String, Set<CheckStatus>> checkOrderStatus(Long userId) {
+
+        // 订单类型:订单状态为待支付,未确认收货,售后处理中  这三个状态则不允许用户注销
+        OmsOrderExample orderExample = new OmsOrderExample();
+        OmsOrderExample.Criteria criteria = orderExample.createCriteria();
+        criteria.andMemberIdEqualTo(userId);
+        criteria.andStatusIn(Lists.newArrayList(0,6,1,2));
+        List<OmsOrder> omsOrders = orderMapper.selectByExample(orderExample);
+        Map<String,Set<CheckStatus>> orderStatusMap = new HashMap<>();
+        if (!omsOrders.isEmpty()) {
+            for (OmsOrder omsOrder : omsOrders) {
+                if (!"STUDENT,TEACHER".contains(omsOrder.getPlatformType())) {
+                    continue;
+                }
+                switch (omsOrder.getStatus()) {
+                    case 0:
+                    case 6: {
+                        Set<CheckStatus> checkStatuses = orderStatusMap.get(omsOrder.getPlatformType());
+                        if (checkStatuses == null) {
+                            checkStatuses = new HashSet<>();
+                        }
+                        checkStatuses.add(CheckStatus.WAIT_PAY);
+                        orderStatusMap.put(omsOrder.getPlatformType(), checkStatuses);
+                        break;
+                    }
+                    case 1:
+                    case 2: {
+                        Set<CheckStatus> checkStatuses = orderStatusMap.get(omsOrder.getPlatformType());
+                        if (checkStatuses == null) {
+                            checkStatuses = new HashSet<>();
+                        }
+                        checkStatuses.add(CheckStatus.WAIT_CONFIRM);
+                        orderStatusMap.put(omsOrder.getPlatformType(), checkStatuses);
+                        break;
+                    }
+                    default:
+                        break;
+                }
+            }
+        }
+        // 判断售后处理中的订单
+        List<OmsOrderReturnApplyVo> checkOrder = omsOrderReturnApplyDao.getCheckOrder(userId);
+        if (!CollectionUtils.isEmpty(checkOrder)) {
+            Map<String, List<OmsOrderReturnApplyVo>> map = checkOrder.stream().collect(Collectors.groupingBy(OmsOrderReturnApplyVo::getPlatformType));
+            map.forEach((k,v) -> {
+                Set<CheckStatus> checkStatuses = orderStatusMap.get(k);
+                if (checkStatuses == null) {
+                    checkStatuses = new HashSet<>();
+                }
+                checkStatuses.add(CheckStatus.WAIT_AFTER_SALE);
+                orderStatusMap.put(k, checkStatuses);
+            });
+        }
+        return orderStatusMap;
+
+
+    }
+
+    @Override
     public OmsOrderDetail detail(Long orderId) {
         OmsOrder omsOrder = orderMapper.selectByPrimaryKey(orderId);
         OmsOrderItemExample example = new OmsOrderItemExample();

+ 8 - 0
cooleshow-mall/mall-portal/src/main/resources/config/mybatis/OmsOrderReturnApplyDao.xml

@@ -9,6 +9,7 @@
 
         <result column="arrival_time_" jdbcType="VARCHAR" property="arrivalTime" />
         <result column="refundStatus" jdbcType="VARCHAR" property="refundStatus" />
+        <result column="platformType" jdbcType="VARCHAR" property="platformType" />
     </resultMap>
     <select id="getList" resultMap="returnApplyDetailResult">
         SELECT
@@ -60,4 +61,11 @@
             LEFT JOIN oms_company_address ca ON ra.company_address_id = ca.id
         WHERE ra.id=#{id};
     </select>
+
+    <select id="getCheckOrder" resultMap="returnApplyDetailResult">
+        select t.*,o.platform_type as platformType from oms_order_return_apply t
+        left join oms_order o on t.order_id = o.id
+        where o.member_id = #{userId} and t.status in (0,1)
+
+    </select>
 </mapper>

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetAuthRecordDao.java

@@ -17,4 +17,6 @@ public interface MusicSheetAuthRecordDao extends BaseMapper<MusicSheetAuthRecord
     List<TeacherMusicSheetVo> selectAuditPage(@Param("page") IPage<TeacherMusicSheetVo> page, @Param("param") TeacherMusicSheetAuditSearch query);
 
     List<MusicSheetAuthRecord> findByMusicSheetIds(@Param("musicSheetIds") List musicSheetIds, @Param("auditStatus") String auditStatus);
+
+    int countTeacherAudit(@Param("userId") Long userId);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -227,4 +227,6 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
     void updateState(@Param("ids") String ids);
 
     void delPractice(@Param("musicSheetId") Long musicSheetId, @Param("userId") Long userId, @Param("clientEnum") ClientEnum clientEnum);
+
+    int countTeacherEnable(@Param("userId") Long userId);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentStarDao.java

@@ -40,4 +40,6 @@ public interface StudentStarDao extends BaseMapper<StudentStar>{
      * @return
      */
     List<StudentStar> queryByStudentId(Long studentId);
+
+    void delFans(@Param("studentId") Long studentId, @Param("teacherId") Long teacherId);
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicSheetResult.java

@@ -17,4 +17,16 @@ public class CourseScheduleStudentMusicSheetResult extends CourseScheduleStudent
 
     @ApiModelProperty(value = "伴奏音量")
     private Integer soundVolume = 100;
+
+    @ApiModelProperty("是否支持混音节拍器")
+    private Boolean isMixBeat;
+
+    @ApiModelProperty("五线谱PDF文件")
+    private String musicPdfUrl;
+
+    @ApiModelProperty("首调PDF文件")
+    private String firstPdfUrl;
+
+    @ApiModelProperty("固定调PDF文件")
+    private String jianPdfUrl;
 }

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

@@ -316,6 +316,46 @@ public class MusicSheet implements Serializable {
     @ApiModelProperty(value = "机构曲目同步上传时间")
     private Date uploadTime;  //上传时间
 
+	@ApiModelProperty("是否支持混音节拍器")
+	@TableField(exist = false)
+	private Boolean isMixBeat;
+
+	@ApiModelProperty("总谱五线谱PDF文件")
+	@TableField(exist = false)
+	private String musicPdfUrl;
+
+	@ApiModelProperty("总谱首调PDF文件")
+	@TableField(exist = false)
+	private String firstPdfUrl;
+
+	@ApiModelProperty("总谱固定调PDF文件")
+	@TableField(exist = false)
+	private String jianPdfUrl;
+
+	@ApiModelProperty("原音五线谱PDF文件")
+	@TableField(exist = false)
+	private String soundMusicPdfUrl;
+
+	@ApiModelProperty("原音首调PDF文件")
+	@TableField(exist = false)
+	private String soundFirstPdfUrl;
+
+	@ApiModelProperty("原音固定调PDF文件")
+	@TableField(exist = false)
+	private String soundJianPdfUrl;
+
+	@ApiModelProperty("伴奏五线谱PDF文件")
+	@TableField(exist = false)
+	private String accMusicPdfUrl;
+
+	@ApiModelProperty("伴奏首调PDF文件")
+	@TableField(exist = false)
+	private String accFirstPdfUrl;
+
+	@ApiModelProperty("伴奏固定调PDF文件")
+	@TableField(exist = false)
+	private String accJianPdfUrl;
+
 	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/MusicSheetAccompaniment.java

@@ -66,6 +66,18 @@ public class MusicSheetAccompaniment extends BaseEntity {
     @ApiModelProperty(value = "速度")
     private String speed;  //速度
 
+    @ApiModelProperty("五线谱PDF文件")
+    @TableField(exist = false)
+    private String musicPdfUrl;
+
+    @ApiModelProperty("首调PDF文件")
+    @TableField(exist = false)
+    private String firstPdfUrl;
+
+    @ApiModelProperty("固定调PDF文件")
+    @TableField(exist = false)
+    private String jianPdfUrl;
+
     @TableField("create_time_")
     @ApiModelProperty(value = "创建时间")
     private java.util.Date createTime;  //创建时间

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java

@@ -18,7 +18,7 @@ public enum ClientEnum implements BaseEnum<String, ClientEnum> {
     SYSTEM("平台端"),
     WEBSITE("官网"),
     TENANT("机构端"),
-
+    QR_TEACHER("机构老师扫码"),
     ;
     @EnumValue
     private String code;

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

@@ -76,5 +76,7 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
     void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType);
 
     void refreshCustomer(Long userId, ClientEnum userClientType, List<Long> friendIds, ClientEnum friendClientType);
+
+    ImUserFriendVO.ImMessageUser getImMessageUser(String imUserId);
 }
 

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

@@ -20,6 +20,7 @@ import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
 import java.util.List;

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

@@ -45,4 +45,6 @@ public interface StudentTotalService extends IService<StudentTotal>  {
 	StudentTotal getTotalById(Long id);
 
 	void updateTotalCache(StudentTotal studentTotal);
+
+    StudentTotal totalStudentTotalById(Long id);
 }

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

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.yonge.cooleshow.api.feign.dto.ApiWrapper;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserInfoWrapper;
@@ -44,7 +44,7 @@ public interface SysUserService{
      */
     void imDeviceId(UserInfoWrapper.UpdateUser info);
 
-    List<String> accountLogoffCheck(String phone);
+    List<ApiWrapper.LogOff> accountLogoffCheck(String phone);
 
     void logoffQuitImGroup(String phone);
 }

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

@@ -211,4 +211,6 @@ public interface TeacherService extends IService<Teacher> {
      * @return String
      */
     String updateUserCustomerService(Long userId);
+
+    void delFans(Long studentId, Long teacherId);
 }

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

@@ -56,4 +56,6 @@ public interface TeacherTotalService extends IService<TeacherTotal>  {
     TeacherTotal getTotalById(Long userId);
 
 	void updateTotalCache(TeacherTotal teacherTotal);
+
+    TeacherTotal totalTeacherTotalById(Long id);
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/im/ImGroupCoreService.java

@@ -92,6 +92,15 @@ public interface ImGroupCoreService {
     void groupQuit(GroupMemberWrapper.ImGroupMember groupMember, String groupId,Boolean quit) throws Exception;
 
     /**
+     * 删除IM用户
+     *
+     * @param imUserIds
+     */
+    void  accountDelete(List<String> imUserIds);
+
+    void  messageDelete(String imUserId, List<String> toImUserIds);
+
+    /**
      * 用户主动退出群聊
      * @param userId 用户信息
      * @param clientType EClientType

+ 29 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/im/impl/ImGroupCoreServiceImpl.java

@@ -402,6 +402,35 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         }
     }
 
+    @Override
+    public void  accountDelete(List<String> imUserIds) {
+        try {
+            imPluginContext.getPluginService().accountDelete(imUserIds);
+        } catch (Exception e) {
+            log.error("accountDelete error",e);
+
+        }
+
+    }
+
+
+    @Override
+    public void  messageDelete(String imUserId,List<String> toImUserIds) {
+        if (CollectionUtils.isEmpty(toImUserIds)) {
+            return;
+        }
+
+        for (String toImUserId : toImUserIds) {
+            try {
+                imPluginContext.getPluginService().deletePrivateRecentContact(imUserId,null);
+            } catch (Exception e) {
+                log.error("messageDelete error",e);
+            }
+
+        }
+
+    }
+
     /**
      * 用户主动退出群聊
      *

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

@@ -84,16 +84,27 @@ public class CourseCoursewareServiceImpl extends ServiceImpl<CourseCoursewareDao
                     record.setPaymentType(sheetApplication.getPaymentType());
                     record.setStatus(sheetApplication.getStatus()?YesOrNoEnum.YES:YesOrNoEnum.NO);
                     record.setMusicStatus(sheetApplication.getStatus()?YesOrNoEnum.YES:YesOrNoEnum.NO);
+                    record.setIsMixBeat(sheetApplication.getIsMixBeat());
+                    record.setMusicPdfUrl(sheetApplication.getMusicPdfUrl());
+                    record.setFirstPdfUrl(sheetApplication.getFirstPdfUrl());
+                    record.setJianPdfUrl(sheetApplication.getJianPdfUrl());
                     List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = sheetApplication.getMusicSheetAccompanimentList();
                     if(CollectionUtils.isNotEmpty(accompanimentList)){
                         CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment = accompanimentList.get(0);
                         record.setUrl(accompaniment.getAudioFileUrl());
+                        record.setAccMusicPdfUrl(accompaniment.getMusicPdfUrl());
+                        record.setAccFirstPdfUrl(accompaniment.getFirstPdfUrl());
+                        record.setAccJianPdfUrl(accompaniment.getJianPdfUrl());
                     }
                     List<CbsMusicSheetWrapper.MusicSheetSound> soundList = sheetApplication.getMusicSheetSoundList();
                     if(CollectionUtils.isNotEmpty(soundList)){
-                        record.setMusicSheetAccompanimentId(soundList.get(0).getId().toString());
+                        CbsMusicSheetWrapper.MusicSheetSound sheetSound = soundList.get(0);
+                        record.setMusicSheetAccompanimentId(sheetSound.getId().toString());
                         String url = soundList.stream().map(CbsMusicSheetWrapper.MusicSheetSound::getAudioFileUrl).collect(Collectors.joining(","));
                         record.setMp3url(url);
+                        record.setSoundMusicPdfUrl(sheetSound.getMusicPdfUrl());
+                        record.setSoundFirstPdfUrl(sheetSound.getFirstPdfUrl());
+                        record.setSoundJianPdfUrl(sheetSound.getJianPdfUrl());
                     }
                 }
             }

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

@@ -154,6 +154,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
                 record.setStudentId(courseHomeworkVo.getStudentId());
                 record.setStudentAvatar(courseHomeworkVo.getStudentAvatar());
                 record.setStudentName(courseHomeworkVo.getStudentName());
+                record.setDelFlag(courseHomeworkVo.getDelFlag());
             }
             courseHomeworkVoList = teacherCollect.get(record.getCourseId());
             if (!CollectionUtils.isEmpty(courseHomeworkVoList)) {

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

@@ -912,7 +912,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         if (CollectionUtils.isNotEmpty(teacherList)) {
 
             for (CourseStudent item : teacherList) {
-                item.setImUserId(imGroupService.getImUserId(String.valueOf(item.getUserId()),ClientEnum.STUDENT.name()));
+                item.setImUserId(imGroupService.getImUserId(String.valueOf(item.getUserId()),ClientEnum.TEACHER.name()));
             }
         }
 

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

@@ -204,6 +204,10 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             //管乐迷的历史问题,原音和伴奏反过来
             studentMusicScore.setMp3Url(sheetApplication.getUrl());
             studentMusicScore.setUrl(sheetApplication.getMp3Url());
+            studentMusicScore.setMusicPdfUrl(sheetApplication.getMusicPdfUrl());
+            studentMusicScore.setFirstPdfUrl(sheetApplication.getFirstPdfUrl());
+            studentMusicScore.setJianPdfUrl(sheetApplication.getJianPdfUrl());
+            studentMusicScore.setIsMixBeat(sheetApplication.getIsMixBeat());
             result.add(studentMusicScore);
         }
         return result;

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

@@ -608,6 +608,16 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
         List<ImUserWrapper.ImUserFriend> userFriends = JSON.parseArray(JSON.toJSONString(records),
                 ImUserWrapper.ImUserFriend.class);
 
+        // 获取好友ID,查询注销的人,过滤
+        if (CollectionUtils.isNotEmpty(userFriends)) {
+            List<Long> userIds = userFriends.stream().map(ImUserWrapper.ImUserFriend::getFriendId).collect(Collectors.toList());
+            List<com.yonge.cooleshow.biz.dal.entity.SysUser> sysUsers = sysUserMapper.selectBatchIds(userIds);
+            List<Long> delUserIds = sysUsers.stream().filter(o -> o.getDelFlag() == 1).map(o -> o.getId()).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(delUserIds)) {
+                userFriends = userFriends.stream().filter(o -> !delUserIds.contains(o.getFriendId())).collect(Collectors.toList());
+            }
+        }
+
         for (ImUserWrapper.ImUserFriend item : userFriends) {
             if (item.getFriendType() == null) {
                 continue;
@@ -655,5 +665,23 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
                 .eq(ImUserFriend::getFriendType, userClientType)
                 .update();*/
     }
+
+    @Override
+    public ImUserFriendVO.ImMessageUser getImMessageUser(String imUserId) {
+        long id = Long.parseLong(imGroupService.analysisImUserId(imUserId));
+
+        SysUser byUserId = sysUserMapper.getByUserId(id);
+
+        ImUserFriendVO.ImMessageUser imMessageUser = new ImUserFriendVO.ImMessageUser();
+        imMessageUser.setImUserId(imUserId);
+        imMessageUser.setDelFlag(true);
+        if (byUserId !=null) {
+            imMessageUser.setUserId(byUserId.getId());
+            imMessageUser.setDelFlag(byUserId.getDelFlag());
+            imMessageUser.setUsername(byUserId.getUsername());
+            imMessageUser.setAvatar(byUserId.getAvatar());
+        }
+        return imMessageUser;
+    }
 }
 

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

@@ -464,9 +464,17 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         detailVo.setMusicImg(musicSheet1.getMusicImg());
         detailVo.setTitleImg(musicSheet1.getMusicCover());
         detailVo.setPlaySpeed(musicSheet1.getPlaySpeed());
+        detailVo.setIsMixBeat(musicSheet1.getIsMixBeat());
+        detailVo.setMusicPdfUrl(musicSheet1.getMusicPdfUrl());
+        detailVo.setFirstPdfUrl(musicSheet1.getFirstPdfUrl());
+        detailVo.setJianPdfUrl(musicSheet1.getJianPdfUrl());
         List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheet1.getMusicSheetAccompanimentList();
         if (CollectionUtils.isNotEmpty(accompanimentList)) {
-            detailVo.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
+            CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment = accompanimentList.get(0);
+            detailVo.setMetronomeUrl(accompaniment.getAudioFileUrl());
+            detailVo.setAccMusicPdfUrl(accompaniment.getMusicPdfUrl());
+            detailVo.setAccFirstPdfUrl(accompaniment.getFirstPdfUrl());
+            detailVo.setAccJianPdfUrl(accompaniment.getJianPdfUrl());
         }
         detailVo.setXmlFileUrl(musicSheet1.getXmlFileUrl());
         detailVo.setMidiUrl(musicSheet1.getMidiFileUrl());
@@ -488,6 +496,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 accompaniment.setSortNumber(sound.getSortNumber());
                 accompaniment.setTrack(sound.getTrack());
                 accompaniment.setMusicalInstrumentId(sound.getMusicalInstrumentId());
+                accompaniment.setMusicPdfUrl(sound.getMusicPdfUrl());
+                accompaniment.setFirstPdfUrl(sound.getFirstPdfUrl());
+                accompaniment.setJianPdfUrl(sound.getJianPdfUrl());
                 background.add(accompaniment);
             }
             //按照sortNumber排序
@@ -570,8 +581,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         }
         sheet.setMusicPrice(musicSheetApplication.getMusicPrice());
         if (CollectionUtils.isNotEmpty(musicSheetApplication.getMusicSheetAccompanimentList())) {
-            sheet.setAudioFileUrl(musicSheetApplication.getMusicSheetAccompanimentList().get(0).getAudioFileUrl());
-            sheet.setMetronomeUrl(musicSheetApplication.getMusicSheetAccompanimentList().get(0).getAudioFileUrl());
+            CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment = musicSheetApplication.getMusicSheetAccompanimentList().get(0);
+            sheet.setAudioFileUrl(accompaniment.getAudioFileUrl());
+            sheet.setMetronomeUrl(accompaniment.getAudioFileUrl());
+            sheet.setAccMusicPdfUrl(accompaniment.getMusicPdfUrl());
+            sheet.setAccFirstPdfUrl(accompaniment.getFirstPdfUrl());
+            sheet.setAccJianPdfUrl(accompaniment.getJianPdfUrl());
         }
         sheet.setXmlFileUrl(musicSheetApplication.getXmlFileUrl());
         sheet.setMidiUrl(musicSheetApplication.getMidiFileUrl());
@@ -592,10 +607,6 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if(musicSheetApplication.getMusicSheetExtend() != null){
             sheet.setAddName(musicSheetApplication.getMusicSheetExtend().getUserName());
         }
-        List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheetApplication.getMusicSheetAccompanimentList();
-        if (CollectionUtils.isNotEmpty(accompanimentList)){
-            sheet.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
-        }
     }
 
     @Override
@@ -908,7 +919,11 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         record.setMusicTagNames(musicSheetApplication.getMusicTagNames());
         List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheetApplication.getMusicSheetAccompanimentList();
         if (CollectionUtils.isNotEmpty(accompanimentList)) {
-            record.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
+            CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment = accompanimentList.get(0);
+            record.setMetronomeUrl(accompaniment.getAudioFileUrl());
+            record.setAccMusicPdfUrl(accompaniment.getMusicPdfUrl());
+            record.setAccFirstPdfUrl(accompaniment.getFirstPdfUrl());
+            record.setAccJianPdfUrl(accompaniment.getJianPdfUrl());
         }
         record.setXmlFileUrl(musicSheetApplication.getXmlFileUrl());
         record.setMidiUrl(musicSheetApplication.getMidiFileUrl());
@@ -1661,10 +1676,6 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (CollectionUtils.isEmpty(rows)){
             throw new BizException("查询曲谱信息失败");
         }
-//        List<Subject> subjects = subjectService.getDao().getByCbsSubjectIds(rows.stream().map(CbsMusicSheetWrapper.MusicSheetApplication::getSubjectIds).
-//                filter(StringUtils::isNotEmpty).collect(Collectors.joining(",")));
-//        Map<Long, String> subjectMap = subjects.stream().collect(Collectors.toMap(Subject::getCbsSubjectId, Subject::getName));
-
         Map<Long,CbsMusicSheetWrapper.MusicSheetApplication> musicSheetMap =
                 rows.stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplication::getId, Function.identity()));
         for (MusicSheetDetailVo record : sheetDetailVos) {
@@ -1696,6 +1707,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 for (CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment : accompanimentList) {
                     MusicSheetAccompaniment musicSheetAccompaniment = new MusicSheetAccompaniment();
                     musicSheetAccompaniment.setAudioFileUrl(accompaniment.getAudioFileUrl());
+                    musicSheetAccompaniment.setMusicPdfUrl(accompaniment.getMusicPdfUrl());
+                    musicSheetAccompaniment.setFirstPdfUrl(accompaniment.getFirstPdfUrl());
+                    musicSheetAccompaniment.setJianPdfUrl(accompaniment.getJianPdfUrl());
                     background.add(musicSheetAccompaniment);
                 }
             }

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

@@ -75,8 +75,8 @@ public class StudentStarServiceImpl extends ServiceImpl<StudentStarDao, StudentS
             studentTotal.setStarTeacherNum(studentTotal.getStarTeacherNum() > 0 ? (studentTotal.getStarTeacherNum() - 1) : 0);
             teacherTotal.setFansNum(teacherTotal.getFansNum() > 0 ? (teacherTotal.getFansNum() - 1) : 0);
         }
-        studentTotalService.updateTotalCache(studentTotal);
-        teacherTotalService.updateTotalCache(teacherTotal);
+        studentTotalService.totalStudentTotalById(studentId);
+        teacherTotalService.totalTeacherTotalById(teacherId);
         return HttpResponseResult.succeed(true);
     }
 

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

@@ -131,7 +131,8 @@ public class StudentTotalServiceImpl extends ServiceImpl<StudentTotalDao, Studen
     }
 
 
-    private StudentTotal totalStudentTotalById(Long id) {
+    @Override
+    public StudentTotal totalStudentTotalById(Long id) {
         StudentTotal studentTotal = new StudentTotal();
         studentTotal.setUserId(id);
 

+ 194 - 55
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java

@@ -7,10 +7,13 @@ import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.response.template.R;
 import com.yonge.cooleshow.api.feign.MallPortalFeignService;
-import com.yonge.cooleshow.api.feign.dto.OmsOrderDetail;
+import com.yonge.cooleshow.api.feign.dto.ApiWrapper;
+import com.yonge.cooleshow.api.feign.enums.CheckStatus;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.MusicSheetAuthRecordDao;
+import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
@@ -20,13 +23,11 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
-import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.im.EImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
 import com.yonge.cooleshow.biz.dal.wrapper.UserInfoWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -45,13 +46,7 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -86,6 +81,9 @@ public class SysUserServiceImpl implements SysUserService {
     private ImGroupService imGroupService;
 
     @Autowired
+    private ImGroupCoreService imGroupCoreService;
+
+    @Autowired
     private CourseGroupService courseGroupService;
 
     @Autowired
@@ -100,6 +98,12 @@ public class SysUserServiceImpl implements SysUserService {
     @Autowired
     private ImUserFriendService imUserFriendService;
 
+    @Autowired
+    private MusicSheetDao musicSheetDao;
+
+    @Autowired
+    private MusicSheetAuthRecordDao musicSheetAuthRecordDao;
+
     @Resource
     private MessageFeignClientService messageFeignClientService;
     @Override
@@ -238,86 +242,216 @@ public class SysUserServiceImpl implements SysUserService {
     }
 
     @Override
-    public List<String> accountLogoffCheck(String phone) {
+    public List<ApiWrapper.LogOff> accountLogoffCheck(String phone) {
         SysUser sysUser = this.getDao().findUserByPhone(phone);
         if (sysUser == null || Boolean.TRUE.equals(sysUser.getDelFlag())) {
             throw new BizException("账号不存在");
         }
-        List<String> errMsg = new ArrayList<>();
         Long userId = sysUser.getId();
+        Map<String, List<String>> result = new HashMap<>();
 
         // 存在待支付、未确认收货、售后处理的订单
-        if(hasUnfinishedOrder(userId)){
-            errMsg.add("账户存在未支付、未确认收货、售后处理中的订单");
-        }
-
-        // 存在进行中的课程
-        // 陪练课
-        Integer course = courseGroupService.lambdaQuery()
-                .eq(CourseGroup::getTeacherId, userId)
-                .in(CourseGroup::getType, Arrays.asList("PRACTICE", "LIVE", "PIANO_ROOM_CLASS"))
-                .in(CourseGroup::getStatus, Arrays.asList("ING", "APPLY"))
-                .count();
-        // 视频课
-        Integer videoCourse = videoLessonGroupService.lambdaQuery()
-                .eq(VideoLessonGroup::getTeacherId, userId)
-                .eq(VideoLessonGroup::getShelvesFlag, 1)
-                .count();
-
-        if (course > 0 || videoCourse > 0) {
-            errMsg.add("存在进行中的课程");
+        Map<String, String> map = hasUnfinishedOrder(userId);
+        if(map != null && map.size()>0){
+            map.forEach((k,v)-> result.put(k, Lists.newArrayList("账号存在"+v+"的订单")));
         }
 
         Teacher teacher = teacherService.getById(userId);
 
         if (teacher != null) {
+            List<String> errMsg = new ArrayList<>();
             // 存在群主身份
             List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
-                    .eq(ImGroupMember::getUserId, userId)
-                    .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
-                    .list();
+                .eq(ImGroupMember::getUserId, userId)
+                .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
+                .list();
             List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).collect(Collectors.toList());
             if (!groupIdList.isEmpty()) {
                 Collection<ImGroup> imGroups = imGroupService.listByIds(groupIdList);
                 long orgGroups = imGroups.stream().filter(next -> ImGroupType.ORG.equals(next.getType())).count();
                 if (orgGroups > 0) {
-                    errMsg.add("账户为机构群群主、需要庄毅群主或解散群聊");
+                    errMsg.add("账号为机构群群主,需要转移群主或解散群聊");
                 }
             }
 
+            // 存在进行中的课程
+            // 陪练课
+            List<CourseGroup> list = courseGroupService.lambdaQuery()
+                .eq(CourseGroup::getTeacherId, userId)
+                .in(CourseGroup::getType, Arrays.asList("PRACTICE", "LIVE", "PIANO_ROOM_CLASS"))
+                .in(CourseGroup::getStatus, Arrays.asList("ING", "APPLY", "NOT_SALE"))
+                .list();
+            String courseMsg ="";
+            if (!CollectionUtils.isEmpty(list)) {
+                List<String> courseTypes = list.stream().map(o -> o.getType()).distinct().collect(Collectors.toList());
+                if (courseTypes.contains(CourseScheduleEnum.LIVE.name())) {
+                    courseMsg += "直播课";
+                }
+                if (courseTypes.contains(CourseScheduleEnum.PRACTICE.name())){
+                    if (courseMsg.length() > 0) {
+                        courseMsg+="/";
+                    }
+                    courseMsg += "陪练课";
+                }
+                if (courseTypes.contains(CourseScheduleEnum.PIANO_ROOM_CLASS.name())){
+                    if (courseMsg.length() > 0) {
+                        courseMsg+="/";
+                    }
+                    courseMsg += "琴房课";
+                }
+                if (courseMsg.length() > 0) {
+                    courseMsg="账号存在未开始/进行中的" + courseMsg;
+                }
+            }
+            // 视频课
+            Integer videoCourse = videoLessonGroupService.lambdaQuery()
+                .eq(VideoLessonGroup::getTeacherId, userId)
+                .eq(VideoLessonGroup::getShelvesFlag, 1)
+                .count();
+
+            if (videoCourse > 0) {
+                if (courseMsg.length() > 0) {
+                    courseMsg+="和未下架的视频课";
+                } else {
+                    courseMsg="账号存在未下架的视频课";
+                }
+            } else {
+                // 判断审核中的视频课
+
+                videoCourse = videoLessonGroupService.lambdaQuery()
+                    .eq(VideoLessonGroup::getTeacherId, userId)
+                    .eq(VideoLessonGroup::getAuditStatus, AuthStatusEnum.DOING)
+                    .count();
+                if (videoCourse > 0) {
+                    if (courseMsg.length() > 0) {
+                        courseMsg+="和未下架的视频课";
+                    } else {
+                        courseMsg="账号存在未下架的视频课";
+                    }
+                }
+
+            }
+            if (courseMsg.length() > 0) {
+                errMsg.add(courseMsg);
+            }
+
             // 存在未提现的金额
             UserAccountVo detail = userAccountService.detail(userId);
-            if (detail != null && (detail.getAmountTotal().compareTo(BigDecimal.ZERO) > 0 || detail.getAmountUnrecorded().compareTo(BigDecimal.ZERO) > 0)) {
+            if (detail != null && (detail.getAmountTotal().compareTo(BigDecimal.ZERO) > 0
+                || detail.getAmountUsable().compareTo(BigDecimal.ZERO) > 0
+                || detail.getAmountFrozen().compareTo(BigDecimal.ZERO) > 0)
+                || detail.getAmountUnrecorded().compareTo(BigDecimal.ZERO) > 0) {
                 errMsg.add("收入未结算/推广计划未入账");
             }
+
+            // 查询来源是老师的,用户未下架的曲目
+            int i = musicSheetDao.countTeacherEnable(userId);
+            if (i > 0) {
+                errMsg.add("账号存在未下架曲目");
+            } else {
+                // 检查审核中的曲目
+                int j = musicSheetAuthRecordDao.countTeacherAudit(userId);
+                if (j > 0) {
+                    errMsg.add("账号存在未下架曲目");
+                }
+            }
+            List<String> strings = result.get(ClientEnum.TEACHER.name());
+            if (strings == null) {
+                strings = new ArrayList<>();
+            }
+            strings.addAll(errMsg);
+            result.put(ClientEnum.TEACHER.name(), strings);
+
         }
-        return errMsg;
+
+        List<ApiWrapper.LogOff> logOffs = new ArrayList<>();
+        result.forEach((k,v)->{
+            if (CollectionUtils.isEmpty(v)) {
+                return;
+            }
+            ApiWrapper.LogOff logOff = new ApiWrapper.LogOff();
+            logOff.setClient(k);
+            logOff.setErrList(v);
+            logOffs.add(logOff);
+        });
+
+
+        return logOffs;
     }
 
-    private boolean hasUnfinishedOrder(Long userId) {
+    private Map<String, String> hasUnfinishedOrder(Long userId) {
         // 商城订单 0->待付款;1->待发货;2->已发货
-        HttpResponseResult<List<OmsOrderDetail>> httpResponseResult = mallPortalFeignService.queryOrderList("0,1,2", userId);
+        HttpResponseResult<Map<String, Set<CheckStatus>>> httpResponseResult = mallPortalFeignService.checkOrderStatus(userId);
         if (httpResponseResult == null) {
             throw new BizException("检查订单信息失败");
         }
-        List<OmsOrderDetail> data = httpResponseResult.getData();
-        if (!CollectionUtils.isEmpty(data)) {
-            return true;
+        Map<String, Set<CheckStatus>> data = httpResponseResult.getData();
+        if (data == null) {
+            data = new HashMap<>();
         }
 
         // 酷乐秀订单
-        Integer count = userOrderService.lambdaQuery()
-                .eq(UserOrder::getUserId, userId)
-                .in(UserOrder::getStatus, Arrays.asList(OrderStatusEnum.WAIT_PAY, OrderStatusEnum.PAYING))
-                .count();
-        if (count > 0) {
-            return true;
+        List<UserOrder> list = userOrderService.lambdaQuery()
+            .eq(UserOrder::getUserId, userId)
+            .in(UserOrder::getStatus, Arrays.asList(OrderStatusEnum.WAIT_PAY, OrderStatusEnum.PAYING))
+            .list();
+        if (!CollectionUtils.isEmpty(list)) {
+            for (UserOrder userOrder : list) {
+                Set<CheckStatus> checkStatuses = data.get(userOrder.getOrderClient().name());
+                if (checkStatuses == null) {
+                    checkStatuses = new HashSet<>();
+                }
+                checkStatuses.add(CheckStatus.WAIT_PAY);
+                data.put(userOrder.getOrderClient().name(), checkStatuses);
+            }
+
         }
-        Integer refundCount = userOrderRefundService.lambdaQuery()
-                .eq(UserOrderRefund::getUserId, userId)
-                .eq(UserOrderRefund::getStatus, AuthStatusEnum.DOING)
-                .count();
-        return refundCount > 0;
+
+        // 退款订单
+        List<UserOrderRefund> list1 = userOrderRefundService.lambdaQuery()
+            .eq(UserOrderRefund::getUserId, userId)
+            .eq(UserOrderRefund::getStatus, AuthStatusEnum.DOING)
+            .list();
+        if (!CollectionUtils.isEmpty(list1)) {
+            // 订单id 集合
+            Set<Long> orderIds = list1.stream().map(UserOrderRefund::getOrderId).collect(Collectors.toSet());
+            List<UserOrder> userOrders = userOrderService.lambdaQuery()
+                .in(UserOrder::getId, orderIds)
+                .list();
+            for (UserOrder userOrder : userOrders) {
+                Set<CheckStatus> checkStatuses = data.get(userOrder.getOrderClient().name());
+                if (checkStatuses == null) {
+                    checkStatuses = new HashSet<>();
+                }
+                checkStatuses.add(CheckStatus.WAIT_AFTER_SALE);
+                data.put(userOrder.getOrderClient().name(), checkStatuses);
+            }
+        }
+
+        if (data.isEmpty()) {
+            return null;
+        }
+        Map<String,String> clientResult = new HashMap<>();
+        data.forEach((k, v) -> {
+            StringBuffer result = new StringBuffer("");
+            if (v.contains(CheckStatus.WAIT_PAY)){
+                result.append("待支付");
+            } if (v.contains(CheckStatus.WAIT_CONFIRM)){
+                if (result.length() > 0) {
+                    result.append("/");
+                }
+                result.append("未确认收货");
+            } if (v.contains(CheckStatus.WAIT_AFTER_SALE)){
+                if (result.length() > 0) {
+                    result.append("/");
+                }
+                result.append("售后处理中");
+            }
+            if (result.length() > 0) {
+                clientResult.put(k,result.toString());
+            }
+        });
+        return clientResult;
     }
 
     /**
@@ -356,6 +490,9 @@ public class SysUserServiceImpl implements SysUserService {
                     .eq(ImUserFriend::getFriendId, userId)
                     .eq(ImUserFriend::getFriendType, EClientType.STUDENT)
                     .remove();
+
+            // 注销三方im
+//            imGroupCoreService.accountDelete(Lists.newArrayList(imGroupCoreService.getImUserId(userId, ClientEnum.STUDENT)));
         }
 
 
@@ -389,6 +526,8 @@ public class SysUserServiceImpl implements SysUserService {
                     .eq(ImUserFriend::getFriendId, userId)
                     .eq(ImUserFriend::getFriendType, EClientType.TEACHER)
                     .remove();
+            // 注销三方im
+//            imGroupCoreService.accountDelete(Lists.newArrayList(imGroupCoreService.getImUserId(userId, ClientEnum.TEACHER)));
         }
     }
     public EClientType getClientType(String jpushType){

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

@@ -194,6 +194,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Autowired
     private VipCardRecordService vipCardRecordService;
 
+    @Autowired
+    private TeacherTotalService teacherTotalService;
+
+    @Autowired
+    private StudentTotalService studentTotalService;
+
     @Override
     public TeacherDao getDao() {
         return baseMapper;
@@ -1200,8 +1206,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
 
         Student student = studentService.getById(userId);
-        Long subjectId = null;
-        if (student.getSubjectId() != null) {
+        Long subjectId = -1L;
+        if (student !=null && student.getSubjectId() != null) {
             subjectId = Long.parseLong(student.getSubjectId());
         }
 
@@ -1617,4 +1623,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
         return imCustomerServiceId;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delFans(Long studentId, Long teacherId) {
+        studentStarDao.delFans(studentId,teacherId);
+        teacherTotalService.totalTeacherTotalById(teacherId);
+        studentTotalService.totalStudentTotalById(studentId);
+    }
 }

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

@@ -215,7 +215,8 @@ public class TeacherTotalServiceImpl extends ServiceImpl<TeacherTotalDao, Teache
         }
     }
 
-    private TeacherTotal totalTeacherTotalById(Long id) {
+    @Override
+    public TeacherTotal totalTeacherTotalById(Long id) {
         TeacherTotal teacherTotal = new TeacherTotal();
         teacherTotal.setUserId(id);
         //查询粉丝数

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

@@ -157,6 +157,10 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
                     m.setMusicImg(sheetApplication.getMusicImg());
                     m.setFirstTone(sheetApplication.getMusicFirstImg());
                     m.setFixedTone(sheetApplication.getMusicJianImg());
+                    m.setIsMixBeat(sheetApplication.getIsMixBeat());
+                    m.setMusicPdfUrl(sheetApplication.getMusicPdfUrl());
+                    m.setFirstPdfUrl(sheetApplication.getFirstPdfUrl());
+                    m.setJianPdfUrl(sheetApplication.getJianPdfUrl());
 
                     // 设置曲目原音
                     List<CbsMusicSheetWrapper.MusicSheetSound> soundList = sheetApplication.getMusicSheetSoundList();
@@ -169,6 +173,9 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
                             accompaniment.setSortNumber(sound.getSortNumber());
                             accompaniment.setTrack(sound.getTrack());
                             accompaniment.setMusicalInstrumentId(sound.getMusicalInstrumentId());
+                            accompaniment.setMusicPdfUrl(sound.getMusicPdfUrl());
+                            accompaniment.setFirstPdfUrl(sound.getFirstPdfUrl());
+                            accompaniment.setJianPdfUrl(sound.getJianPdfUrl());
                             background.add(accompaniment);
                         }
                         m.setBackground(background);

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseCoursewareVo.java

@@ -41,4 +41,34 @@ public class CourseCoursewareVo extends CourseCourseware{
 
 	@ApiModelProperty("曲目编号")
 	private String cbsMusicSheetId;
+
+	@ApiModelProperty("是否支持混音节拍器")
+	private Boolean isMixBeat;
+
+	@ApiModelProperty("总谱五线谱PDF文件")
+	private String musicPdfUrl;
+
+	@ApiModelProperty("总谱首调PDF文件")
+	private String firstPdfUrl;
+
+	@ApiModelProperty("总谱固定调PDF文件")
+	private String jianPdfUrl;
+
+	@ApiModelProperty("原音五线谱PDF文件")
+	private String soundMusicPdfUrl;
+
+	@ApiModelProperty("原音首调PDF文件")
+	private String soundFirstPdfUrl;
+
+	@ApiModelProperty("原音固定调PDF文件")
+	private String soundJianPdfUrl;
+
+	@ApiModelProperty("伴奏五线谱PDF文件")
+	private String accMusicPdfUrl;
+
+	@ApiModelProperty("伴奏首调PDF文件")
+	private String accFirstPdfUrl;
+
+	@ApiModelProperty("伴奏固定调PDF文件")
+	private String accJianPdfUrl;
 }

+ 14 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkVo.java

@@ -74,6 +74,9 @@ public class CourseHomeworkVo{
 	@ApiModelProperty("学员头像")
 	private String studentAvatar;
 
+    @ApiModelProperty("是否注销")
+    private Boolean delFlag = false;
+
 	@ApiModelProperty("老师id")
 	private Long teacherId;
 
@@ -95,7 +98,17 @@ public class CourseHomeworkVo{
 	@ApiModelProperty("IM用户ID")
 	private String imUserId;
 
-	public String getImGroupId() {
+
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public String getImGroupId() {
 		return imGroupId;
 	}
 

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java

@@ -21,6 +21,11 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "用户姓名")
     private String userName;
 
+
+    @ApiModelProperty("是否注销")
+    private Boolean delFlag = false;
+
+
     private String realName;
 
     @ApiModelProperty(value = "头像地址")
@@ -62,6 +67,14 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "IM聊天用户ID")
     private String imUserId;
 
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
     public Integer getStudentReplied() {
         return studentReplied;
     }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeworkVo.java

@@ -32,6 +32,17 @@ public class StudentHomeworkVo {
     @ApiModelProperty("NOTCOMMIT:未提交 ,NOTREVIEW: 未评价 REVIEWED:已评价")
     private HomeworkStatusEnum homeworkStatus;
 
+    @ApiModelProperty("是否注销")
+    private Boolean delFlag = false;
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
     public HomeworkStatusEnum getHomeworkStatus() {
         return homeworkStatus;
     }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/im/ImUserFriendVO.java

@@ -128,4 +128,31 @@ public class ImUserFriendVO {
             return Optional.ofNullable(getImUserId()).orElse(userId);
         }
     }
+
+
+    /**
+     * 用户好友信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class ImMessageUser implements Serializable {
+
+
+        @ApiModelProperty(value = "当前用户编号")
+        private Long userId;
+
+        @ApiModelProperty(value = "imUserId")
+        private String imUserId;
+
+        @ApiModelProperty("用户名称")
+        private String username;
+
+        @ApiModelProperty("用户头像")
+        private String avatar;
+
+        @ApiModelProperty("是否注销")
+        private Boolean delFlag = false;
+    }
+
 }

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

@@ -275,6 +275,18 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("单元测验数量")
         private Integer unitTestNum;
 
+        @ApiModelProperty("是否支持混音节拍器")
+        private Boolean isMixBeat;
+
+        @ApiModelProperty("总谱五线谱PDF文件")
+        private String musicPdfUrl;
+
+        @ApiModelProperty("总谱首调PDF文件")
+        private String firstPdfUrl;
+
+        @ApiModelProperty("总谱固定调PDF文件")
+        private String jianPdfUrl;
+
         @ApiModelProperty("曲谱伴奏")
         private List<MusicSheetAccompaniment> background;
 

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

@@ -265,6 +265,7 @@
         cssp.user_id_ as studentId
         ,su.username_ as studentName
         ,su.avatar_ as studentAvatar
+        ,su.del_flag_ as delFlag
         from course_schedule cs
         left join  course_schedule_student_payment cssp on cssp.course_id_ = cs.id_
         left join sys_user su on cssp.user_id_ = su.id_
@@ -349,6 +350,7 @@
         s.id_ as studentId,
         s.username_ as studentName,
         s.avatar_ as studentAvatar,
+        s.del_flag_ as delFlag,
         if(sch.id_ is not null,1,0) as submitHomework,
         (case when sch.id_ is null then 'NOTCOMMIT'
         when sch.teacher_replied_ is null or sch.teacher_replied_ = '' then 'NOTREVIEW'

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

@@ -195,6 +195,7 @@
             cs.status_ AS `status`,
             g.subject_id_ AS subjectId,
             sb.name_ AS subjectName,
+            u.del_flag_ as delFlag,
             p.course_id_ AS courseId,
             p.course_group_id_ AS courseGoupId,
             (r.student_replied_ IS NOT NULL) AS studentReplied,

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

@@ -107,5 +107,9 @@
             AND audit_state_ = #{auditStatus} group by music_sheet_id_)
     </select>
 
-
+	<select id="countTeacherAudit" resultType="int">
+        select count(1) from music_sheet_auth_record msar
+        left join  music_sheet ms on ms.id_ = msar.music_sheet_id_
+        where  ms.create_by_ = #{userId} and ms.source_type_ = 'TEACHER' and msar.audit_state_ ='DOING'
+    </select>
 </mapper>

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

@@ -1180,6 +1180,12 @@
 
     </select>
 
+    <select id="countTeacherEnable" resultType="int">
+        select count(1)
+        from music_sheet
+        where state_ = 1 and del_flag_ = 0 and source_type_ = 'TEACHER' and create_by_ = #{userId}
+    </select>
+
     <update id="updateTenantByCbsId">
         update music_sheet ms set
         ms.tenant_sort_number_ = #{item.sortNo},ms.tenant_del_flag_ = 0,

+ 14 - 10
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentStarMapper.xml

@@ -19,9 +19,9 @@
 			t.teacher_id_ as userId,
 			count(1) as fansNum
 		from student_star t
-		left join sys_user us on t.teacher_id_ = us.id_
-		left join sys_user ut on t.student_id_ = ut.id_
-		where us.del_flag_ = 0 and ut.del_flag_ = 0
+<!--		left join sys_user us on t.teacher_id_ = us.id_-->
+<!--		left join sys_user ut on t.student_id_ = ut.id_-->
+<!--		where us.del_flag_ = 0 and ut.del_flag_ = 0-->
 		group by t.teacher_id_
 	</select>
 
@@ -30,9 +30,9 @@
 			t.student_id_ as userId,
 			count(1) as starTeacherNum
 		from student_star t
-		left join sys_user us on t.teacher_id_ = us.id_
-		left join sys_user ut on t.student_id_ = ut.id_
-		where us.del_flag_ = 0 and ut.del_flag_ = 0
+<!--		left join sys_user us on t.teacher_id_ = us.id_-->
+<!--		left join sys_user ut on t.student_id_ = ut.id_-->
+<!--		where us.del_flag_ = 0 and ut.del_flag_ = 0-->
 		group by t.student_id_
 	</select>
 
@@ -40,13 +40,17 @@
 		select
 			<include refid="baseColumns"/>
 		from student_star t
-		left join sys_user us on t.teacher_id_ = us.id_
-		left join sys_user ut on t.student_id_ = ut.id_
-		where us.del_flag_ = 0 and ut.del_flag_ = 0
-		and t.student_id_ = #{studentId} and t.teacher_id_ = #{teacherId}
+<!--		left join sys_user us on t.teacher_id_ = us.id_-->
+<!--		left join sys_user ut on t.student_id_ = ut.id_-->
+<!--		where us.del_flag_ = 0 and ut.del_flag_ = 0-->
+        where t.student_id_ = #{studentId} and t.teacher_id_ = #{teacherId}
 	</select>
 	
 	<select id="queryByStudentId" resultMap="BaseResultMap">
 		select * from student_star ss where ss.student_id_ = #{studentId}
 	</select>
+
+	<delete id="delFans">
+        delete from student_star where student_id_ = #{studentId} and teacher_id_ = #{teacherId}
+    </delete>
 </mapper>

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

@@ -117,6 +117,7 @@
                username_ as username,
                password_ as password,
                salt_ as salt,
+        del_flag_ as delFlag,
                phone_ as phone,
                avatar_ as avatar,
                lock_flag_ as lockFlag,

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

@@ -289,7 +289,7 @@
         ) b on t.user_id_ = b.user_id_
         left join vip_card_record vcr on t.user_id_ = vcr.user_id_ and vcr.client_type_ = 'TEACHER'
         and vcr.efficient_flag_ = 1 and vcr.end_time_ >= now() and now() > vcr.start_time_ and (vcr.vip_type_ = 'VIP' or vcr.vip_type_ = 'SVIP') and vcr.client_type_ = 'TEACHER'
-        where u.del_flag_ = 0 and t.user_id_ = #{userId}
+        where t.user_id_ = #{userId}
     </select>
 
     <select id="querySubject" resultMap="com.yonge.cooleshow.biz.dal.dao.SubjectDao.Subject">
@@ -367,7 +367,7 @@
         LEFT JOIN sys_user u ON s.student_id_ = u.id_
         LEFT JOIN student sr ON s.student_id_ = sr.user_id_
         <where>
-            u.del_flag_ = 0
+<!--            u.del_flag_ = 0-->
             <if test="record.teacherId != null">
                 AND s.teacher_id_ =#{record.teacherId}
             </if>

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

@@ -359,7 +359,7 @@
 		LEFT JOIN sys_user u ON g.teacher_id_=u.id_
 		LEFT JOIN `subject` s ON g.lesson_subject_ = s.id_
 		<where>
-			AND  u.del_flag_ = 0
+<!--			AND  u.del_flag_ = 0-->
 			<if test="null != param.search and '' != param.search">
 				AND (
 				u.username_ LIKE CONCAT('%', #{param.search}, '%') OR

+ 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.15</cbs.version>
+		<cbs.version>1.0.16</cbs.version>
 		<microsvc.version>1.0.8-RC1</microsvc.version>
 	</properties>