Browse Source

Merge branch 'saas_teacher_buy' into saas

hgw 3 years ago
parent
commit
5ce14347de

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseHomework;
@@ -519,4 +521,12 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     int countTeacherBasicInfo(Map<String, Object> params);
 
     List<SysUserDto> queryTeacherBasicInfo(Map<String, Object> params);
+
+    /**
+     * 查询老师主分部下所有学生
+     *
+     * @param param 参数
+     *              <p>  search 模糊搜索
+     */
+    <T> IPage<T> getStudentsByTeacherOrgan(Page<T> page, @Param("param") Map<String, Object> param);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeBuyResultDto.java

@@ -33,6 +33,11 @@ public class PracticeBuyResultDto {
     
     private Integer courseNum;
 
+    /**
+     * 查询财务章
+     */
+    private String financeChops;
+
     public String getOrderNo() {
         return orderNo;
     }
@@ -120,4 +125,12 @@ public class PracticeBuyResultDto {
 	public void setCourseNum(Integer courseNum) {
 		this.courseNum = courseNum;
 	}
+
+    public String getFinanceChops() {
+        return financeChops;
+    }
+
+    public void setFinanceChops(String financeChops) {
+        this.financeChops = financeChops;
+    }
 }

+ 28 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRepairService.java

@@ -20,22 +20,35 @@ public interface StudentRepairService extends BaseService<Integer, StudentRepair
     PageInfo<BasicUserDto> getStudents(RepairStudentQueryInfo queryInfo);
 
     /**
+     * 查询老师主分部下所有学生
+     *
+     * @param param 参数
+     *              <p>  search 模糊搜索
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    PageInfo<BasicUserDto> getStudentsByTeacherOrgan(Map<String, Object> param);
+
+    /**
      * 添加维修单
+     *
      * @param repairInfo
      * @return
      */
-   Map addRepair(StudentRepair repairInfo) throws Exception;
+    Map addRepair(StudentRepair repairInfo) throws Exception;
 
 
     /**
      * 维修完成
+     *
      * @param id
      * @param description
      */
-    void repairSuccess(Integer id, String description,Integer repairStatus);
+    void repairSuccess(Integer id, String description, Integer repairStatus);
 
     /**
      * 获取学生信息
+     *
      * @param studentId
      * @return
      */
@@ -43,6 +56,7 @@ public interface StudentRepairService extends BaseService<Integer, StudentRepair
 
     /**
      * 获取维修单详情
+     *
      * @param id
      * @return
      */
@@ -50,6 +64,7 @@ public interface StudentRepairService extends BaseService<Integer, StudentRepair
 
     /**
      * 支付维修单
+     *
      * @param repairInfo
      * @return
      */
@@ -57,58 +72,60 @@ public interface StudentRepairService extends BaseService<Integer, StudentRepair
 
     /**
      * 获取学生维修技师信息
+     *
      * @param studentId
      * @return
      */
-    BasicUserDto getStudentRepairer(Integer studentId,Integer organId);
+    BasicUserDto getStudentRepairer(Integer studentId, Integer organId);
 
     /**
      * 支付回调
+     *
      * @param order
      */
     Boolean orderCallback(StudentPaymentOrder order);
 
     /**
+     * @param studentGoodsSell:
+     * @return java.util.Map
      * @describe 添加商品销售订单
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
      * @author zouxuan
      * @date 2020/9/16
      * @time 13:47
-     * @param studentGoodsSell:
-     * @return java.util.Map
      */
     Map addGoodsSellOrder(StudentGoodsSell studentGoodsSell) throws Exception;
 
     /**
+     * @param goodsSellId:
+     * @return java.util.Map
      * @describe 学员扫码支付
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
      * @author zouxuan
      * @date 2020/9/16
      * @time 13:47
-     * @param goodsSellId:
-     * @return java.util.Map
      */
     Map studentPaymentGoodsOrder(Integer goodsSellId) throws Exception;
 
     /**
+     * @param order:
+     * @return void
      * @describe 商品销售订单回调
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
      * @author zouxuan
      * @date 2020/9/16
      * @time 16:58
-     * @param order:
-     * @return void
      */
     void goodsSellOrderCallback(StudentPaymentOrder order);
 
     /**
+     * @param queryInfo:
+     * @return java.lang.Object
      * @describe 获取商品购买教务老师关联的学员列表
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
      * @author zouxuan
      * @date 2020/9/28
      * @time 11:27
-     * @param queryInfo:
-     * @return java.lang.Object
      */
     PageInfo<BasicUserDto> queryEduStudents(QueryInfo queryInfo);
 }

+ 49 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java

@@ -9,8 +9,6 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
-import org.apache.ibatis.annotations.Param;
-
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
@@ -19,24 +17,28 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 新增教师
+     *
      * @param teacher
      */
     int add(Teacher teacher) throws Exception;
 
     /**
      * 修改教师信息(不包含离职日期等信息)
+     *
      * @param teacher
      */
     void updateTea1(Teacher teacher);
 
     /**
      * 修改教师信息
+     *
      * @param teacher
      */
     void updateTea(Teacher teacher);
 
     /**
      * 分页查询教师列表
+     *
      * @param queryInfo
      * @return
      */
@@ -44,6 +46,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教师详情
+     *
      * @param id
      * @return
      */
@@ -58,14 +61,16 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教师所在群组列表
+     *
      * @param userId
      * @param search
      * @return
      */
-    List<ImGroupModel> queryTeacherGroups(Integer userId,String search);
+    List<ImGroupModel> queryTeacherGroups(Integer userId, String search);
 
     /**
      * 获取教师通讯录
+     *
      * @param id
      * @param search
      * @return
@@ -74,6 +79,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教师通讯录
+     *
      * @param id
      * @param search
      * @return
@@ -82,6 +88,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教师通讯录学员列表
+     *
      * @param id
      * @param search
      * @return
@@ -90,39 +97,42 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 查询分部所有老师
+     *
      * @param organId
      * @return
      */
     List<TeacherBasicDto> findTeachers(String organId);
 
     /**
+     * @param subjectId: 科目编号
+     * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
      * @describe 根据科目获取部门下的教师
      * @author Joburgess
      * @date 2019/11/4
-     * @param subjectId: 科目编号
-     * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
      */
     List<Teacher> findOrganTeacherBySubject(Integer subjectId);
 
     /**
      * 获取教师上课结算列表
+     *
      * @param queryInfo
      * @return
      */
     PageInfo<TeacherCloseDto> queryCloses(TeacherCloseQueryInfo queryInfo);
 
     /**
+     * @param musicGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.BasicUserDto>
      * @describe 获取乐团下的老师
      * @author Joburgess
      * @date 2019/10/19
-     * @param musicGroupId:
-     * @return java.util.List<com.ym.mec.biz.dal.dto.BasicUserDto>
      */
     List<BasicUserDto> queryMusicGroupTeacher(String musicGroupId);
 
 
     /**
      * 获取老师未结算课酬总额
+     *
      * @param teacherId
      * @return
      */
@@ -130,6 +140,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取乐团详情老师列表
+     *
      * @param queryInfo
      * @return
      */
@@ -137,6 +148,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教师上课记录列表(乐团管理--乐团详情)
+     *
      * @param queryInfo
      * @return
      */
@@ -144,6 +156,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取乐团学员的报名列表
+     *
      * @param queryInfo
      * @return
      */
@@ -151,13 +164,15 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取分部下教师
+     *
      * @param organId
      * @return
      */
-    List<Teacher> findTeacherByOrganId(String organId,String subjectIds,String jobNature);
+    List<Teacher> findTeacherByOrganId(String organId, String subjectIds, String jobNature);
 
     /**
      * 分页获取教师列表
+     *
      * @param queryInfo
      * @return
      */
@@ -165,6 +180,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教师布置的作业
+     *
      * @param courseScheduleId
      * @return
      */
@@ -172,52 +188,67 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
 
     /**
      * 获取教务端通讯录
+     *
      * @param id
      * @param search
      * @return
      */
     List<BasicUserDto> queryEducationIpa(Integer id, String search);
-    
+
     /**
      * 实名认证
-     * @param userId 用户编号
-     * @param realName 姓名
-     * @param idcardNo 身份证号码
+     *
+     * @param userId         用户编号
+     * @param realName       姓名
+     * @param idcardNo       身份证号码
      * @param idcardFrontImg 身份证正面
-     * @param idcardBackImg 身份证反面
-     * @param idcardHandImg 手持身份照
+     * @param idcardBackImg  身份证反面
+     * @param idcardHandImg  手持身份照
      * @return
      */
-	boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg);
+    boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg);
 
     /**
      * 获取和当前指导老师关联的学员
+     *
      * @return
      */
     PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo);
-    
+
     /**
      * 查询老师默认课酬
+     *
      * @param organIdList
      * @return
      */
     List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList);
 
     /**
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto>
      * @describe 查询教师关联的乐团预览信息
      * @author Joburgess
      * @date 2021/8/12 0012
-     * @param queryInfo:
-     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto>
      */
     PageInfo<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo);
 
     /**
      * 查询分部下教师关联的会员数据
+     *
      * @param queryInfo
      * @return
      */
     PageInfo<TeacherStudentDataDto> queryMemberStudentData(TeacherServeQueryInfo queryInfo);
 
     PageInfo<SysUserDto> queryTeacherBasicInfo(UserBasicQueryInfo queryInfo);
+
+    /**
+     * 查询老师主分部下所有学生
+     *
+     * @param param 参数
+     *              <p>  search 模糊搜索
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    PageInfo<BasicUserDto> getStudentsByTeacherOrgan(Map<String, Object> param);
 }

+ 7 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -92,8 +92,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     private ImLiveRoomReservationService imLiveRoomReservationService;
     @Autowired
     private ImLiveRoomBlackService imLiveRoomBlackService;
-    @Autowired
-    private EmployeeService employeeService;
 
     //待替换的变量
     public static final String USER_ID = "${userId}";
@@ -648,18 +646,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                     member.setTotalTime(speakerLiveTime);
                 }
             }
+            //添加人员数据
             Lists.partition(memberList, 500)
                     .forEach(list -> liveBroadcastRoomMemberService.getDao().insertBatch(list));
-            //删除用户对应的直播间关系缓存
-            memberList.stream()
-                    .map(ImLiveBroadcastRoomMember::getUserId)
-                    .filter(Objects::nonNull)
-                    .forEach(id -> redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, id.toString())).delete());
         }
+        //获取在线人员信息
+        RMap<Integer, String> onlineUserCache = getOnlineUserCache(roomUid);
+        //删除人员对应直播间编号信息
+        onlineUserCache.forEach((id,s) -> redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, id.toString())).delete());
         //删除直播间所有用户数据
         roomTotalUserCache.delete();
         //删除在线用户数据
-        getOnlineUserCache(roomUid).delete();
+        onlineUserCache.delete();
     }
 
     /**
@@ -916,7 +914,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         onlineUserInfo.fastPut(userId, JSONObject.toJSONString(userInfo));
         //向直播间发送当前在线人数消息
         this.sendOnlineUserCount(roomUid, userId, onlineUserInfo.size());
-        log.info("join sendOnlineUserCount>>>> param is null   roomUid: {}  fromUserId:{}  count:{}", roomUid, userId, onlineUserInfo.size());
+        log.info("join sendOnlineUserCount>>>>   roomUid: {}  fromUserId:{}  count:{}", roomUid, userId, onlineUserInfo.size());
         log.info("joinRoom>>>> userInfo: {}", JSONObject.toJSONString(userInfo));
     }
 

+ 20 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -148,9 +148,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
     @Autowired
-    private MemberFeeSettingDao memberFeeSettingDao;
+    private OrganizationService organizationService;
     @Autowired
-    private MemberFeeSettingService memberFeeSettingService;
+    private TenantConfigService tenantConfigService;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -3460,12 +3460,27 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (Objects.isNull(order)) {
             throw new BizException("订单不存在");
         }
+
+        //查询财务章 如果分部有企业信息,就用分部上的企业信息,否则用机构上的企业信息
+        String financeChops;
+        Organization organizationDto = organizationService.get(order.getOrganId());
+        if (organizationDto == null || StringUtils.isBlank(organizationDto.getCorporateName()) || StringUtils.isBlank(organizationDto.getCorporateCode())) {
+            TenantConfig tenantConfig = tenantConfigService.queryByTenantId(order.getTenantId());
+            if (tenantConfig == null) {
+                throw new BizException("机构配置信息查询失败");
+            }
+            financeChops = tenantConfig.getCorporateFinanceChops();
+        } else {
+            financeChops = organizationDto.getCorporateFinancialSeal();
+        }
+
         PracticeBuyResultDto practiceBuyResult = new PracticeBuyResultDto();
         practiceBuyResult.setOrderNo(orderNo);
         practiceBuyResult.setStatus(order.getStatus());
         practiceBuyResult.setCreateTime(order.getCreateTime());
         practiceBuyResult.setPrice(order.getExpectAmount());
         practiceBuyResult.setType(order.getType().getCode());
+        practiceBuyResult.setFinanceChops(financeChops);
 
         if (order.getGroupType().equals(GroupType.GOODS_SELL)) {
             practiceBuyResult.setDetail(studentGoodsSellDao.getStudentGoodsSellDto(orderNo));
@@ -4901,17 +4916,17 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         String activeConfig = sysConfigDao.findConfigValue("cloud_teacher_active_config");
         List<Cloud2022ActivityDto> cloud2022ActivityDtos = JSONArray.parseArray(activeConfig, Cloud2022ActivityDto.class);
         List<Cloud2022ActivityDto> activityDtos = cloud2022ActivityDtos.stream().filter(e -> e.getOrganId().contains(sysUser.getOrganId().toString())).collect(Collectors.toList());
-        if(org.apache.commons.collections.CollectionUtils.isEmpty(activityDtos)){
+        if (org.apache.commons.collections.CollectionUtils.isEmpty(activityDtos)) {
             return BaseController.failed(HttpStatus.EXPECTATION_FAILED, "您没有排课资格,请联系指导老师");
         }
         //是否还有购买资格
         Integer activityId = Integer.parseInt(activityDtos.get(0).getActivityId());
         Integer noCourseNum = activityUserMapperService.getStudentNoCourseNum(sysUser.getId(), activityId);
         List<ActivityUserMapper> activityUserMappers = activityUserMapperService.findByStudentIdList(activityId, sysUser.getId().toString(), "GIVE_PRACTICE");
-        if(org.apache.commons.collections.CollectionUtils.isEmpty(activityUserMappers)){
+        if (org.apache.commons.collections.CollectionUtils.isEmpty(activityUserMappers)) {
             return BaseController.failed(HttpStatus.EXPECTATION_FAILED, "您没有排课资格,请联系指导老师");
         }
-        if(noCourseNum == null || noCourseNum <= 0){
+        if (noCourseNum == null || noCourseNum <= 0) {
             return BaseController.failed(HttpStatus.EXPECTATION_FAILED, "您没有排课资格,请联系指导老师");
         }
         if (Objects.isNull(practiceGroupBuyParams.getUserId())) {

+ 348 - 357
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -8,17 +8,12 @@ import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-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.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.service.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -43,17 +38,6 @@ import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.GoodsSellDto;
 import com.ym.mec.biz.dal.dto.RepairGoodsDto;
-import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.GoodsProcurement;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.SellOrder;
-import com.ym.mec.biz.dal.entity.StudentGoodsSell;
-import com.ym.mec.biz.dal.entity.StudentInstrument;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
-import com.ym.mec.biz.dal.entity.StudentRepair;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.biz.dal.enums.AccountType;
 import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -67,22 +51,6 @@ import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.SellTypeEnum;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.GoodsService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.SellOrderService;
-import com.ym.mec.biz.service.StudentGoodsSellService;
-import com.ym.mec.biz.service.StudentInstrumentService;
-import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
-import com.ym.mec.biz.service.StudentRepairService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysCouponCodeService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysPaymentConfigService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -139,6 +107,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     private StudentGoodsSellService studentGoodsSellService;
     @Autowired
     private SysCouponCodeService sysCouponCodeService;
+    @Autowired
+    private TeacherService teacherService;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -174,6 +144,27 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         return pageInfo;
     }
 
+    /**
+     * 查询老师主分部下所有学生
+     *
+     * @param param 参数
+     *              <p>  search 模糊搜索
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    @Override
+    public PageInfo<BasicUserDto> getStudentsByTeacherOrgan(Map<String, Object> param) {
+        SysUser sysUser = getSysUser();
+        param.put("teacherId",sysUser.getId());
+        return teacherService.getStudentsByTeacherOrgan(param);
+    }
+
+    private SysUser getSysUser() {
+        //修改机构基础信息
+        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
+                .orElseThrow(() -> new BizException("用户不存在."));
+    }
+
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public Map addGoodsSellOrder(StudentGoodsSell studentGoodsSell) throws Exception {
@@ -207,52 +198,52 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 }
                 //退优惠券
                 sysCouponCodeService.quit(orderByOrderNo.getCouponCodeId());
-                
+
                 Date nowDate = new Date();
                 //增加商品库存
                 List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailService.queryOrderDetail(orderByOrderNo.getId());
                 String goodsIds = studentPaymentOrderDetailList.stream().filter(t -> StringUtils.isNotBlank(t.getMinuendStockGoodsIdList())).map(t -> t.getMinuendStockGoodsIdList()).collect(Collectors.joining(","));
-                if(StringUtils.isNotBlank(goodsIds)){
-                	GoodsProcurement goodsProcurement = null;
-                	List<Goods> goodsList = goodsService.getGoodsWithLocked(goodsIds);
-                	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-                	Goods goods = null;
-        			Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
-        			Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
-                	
-                	for(String goodsIdStr : goodsIds.split(",")){
-                		if(StringUtils.isBlank(goodsIdStr)){
-							continue;
-						}
-						goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-						if(batchUpdateGoodsMap.get(goods.getId()) != null){
-							goods = batchUpdateGoodsMap.get(goods.getId());
-						}
-						goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
-						goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
-						goods.setUpdateTime(nowDate);
-    					
-						batchUpdateGoodsMap.put(goods.getId(), goods);
-    					
-    					// 进货清单
-    					goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
-    					if(goodsProcurement != null){
-							if(goodsProcurementMap.get(goodsProcurement.getId()) != null){
-								goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
-							}
-    						goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
-    						goodsProcurement.setUpdateTime(nowDate);
-							goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
-    					}
-						
-                	}
-                	
-                	if(goodsProcurementMap.size() > 0){
-                		goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
-                	}
-                    
-                    if(batchUpdateGoodsMap.size() > 0){
-                    	goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
+                if (StringUtils.isNotBlank(goodsIds)) {
+                    GoodsProcurement goodsProcurement = null;
+                    List<Goods> goodsList = goodsService.getGoodsWithLocked(goodsIds);
+                    Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
+                    Goods goods = null;
+                    Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
+                    Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
+
+                    for (String goodsIdStr : goodsIds.split(",")) {
+                        if (StringUtils.isBlank(goodsIdStr)) {
+                            continue;
+                        }
+                        goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+                        if (batchUpdateGoodsMap.get(goods.getId()) != null) {
+                            goods = batchUpdateGoodsMap.get(goods.getId());
+                        }
+                        goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
+                        goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
+                        goods.setUpdateTime(nowDate);
+
+                        batchUpdateGoodsMap.put(goods.getId(), goods);
+
+                        // 进货清单
+                        goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
+                        if (goodsProcurement != null) {
+                            if (goodsProcurementMap.get(goodsProcurement.getId()) != null) {
+                                goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
+                            }
+                            goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
+                            goodsProcurement.setUpdateTime(nowDate);
+                            goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
+                        }
+
+                    }
+
+                    if (goodsProcurementMap.size() > 0) {
+                        goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
+                    }
+
+                    if (batchUpdateGoodsMap.size() > 0) {
+                        goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
                     }
                 }
             }
@@ -293,9 +284,9 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             }
         }
         List<Integer> goodsIds = goodsSellDtos.stream().map(GoodsSellDto::getGoodsId).collect(Collectors.toList());
-        Map<Integer, String> integerStringMap = getMap("goods", "id_", "type_", goodsIds,student.getTenantId(), Integer.class, String.class);
-        Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds,student.getTenantId(), Integer.class, BigDecimal.class);
-        Map<Integer, BigDecimal> groupPriceMap = getMap("goods", "id_", "group_purchase_price_", goodsIds,student.getTenantId(), Integer.class, BigDecimal.class);
+        Map<Integer, String> integerStringMap = getMap("goods", "id_", "type_", goodsIds, student.getTenantId(), Integer.class, String.class);
+        Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds, student.getTenantId(), Integer.class, BigDecimal.class);
+        Map<Integer, BigDecimal> groupPriceMap = getMap("goods", "id_", "group_purchase_price_", goodsIds, student.getTenantId(), Integer.class, BigDecimal.class);
         for (GoodsSellDto goodsSellDto : goodsSellDtos) {
             goodsSellDto.setGoodsType(integerStringMap.get(goodsSellDto.getGoodsId()));
             if (StringUtils.isNotEmpty(goodsSellDto.getComplementGoodsIdList())) {
@@ -358,7 +349,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrder.setRoutingOrganId(student.getOrganId());
         studentPaymentOrder.setTenantId(student.getTenantId());
         studentPaymentOrderService.insert(studentPaymentOrder);
-        
+
         Date date = new Date();
         //添加订单详情
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<StudentPaymentOrderDetail>();
@@ -366,69 +357,69 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         StudentPaymentOrderDetail studentPaymentOrderDetail = null;
 
         BigDecimal totalPrice = BigDecimal.ZERO;
-        
-        if(goodsSellDtos != null){
-        	//String goodsIdsStr = goodsSellDtos.stream().map(t -> t.getGoodsId().toString()).collect(Collectors.joining(","));
-        	
-        	StringBuffer sb = new StringBuffer();
-        	for(GoodsSellDto goodsSellDto : goodsSellDtos){
-        		for(int i = 0; i < goodsSellDto.getGoodsNum() ; i++){
-        			sb.append(goodsSellDto.getGoodsId()).append(",");
-        		}
-        	}
-        	
-        	String goodsIdsStr = StringUtils.removeEnd(sb.toString(), ",");
-        	
-        	List<Goods> goodsList = goodsService.findGoodsByIds(goodsIdsStr);
-        	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-        	BigDecimal totalGroupPurchasePrice = BigDecimal.ZERO;
-        	
-        	for(String goodsIdStr : goodsIdsStr.split(",")){
-        		totalGroupPurchasePrice = totalGroupPurchasePrice.add(goodsMap.get(Integer.parseInt(goodsIdStr)).getGroupPurchasePrice());
-        	}
-        	
-        	Goods goods = null;
-        	for(String goodsIdStr : goodsIdsStr.split(",")){
-        		if(StringUtils.isBlank(goodsIdStr)){
-					continue;
-				}
-				goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-				
-				if(goods != null){
-					studentPaymentOrderDetail = new StudentPaymentOrderDetail();
-	                studentPaymentOrderDetail.setCreateTime(date);
-	                if(goods.getType() == GoodsType.INSTRUMENT){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
-	                }else if(goods.getType() == GoodsType.ACCESSORIES){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
-	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
-	                }else{
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
-	                }
-	                studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
-	                
-	                BigDecimal tempPrice = BigDecimal.ZERO;
-	                if(totalGroupPurchasePrice.compareTo(BigDecimal.ZERO) > 0) {
-	                	tempPrice = studentPaymentOrder.getExpectAmount().multiply(goods.getGroupPurchasePrice()).divide(totalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
-	                }
-	                
-	                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIdsStr.split(",").length == studentPaymentOrderDetailList.size() + 1){
-	                	studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
-	                }else{
-	                	studentPaymentOrderDetail.setPrice(tempPrice);
-	                }
-	                studentPaymentOrderDetail.setUpdateTime(date);
-	                studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-	                
-	                totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
-	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
-				}
-        	}
-        }
-        
-        if(studentPaymentOrderDetailList.size() > 0){
-        	studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
+
+        if (goodsSellDtos != null) {
+            //String goodsIdsStr = goodsSellDtos.stream().map(t -> t.getGoodsId().toString()).collect(Collectors.joining(","));
+
+            StringBuffer sb = new StringBuffer();
+            for (GoodsSellDto goodsSellDto : goodsSellDtos) {
+                for (int i = 0; i < goodsSellDto.getGoodsNum(); i++) {
+                    sb.append(goodsSellDto.getGoodsId()).append(",");
+                }
+            }
+
+            String goodsIdsStr = StringUtils.removeEnd(sb.toString(), ",");
+
+            List<Goods> goodsList = goodsService.findGoodsByIds(goodsIdsStr);
+            Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
+            BigDecimal totalGroupPurchasePrice = BigDecimal.ZERO;
+
+            for (String goodsIdStr : goodsIdsStr.split(",")) {
+                totalGroupPurchasePrice = totalGroupPurchasePrice.add(goodsMap.get(Integer.parseInt(goodsIdStr)).getGroupPurchasePrice());
+            }
+
+            Goods goods = null;
+            for (String goodsIdStr : goodsIdsStr.split(",")) {
+                if (StringUtils.isBlank(goodsIdStr)) {
+                    continue;
+                }
+                goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+
+                if (goods != null) {
+                    studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+                    studentPaymentOrderDetail.setCreateTime(date);
+                    if (goods.getType() == GoodsType.INSTRUMENT) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
+                    } else if (goods.getType() == GoodsType.ACCESSORIES) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
+                    } else if (goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
+                    } else {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
+                    }
+                    studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
+
+                    BigDecimal tempPrice = BigDecimal.ZERO;
+                    if (totalGroupPurchasePrice.compareTo(BigDecimal.ZERO) > 0) {
+                        tempPrice = studentPaymentOrder.getExpectAmount().multiply(goods.getGroupPurchasePrice()).divide(totalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
+                    }
+
+                    if (totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIdsStr.split(",").length == studentPaymentOrderDetailList.size() + 1) {
+                        studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
+                    } else {
+                        studentPaymentOrderDetail.setPrice(tempPrice);
+                    }
+                    studentPaymentOrderDetail.setUpdateTime(date);
+                    studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+
+                    totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
+                    studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+                }
+            }
+        }
+
+        if (studentPaymentOrderDetailList.size() > 0) {
+            studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
         }
 
         studentPaymentOrder.setVersion(0);
@@ -487,8 +478,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentDao.lockUser(studentId);
         List<GoodsSellDto> goodsSellDtos = JSONObject.parseArray(studentGoodsSell.getGoodsJson(), GoodsSellDto.class);
         List<Integer> goodsIds = goodsSellDtos.stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
-        Map<Integer, String> integerStringMap = getMap("goods", "id_", "type_", goodsIds,studentGoodsSell.getTenantId(), Integer.class, String.class);
-        Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds,studentGoodsSell.getTenantId(), Integer.class, BigDecimal.class);
+        Map<Integer, String> integerStringMap = getMap("goods", "id_", "type_", goodsIds, studentGoodsSell.getTenantId(), Integer.class, String.class);
+        Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds, studentGoodsSell.getTenantId(), Integer.class, BigDecimal.class);
         for (GoodsSellDto goodsSellDto : goodsSellDtos) {
             goodsSellDto.setGoodsType(integerStringMap.get(goodsSellDto.getGoodsId()));
             if (StringUtils.isNotEmpty(goodsSellDto.getComplementGoodsIdList())) {
@@ -633,14 +624,14 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         repairInfo.setPayStatus(0);
         repairInfo.setCreateTime(date);
         repairInfo.setUpdateTime(date);
-        
+
         List<RepairGoodsDto> repairGoodsDtos = null;
-        		
+
         String goodsJson = repairInfo.getGoodsJson();
         if (StringUtils.isNotEmpty(goodsJson)) {
             repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
             List<Integer> goodsIds = repairGoodsDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
-            Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds,student.getTenantId(), Integer.class, BigDecimal.class);
+            Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds, student.getTenantId(), Integer.class, BigDecimal.class);
             repairGoodsDtos.forEach(e -> {
                 e.setGroupPurchasePrice(map.get(e.getId()));
             });
@@ -692,8 +683,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
-  
-        
+
+
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<StudentPaymentOrderDetail>();
         // 添加studentPaymentOrderDetail
         StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
@@ -703,69 +694,69 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().multiply(repairInfo.getAmount()).divide(goodsPrice.add(repairInfo.getAmount()), RoundingMode.UP));
         studentPaymentOrderDetail.setUpdateTime(date);
         studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-        
+
         studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 
         BigDecimal totalPrice = studentPaymentOrderDetail.getPrice();
         BigDecimal repairPrice = studentPaymentOrderDetail.getPrice();
-        
-        if(StringUtils.isNotBlank(repairInfo.getGoodsJson()) && repairGoodsDtos != null){
-        	String goodsIds = repairGoodsDtos.stream().map(t -> t.getId().toString()).collect(Collectors.joining(","));
-        	List<Goods> goodsList = goodsService.findGoodsByIds(goodsIds);
-        	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-        	Goods goods = null;
-        	BigDecimal totalGroupPurchasePrice = BigDecimal.ZERO;
-        	for(String goodsIdStr : goodsIds.split(",")){
-        		if(StringUtils.isBlank(goodsIdStr)){
-					continue;
-				}
-				goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-				
-				if(goods != null){
-					totalGroupPurchasePrice = totalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
-				}
-        	}
-        	for(String goodsIdStr : goodsIds.split(",")){
-        		if(StringUtils.isBlank(goodsIdStr)){
-					continue;
-				}
-				goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-				
-				if(goods != null){
-					studentPaymentOrderDetail = new StudentPaymentOrderDetail();
-	                studentPaymentOrderDetail.setCreateTime(date);
-	                if(goods.getType() == GoodsType.INSTRUMENT){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
-	                }else if(goods.getType() == GoodsType.ACCESSORIES){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
-	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
-	                }else{
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
-	                }
-	                studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
-	                
-	                BigDecimal tempPrice = BigDecimal.ZERO;
-	                if(totalGroupPurchasePrice.compareTo(BigDecimal.ZERO) > 0) {
-	                	tempPrice = studentPaymentOrder.getExpectAmount().subtract(repairPrice).multiply(goods.getGroupPurchasePrice()).divide(totalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
-	                }
-	                
-	                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIds.split(",").length == studentPaymentOrderDetailList.size()){
-	                	studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
-	                }else{
-	                	studentPaymentOrderDetail.setPrice(tempPrice);
-	                }
-	                studentPaymentOrderDetail.setUpdateTime(date);
-	                studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-	                
-	                totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
-	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
-				}
-        	}
-        }
-        
-        if(studentPaymentOrderDetailList.size() > 0){
-        	studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
+
+        if (StringUtils.isNotBlank(repairInfo.getGoodsJson()) && repairGoodsDtos != null) {
+            String goodsIds = repairGoodsDtos.stream().map(t -> t.getId().toString()).collect(Collectors.joining(","));
+            List<Goods> goodsList = goodsService.findGoodsByIds(goodsIds);
+            Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
+            Goods goods = null;
+            BigDecimal totalGroupPurchasePrice = BigDecimal.ZERO;
+            for (String goodsIdStr : goodsIds.split(",")) {
+                if (StringUtils.isBlank(goodsIdStr)) {
+                    continue;
+                }
+                goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+
+                if (goods != null) {
+                    totalGroupPurchasePrice = totalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
+                }
+            }
+            for (String goodsIdStr : goodsIds.split(",")) {
+                if (StringUtils.isBlank(goodsIdStr)) {
+                    continue;
+                }
+                goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+
+                if (goods != null) {
+                    studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+                    studentPaymentOrderDetail.setCreateTime(date);
+                    if (goods.getType() == GoodsType.INSTRUMENT) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
+                    } else if (goods.getType() == GoodsType.ACCESSORIES) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
+                    } else if (goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
+                    } else {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
+                    }
+                    studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
+
+                    BigDecimal tempPrice = BigDecimal.ZERO;
+                    if (totalGroupPurchasePrice.compareTo(BigDecimal.ZERO) > 0) {
+                        tempPrice = studentPaymentOrder.getExpectAmount().subtract(repairPrice).multiply(goods.getGroupPurchasePrice()).divide(totalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
+                    }
+
+                    if (totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIds.split(",").length == studentPaymentOrderDetailList.size()) {
+                        studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
+                    } else {
+                        studentPaymentOrderDetail.setPrice(tempPrice);
+                    }
+                    studentPaymentOrderDetail.setUpdateTime(date);
+                    studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+
+                    totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
+                    studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+                }
+            }
+        }
+
+        if (studentPaymentOrderDetailList.size() > 0) {
+            studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
         }
 
         BigDecimal balance = BigDecimal.ZERO;
@@ -887,7 +878,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         ) {
             throw new BizException("邮寄信息必填");
         }
-        
+
         List<RepairGoodsDto> repairGoodsDtos = null;
         Date date = new Date();
         StudentRepair studentRepair = studentRepairDao.get(repairInfo.getId());
@@ -908,7 +899,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 JSONObject goodObject = (JSONObject) good;
                 BigDecimal groupPurchasePrice = goodObject.getBigDecimal("groupPurchasePrice");
                 if (Objects.nonNull(groupPurchasePrice)) {
-                	goodsPrice = goodsPrice.add(groupPurchasePrice);
+                    goodsPrice = goodsPrice.add(groupPurchasePrice);
                 }
             }
         }
@@ -945,7 +936,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
-        
+
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<StudentPaymentOrderDetail>();
         // 添加studentPaymentOrderDetail
         StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
@@ -955,66 +946,66 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().multiply(studentRepair.getAmount()).divide(goodsPrice.add(studentRepair.getAmount()), RoundingMode.UP));
         studentPaymentOrderDetail.setUpdateTime(date);
         studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-        
+
         studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 
         BigDecimal totalPrice = studentPaymentOrderDetail.getPrice();
         BigDecimal repairPrice = studentPaymentOrderDetail.getPrice();
-        
-        if(StringUtils.isNotBlank(studentRepair.getGoodsJson()) && repairGoodsDtos != null){
-        	String goodsIds = repairGoodsDtos.stream().map(t -> t.getId().toString()).collect(Collectors.joining(","));
-        	List<Goods> goodsList = goodsService.findGoodsByIds(goodsIds);
-        	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-        	Goods goods = null;
-        	BigDecimal totalGroupPurchasePrice = BigDecimal.ZERO;
-        	for(String goodsIdStr : goodsIds.split(",")){
-        		if(StringUtils.isBlank(goodsIdStr)){
-					continue;
-				}
-				goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-				
-				if(goods != null){
-					totalGroupPurchasePrice = totalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
-				}
-        	}
-        	for(String goodsIdStr : goodsIds.split(",")){
-        		if(StringUtils.isBlank(goodsIdStr)){
-					continue;
-				}
-				goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-				
-				if(goods != null){
-					studentPaymentOrderDetail = new StudentPaymentOrderDetail();
-	                studentPaymentOrderDetail.setCreateTime(date);
-	                if(goods.getType() == GoodsType.INSTRUMENT){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
-	                }else if(goods.getType() == GoodsType.ACCESSORIES){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
-	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
-	                }else{
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
-	                }
-	                studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
-	                
-	                BigDecimal tempPrice = studentPaymentOrder.getExpectAmount().subtract(repairPrice).multiply(goods.getGroupPurchasePrice()).divide(totalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
-	                
-	                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIds.split(",").length == studentPaymentOrderDetailList.size()){
-	                	studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
-	                }else{
-	                	studentPaymentOrderDetail.setPrice(tempPrice);
-	                }
-	                studentPaymentOrderDetail.setUpdateTime(date);
-	                studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-	                
-	                totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
-	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
-				}
-        	}
-        }
-        
-        if(studentPaymentOrderDetailList.size() > 0){
-        	studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
+
+        if (StringUtils.isNotBlank(studentRepair.getGoodsJson()) && repairGoodsDtos != null) {
+            String goodsIds = repairGoodsDtos.stream().map(t -> t.getId().toString()).collect(Collectors.joining(","));
+            List<Goods> goodsList = goodsService.findGoodsByIds(goodsIds);
+            Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
+            Goods goods = null;
+            BigDecimal totalGroupPurchasePrice = BigDecimal.ZERO;
+            for (String goodsIdStr : goodsIds.split(",")) {
+                if (StringUtils.isBlank(goodsIdStr)) {
+                    continue;
+                }
+                goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+
+                if (goods != null) {
+                    totalGroupPurchasePrice = totalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
+                }
+            }
+            for (String goodsIdStr : goodsIds.split(",")) {
+                if (StringUtils.isBlank(goodsIdStr)) {
+                    continue;
+                }
+                goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+
+                if (goods != null) {
+                    studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+                    studentPaymentOrderDetail.setCreateTime(date);
+                    if (goods.getType() == GoodsType.INSTRUMENT) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
+                    } else if (goods.getType() == GoodsType.ACCESSORIES) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
+                    } else if (goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF) {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
+                    } else {
+                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
+                    }
+                    studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
+
+                    BigDecimal tempPrice = studentPaymentOrder.getExpectAmount().subtract(repairPrice).multiply(goods.getGroupPurchasePrice()).divide(totalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
+
+                    if (totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIds.split(",").length == studentPaymentOrderDetailList.size()) {
+                        studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
+                    } else {
+                        studentPaymentOrderDetail.setPrice(tempPrice);
+                    }
+                    studentPaymentOrderDetail.setUpdateTime(date);
+                    studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+
+                    totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
+                    studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+                }
+            }
+        }
+
+        if (studentPaymentOrderDetailList.size() > 0) {
+            studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
         }
 
         BigDecimal balance = BigDecimal.ZERO;
@@ -1137,55 +1128,55 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             //购买的商品加入销售列表
             saveSellOrder(studentPaymentOrder.getOrderNo());
         } else if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
-            
-        	//增加商品库存
+
+            //增加商品库存
             List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailService.queryOrderDetail(studentPaymentOrder.getId());
             String goodsIds = studentPaymentOrderDetailList.stream().filter(t -> StringUtils.isNotBlank(t.getMinuendStockGoodsIdList())).map(t -> t.getMinuendStockGoodsIdList()).collect(Collectors.joining(","));
-            if(StringUtils.isNotBlank(goodsIds)){
-            	GoodsProcurement goodsProcurement = null;
-            	List<Goods> goodsList = goodsService.getGoodsWithLocked(goodsIds);
-            	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-            	Goods goods = null;
-    			Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
-    			Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
-            	
-            	for(String goodsIdStr : goodsIds.split(",")){
-            		if(StringUtils.isBlank(goodsIdStr)){
-						continue;
-					}
-					goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-					if(batchUpdateGoodsMap.get(goods.getId()) != null){
-						goods = batchUpdateGoodsMap.get(goods.getId());
-					}
-					goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
-					goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
-					goods.setUpdateTime(nowDate);
-					
-					batchUpdateGoodsMap.put(goods.getId(), goods);
-					
-					// 进货清单
-					goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
-					if(goodsProcurement != null){
-						if(goodsProcurementMap.get(goodsProcurement.getId()) != null){
-							goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
-						}
-						goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
-						goodsProcurement.setUpdateTime(nowDate);
-						goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
-					}
-					
-            	}
-            	
-            	if(goodsProcurementMap.size() > 0){
-            		goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
-            	}
-                
-                if(batchUpdateGoodsMap.size() > 0){
-                	goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
+            if (StringUtils.isNotBlank(goodsIds)) {
+                GoodsProcurement goodsProcurement = null;
+                List<Goods> goodsList = goodsService.getGoodsWithLocked(goodsIds);
+                Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
+                Goods goods = null;
+                Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
+                Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
+
+                for (String goodsIdStr : goodsIds.split(",")) {
+                    if (StringUtils.isBlank(goodsIdStr)) {
+                        continue;
+                    }
+                    goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+                    if (batchUpdateGoodsMap.get(goods.getId()) != null) {
+                        goods = batchUpdateGoodsMap.get(goods.getId());
+                    }
+                    goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
+                    goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
+                    goods.setUpdateTime(nowDate);
+
+                    batchUpdateGoodsMap.put(goods.getId(), goods);
+
+                    // 进货清单
+                    goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
+                    if (goodsProcurement != null) {
+                        if (goodsProcurementMap.get(goodsProcurement.getId()) != null) {
+                            goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
+                        }
+                        goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
+                        goodsProcurement.setUpdateTime(nowDate);
+                        goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
+                    }
+
+                }
+
+                if (goodsProcurementMap.size() > 0) {
+                    goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
+                }
+
+                if (batchUpdateGoodsMap.size() > 0) {
+                    goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
                 }
             }
-        	
-        	if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐器购买支付失败");
             }
             sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
@@ -1564,54 +1555,54 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             if (this.update(repairInfo) <= 0) {
                 throw new BizException("维修单更新失败");
             }
-            
+
             //增加商品库存
             List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailService.queryOrderDetail(studentPaymentOrder.getId());
             String goodsIds = studentPaymentOrderDetailList.stream().filter(t -> StringUtils.isNotBlank(t.getMinuendStockGoodsIdList())).map(t -> t.getMinuendStockGoodsIdList()).collect(Collectors.joining(","));
-            if(StringUtils.isNotBlank(goodsIds)){
-            	GoodsProcurement goodsProcurement = null;
-            	List<Goods> goodsList = goodsService.getGoodsWithLocked(goodsIds);
-            	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-            	Goods goods = null;
-    			Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
-    			Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
-            	
-            	for(String goodsIdStr : goodsIds.split(",")){
-            		if(StringUtils.isBlank(goodsIdStr)){
-						continue;
-					}
-					goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-					if(batchUpdateGoodsMap.get(goods.getId()) != null){
-						goods = batchUpdateGoodsMap.get(goods.getId());
-					}
-					goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
-					goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
-					goods.setUpdateTime(nowDate);
-					
-					batchUpdateGoodsMap.put(goods.getId(), goods);
-					
-					// 进货清单
-					goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
-					if(goodsProcurement != null){
-						if(goodsProcurementMap.get(goodsProcurement.getId()) != null){
-							goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
-						}
-						goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
-						goodsProcurement.setUpdateTime(nowDate);
-						goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
-					}
-					
-            	}
-            	
-            	if(goodsProcurementMap.size() > 0){
-            		goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
-            	}
-                
-                if(batchUpdateGoodsMap.size() > 0){
-                	goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
+            if (StringUtils.isNotBlank(goodsIds)) {
+                GoodsProcurement goodsProcurement = null;
+                List<Goods> goodsList = goodsService.getGoodsWithLocked(goodsIds);
+                Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
+                Goods goods = null;
+                Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
+                Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
+
+                for (String goodsIdStr : goodsIds.split(",")) {
+                    if (StringUtils.isBlank(goodsIdStr)) {
+                        continue;
+                    }
+                    goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+                    if (batchUpdateGoodsMap.get(goods.getId()) != null) {
+                        goods = batchUpdateGoodsMap.get(goods.getId());
+                    }
+                    goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
+                    goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
+                    goods.setUpdateTime(nowDate);
+
+                    batchUpdateGoodsMap.put(goods.getId(), goods);
+
+                    // 进货清单
+                    goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
+                    if (goodsProcurement != null) {
+                        if (goodsProcurementMap.get(goodsProcurement.getId()) != null) {
+                            goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
+                        }
+                        goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
+                        goodsProcurement.setUpdateTime(nowDate);
+                        goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
+                    }
+
+                }
+
+                if (goodsProcurementMap.size() > 0) {
+                    goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
+                }
+
+                if (batchUpdateGoodsMap.size() > 0) {
+                    goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
                 }
             }
-            
+
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐器维修支付失败");
             }

+ 783 - 763
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -16,8 +16,10 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.common.page.PageUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -74,784 +76,802 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.idcard.IdcardValidator;
 
 @Service
-public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  implements TeacherService {
-
-	@Autowired
-	private TeacherDao teacherDao;
-	@Autowired
-	private SubjectDao subjectDao;
-	@Autowired
-	private ClassGroupDao classGroupDao;
-	@Autowired
-	private ClassGroupService classGroupService;
-	@Autowired
-	private MusicGroupDao musicGroupDao;
-	@Autowired
-	private StudentRegistrationDao studentRegistrationDao;
-	@Autowired
-	private DemoGroupDao demoGroupDao;
-	@Autowired
-	private OrganizationDao organizationDao;
-	@Autowired
-	private SchoolDao schoolDao;
-	@Autowired
-	private SysUserCashAccountDao sysUserCashAccountDao;
-	@Autowired
-	private StudentPaymentOrderDao studentPaymentOrderDao;
-	@Autowired
-	private ImFeignService imFeignService;
-	@Autowired
-	private ImGroupDao imGroupDao ;
-	@Autowired
-	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
-	@Autowired
-	private StudentDao studentDao;
-	@Autowired
-	private ImUserFriendDao imUserFriendDao;
-	@Autowired
-	private RedisTemplate<String,String> redisTemplate;
-	@Autowired
-	private CloudTeacherDao cloudTeacherDao;
-	@Autowired
-	private TenantInfoService tenantInfoService;
+public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher> implements TeacherService {
+
+    @Autowired
+    private TeacherDao teacherDao;
+    @Autowired
+    private SubjectDao subjectDao;
+    @Autowired
+    private ClassGroupDao classGroupDao;
+    @Autowired
+    private ClassGroupService classGroupService;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
+    @Autowired
+    private DemoGroupDao demoGroupDao;
+    @Autowired
+    private OrganizationDao organizationDao;
+    @Autowired
+    private SchoolDao schoolDao;
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private ImFeignService imFeignService;
+    @Autowired
+    private ImGroupDao imGroupDao;
+    @Autowired
+    private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
+    @Autowired
+    private StudentDao studentDao;
+    @Autowired
+    private ImUserFriendDao imUserFriendDao;
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    private CloudTeacherDao cloudTeacherDao;
+    @Autowired
+    private TenantInfoService tenantInfoService;
 
     @Autowired
     private RealnameAuthenticationPluginContext realnameAuthenticationPluginContext;
 
-	@Override
-	public BaseDAO<Integer, Teacher> getDAO() {
-		return teacherDao;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public int add(Teacher teacher) throws Exception {
-		SysUser user = teacherDao.getUserWithPhone(teacher.getPhone());
-		if(user != null && user.getId() != null){
-			EmployeeServiceImpl.checkTenantId(teacher.getTenantId(),user.getTenantId());
-			if(user.getUserType().contains("TEACHER")){
-				throw new BizException("此手机号已被占用");
-			}
-			Integer id = user.getId();
-			Teacher teacher1 = teacherDao.get(id);
-			if(teacher1 == null || teacher1.getId() == null){
-				teacher.setId(id);
-				teacher.setDelFlag(YesOrNoEnum.NO);
-				teacherDao.insert(teacher);
-				teacher.setOrganId(null);
-				teacher.setUserType(user.getUserType() + ",TEACHER");
-				teacherDao.updateUser(teacher);
-			}else {
-				throw new BizException("用户已存在");
-			}
-			return id;
-		}
-		if(Objects.nonNull(teacher.getEntryDate())&&Objects.nonNull(teacher.getFormalStaffDate())){
-			if(teacher.getEntryDate().compareTo(teacher.getFormalStaffDate())>0){
-				throw new BizException("入职日期不可晚于转正日期");
-			}
-		}
-		teacher.setUserType("TEACHER");
-		teacher.setUsername(teacher.getRealName());
-		teacherDao.addSysUser(teacher);
-		//添加用户现金账户
-		sysUserCashAccountDao.insert(new SysUserCashAccount(teacher.getId(),"CNY"));
-		//添加用户电子签章账户
+    @Override
+    public BaseDAO<Integer, Teacher> getDAO() {
+        return teacherDao;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int add(Teacher teacher) throws Exception {
+        SysUser user = teacherDao.getUserWithPhone(teacher.getPhone());
+        if (user != null && user.getId() != null) {
+            EmployeeServiceImpl.checkTenantId(teacher.getTenantId(), user.getTenantId());
+            if (user.getUserType().contains("TEACHER")) {
+                throw new BizException("此手机号已被占用");
+            }
+            Integer id = user.getId();
+            Teacher teacher1 = teacherDao.get(id);
+            if (teacher1 == null || teacher1.getId() == null) {
+                teacher.setId(id);
+                teacher.setDelFlag(YesOrNoEnum.NO);
+                teacherDao.insert(teacher);
+                teacher.setOrganId(null);
+                teacher.setUserType(user.getUserType() + ",TEACHER");
+                teacherDao.updateUser(teacher);
+            } else {
+                throw new BizException("用户已存在");
+            }
+            return id;
+        }
+        if (Objects.nonNull(teacher.getEntryDate()) && Objects.nonNull(teacher.getFormalStaffDate())) {
+            if (teacher.getEntryDate().compareTo(teacher.getFormalStaffDate()) > 0) {
+                throw new BizException("入职日期不可晚于转正日期");
+            }
+        }
+        teacher.setUserType("TEACHER");
+        teacher.setUsername(teacher.getRealName());
+        teacherDao.addSysUser(teacher);
+        //添加用户现金账户
+        sysUserCashAccountDao.insert(new SysUserCashAccount(teacher.getId(), "CNY"));
+        //添加用户电子签章账户
 //		contractService.register(teacher.getId(), user.getRealName(), user.getIdCardNo(), user.getPhone());
-		teacherDao.insert(teacher);
-		ImResult imResult = imFeignService.register(new ImUserModel(teacher.getId().toString(), teacher.getUsername(), null));
-		if(imResult != null){
-			teacher.setImToken(imResult.getToken());
-			teacherDao.updateUser(teacher);
-		}
-		return teacher.getId();
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void updateTea1(Teacher teacher) {
-		Teacher teacher1 = teacherDao.get(teacher.getId());
-		if(null==teacher1){
-			throw new BizException("教师信息不存在");
-		}
-
-		if(StringUtils.isNotEmpty(teacher.getPhone())){
-			SysUser sysUser = teacherDao.getUserWithPhone(teacher.getPhone());
-			if(sysUser != null && !sysUser.getId().equals(teacher.getId())){
-				throw new BizException("手机号已存在");
-			}
-		}
-
-		// 同步更新机构手机号 如果它存在
-		SysUser user = teacherDao.getUser(teacher.getId()); // 138 -> 159
-		if (!Objects.equals(user.getPhone(), teacher1.getPhone())) {
-			tenantInfoService.updatePhone(teacher1.getPhone(), user.getPhone());
-		}
-
-		if(Objects.nonNull(teacher.getEntryDate())&&Objects.nonNull(teacher.getFormalStaffDate())){
-			if(teacher.getEntryDate().compareTo(teacher.getFormalStaffDate())>0){
-				throw new BizException("入职日期不可晚于转正日期");
-			}
-		}
-		teacher.setUpdateTime(new Date());
-		teacher.setTeacherOrganId(teacher.getOrganId());
-		teacherDao.update(teacher);
-		teacher.setOrganId(null);
-		teacherDao.updateUser(teacher);
-		imGroupDao.updateNickname(teacher.getId(),teacher.getRealName());
-		imGroupDao.updateUserFriendNickname(teacher.getId(),teacher.getRealName());
-		imFeignService.update(new ImUserModel(teacher.getId().toString(),teacher.getRealName(),teacher.getAvatar()));
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void updateTea(Teacher teacher) {
-		Teacher teacher1 = teacherDao.get(teacher.getId());
-		if(null==teacher1){
-			throw new BizException("教师信息不存在");
-		}
-		if(StringUtils.isNotEmpty(teacher.getPhone())){
-			SysUser sysUser = teacherDao.getUserWithPhone(teacher.getPhone());
-			if(sysUser != null && !sysUser.getId().equals(teacher.getId())){
-				throw new BizException("手机号已存在");
-			}
-		}
-		// 同步更新机构手机号 如果它存在
-		SysUser user = teacherDao.getUser(teacher.getId());
-		if (!Objects.equals(user.getPhone(), teacher1.getPhone())) {
-			tenantInfoService.updatePhone(teacher1.getPhone(), user.getPhone());
-		}
-
-		if(Objects.nonNull(teacher.getEntryDate())&&Objects.nonNull(teacher.getFormalStaffDate())){
-			if(teacher.getEntryDate().compareTo(teacher.getFormalStaffDate())>0){
-				throw new BizException("入职日期不可晚于转正日期");
-			}
-		}
-		teacher.setUpdateTime(new Date());
-		teacher.setTeacherOrganId(teacher.getOrganId());
-		teacherDao.eduUpdateTeacher(teacher);
-		teacher.setOrganId(null);
-		teacherDao.updateUser(teacher);
-		imGroupDao.updateNickname(teacher.getId(),teacher.getRealName());
-		imGroupDao.updateUserFriendNickname(teacher.getId(),teacher.getRealName());
-		imFeignService.update(new ImUserModel(teacher.getId().toString(),teacher.getRealName(),teacher.getAvatar()));
-	}
-
-	@Override
-	public void deleteTeacher(Long userId) {
-		SysUser sysUser=new SysUser();
-		sysUser.setId(userId.intValue());
-		sysUser.setDelFlag(YesOrNoEnum.YES);
-		teacherDao.updateUser(sysUser);
-	}
-
-	@Override
-	public List<ImGroupModel> queryTeacherGroups(Integer userId,String search) {
-		//获取教师所在班级列表
-		List<ImGroupModel> imGroupModels =  classGroupDao.queryTeacherGroups(userId,search);
-		if(imGroupModels != null && imGroupModels.size() > 0){
-			imGroupModels.forEach(e -> {
-				e.setCount(classGroupService.findGroupUsers(Integer.parseInt(e.getId()),null).size());
-			});
-		}
-		return imGroupModels;
-	}
-
-	@Override
-	public List<BasicUserDto> queryGroupStudentList(Integer teacherId, String search) {
-		//获取关联的学员列表
-		Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
-		List<BasicUserDto> teachers = new ArrayList<>();
-		if(studentIds.size() > 0){
-			teachers.addAll(teacherDao.queryTeacherBaseInfo(studentIds,search));
-		}
-		return teachers.stream().distinct().collect(Collectors.toList());
-	}
-
-	@Override
-	public List<BasicUserDto> queryGroupStudents(Integer teacherId, String search) {
-		//获取关联的学员列表
-		Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
-		//获取关联的老师列表
-		studentIds.addAll(teacherDao.queryCourseClassTeacherIds(teacherId));
-		//获取关联的乐团的管理老师
-		List<String> musicLeaderIds = teacherDao.queryMusicLeaderIds(teacherId);
-		musicLeaderIds.removeAll(Collections.singleton(null));
-		if(musicLeaderIds.size() > 0){
-			Set<String> leaderIds = new HashSet<>();
-			musicLeaderIds.forEach(e->{
-				leaderIds.addAll(Arrays.asList(e.split(",")));
-			});
-			leaderIds.forEach(e->{
-				studentIds.add(Integer.valueOf(e));
-			});
-		}
-		studentIds.removeAll(Collections.singleton(null));
-		List<ImGroupModel> musicGroups =  musicGroupDao.queryTeacherGroups(teacherId,search);
-		List<BasicUserDto> teachers = new ArrayList<>();
-		if(musicGroups != null && musicGroups.size() > 0){
-			Set<String> musicGroupId = musicGroups.stream().map(ImGroupModel::getId).collect(Collectors.toSet());
-			List<MusicGroup> musicGroupList = musicGroupDao.queryListByIds(StringUtils.join(musicGroupId, ","));
-			Set<Integer> teacherIdSet = new HashSet<>();
-			if(musicGroupList != null && musicGroupList.size() > 0){
-				musicGroupList.forEach(e->{
-					teacherIdSet.add(e.getTeamTeacherId());
-					teacherIdSet.add(e.getEducationalTeacherId());
-					teacherIdSet.add(e.getDirectorUserId());
-				});
-			}
-			teacherIdSet.remove(teacherId);
-			teacherIdSet.removeAll(Collections.singleton(null));
-			if(teacherIdSet.size() > 0){
-				teachers = teacherDao.queryMusicGroupStudents(StringUtils.join(teacherIdSet,","), search);
-			}
-		}
-		List<BasicUserDto> userDtos = teacherDao.queryGroupStudents(teacherId, search);
-		if(userDtos != null && userDtos.size() > 0){
-			teachers.addAll(userDtos);
-			Set<String> musicGroupIds = userDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
-			if(musicGroupIds != null && musicGroupIds.size() > 0){
-				Map<String, String> musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
-				userDtos.forEach(e->{
-					e.setMusicGroupName(musicGroupNameMap.get(e.getMusicGroupId()));
-				});
-			}
-		}
-		studentIds.removeAll(userDtos.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		studentIds.remove(teacherId);
-		if(studentIds.size() > 0){
-			teachers.addAll(teacherDao.queryTeacherBaseInfo(studentIds,search));
-		}
-		return teachers.stream().distinct().collect(Collectors.toList());
-	}
-
-	@Transactional(rollbackFor = Exception.class)
-	public List<ImUserFriendDto> queryGroupStudents1(Integer teacherId, String search) {
-		Set<BasicUserDto> basicUserDtos = new HashSet<>();
-		//学员关联的通讯录
-		//获取相关课程,班级老师列表
-		Set<Integer> teacherIds = teacherDao.findMusicTeacherIds(teacherId);
-		//获取学员所在乐团列表
-		List<String> musicGroupIds = studentRegistrationDao.queryStudentMusicGroup(teacherId);
-		if (musicGroupIds != null && musicGroupIds.size() > 0) {
-			List<MusicGroup> musicGroups = musicGroupDao.queryListByIds(StringUtils.join(musicGroupIds, ","));
-			musicGroups.forEach(e -> {
-				teacherIds.add(e.getDirectorUserId());
-				teacherIds.add(e.getEducationalTeacherId());
-				teacherIds.add(e.getTeamTeacherId());
-			});
-		}
-		//获取相关vip课老师列表
-		teacherIds.addAll(teacherDao.findVipTeacherIds(teacherId));
-		//获取陪练课老师列表
-		teacherIds.addAll(teacherDao.findPracticeTeacherIds(teacherId));
-		//获取对外课程老师列表
-		teacherIds.addAll(teacherDao.findCloseCourseTeacherIds(teacherId));
-		//获取陪练课课程教务老师
-		teacherIds.addAll(teacherDao.findPracticeEducationalTeacherId(teacherId));
-		//获取VIP课程教务老师
-		teacherIds.addAll(teacherDao.findVipEducationalTeacherId(teacherId));
-		//获取对外课程务老师
-		teacherIds.addAll(teacherDao.findCommEducationalTeacherId(teacherId));
-		//获取关联的指导老师
-		Student student = studentDao.get(teacherId);
-		if (student != null && student.getTeacherId() != null) {
-			teacherIds.add(student.getTeacherId());
-		}
-		if (teacherIds.size() > 0) {
-			basicUserDtos.addAll(teacherDao.queryTeacherBaseInfo(teacherIds, search));
-		}
-
-		//获取关联的学员列表
-		Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
-		//获取关联的老师列表
-		studentIds.addAll(teacherDao.queryCourseClassTeacherIds(teacherId));
-		//获取关联的乐团的管理老师
-		List<String> musicLeaderIds = teacherDao.queryMusicLeaderIds(teacherId);
-		musicLeaderIds.removeAll(Collections.singleton(null));
-		if(musicLeaderIds.size() > 0){
-			Set<String> leaderIds = new HashSet<>();
-			musicLeaderIds.forEach(e->{
-				leaderIds.addAll(Arrays.asList(e.split(",")));
-			});
-			leaderIds.forEach(e->{
-				studentIds.add(Integer.valueOf(e));
-			});
-		}
-		studentIds.removeAll(Collections.singleton(null));
-		List<ImGroupModel> musicGroups =  musicGroupDao.queryTeacherGroups(teacherId,search);
-
-		if(musicGroups != null && musicGroups.size() > 0){
-			Set<String> musicGroupId = musicGroups.stream().map(ImGroupModel::getId).collect(Collectors.toSet());
-			List<MusicGroup> musicGroupList = musicGroupDao.queryListByIds(StringUtils.join(musicGroupId, ","));
-			Set<Integer> teacherIdSet = new HashSet<>();
-			if(musicGroupList != null && musicGroupList.size() > 0){
-				musicGroupList.forEach(e->{
-					teacherIdSet.add(e.getTeamTeacherId());
-					teacherIdSet.add(e.getEducationalTeacherId());
-					teacherIdSet.add(e.getDirectorUserId());
-				});
-			}
-			teacherIdSet.remove(teacherId);
-			teacherIdSet.removeAll(Collections.singleton(null));
-			if(teacherIdSet.size() > 0){
-				basicUserDtos.addAll(teacherDao.queryMusicGroupStudents(StringUtils.join(teacherIdSet,","), search));
-			}
-		}
-
-		List<BasicUserDto> userDtos = teacherDao.queryGroupStudents(teacherId, search);
-		if(userDtos != null && userDtos.size() > 0){
-			basicUserDtos.addAll(userDtos);
-			Set<String> musicGroupIds1 = userDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
-			if(musicGroupIds1 != null && musicGroupIds1.size() > 0){
-				Map<String, String> musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds1));
-				userDtos.forEach(e->{
-					e.setMusicGroupName(musicGroupNameMap.get(e.getMusicGroupId()));
-				});
-			}
-		}
-		studentIds.removeAll(userDtos.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		studentIds.remove(teacherId);
-		if(studentIds.size() > 0){
-			basicUserDtos.addAll(teacherDao.queryTeacherBaseInfo(studentIds,search));
-		}
-
-		String syncImUserFriendKey = "syncImUserFriend:" + teacherId;
-		if(basicUserDtos.size() > 0){
-			for (BasicUserDto basicUserDto : basicUserDtos) {
-				if(basicUserDto.getUserId().equals(teacherId)){
-					continue;
-				}
-				// 检查是否已经是好友
-				ImUserFriend userFriend = imUserFriendDao.query(teacherId, basicUserDto.getUserId());
-				if (userFriend != null) {
-					continue;
-				}
-				imUserFriendDao.insertByBasicUser(basicUserDto,teacherId);
-			}
-			redisTemplate.opsForValue().setIfAbsent(syncImUserFriendKey,teacherId.toString());
-			return imUserFriendDao.queryFriendListByUserId(teacherId, search);
-		}
-		redisTemplate.opsForValue().setIfAbsent(syncImUserFriendKey,teacherId.toString());
-		return new ArrayList<>();
-	}
+        teacherDao.insert(teacher);
+        ImResult imResult = imFeignService.register(new ImUserModel(teacher.getId().toString(), teacher.getUsername(), null));
+        if (imResult != null) {
+            teacher.setImToken(imResult.getToken());
+            teacherDao.updateUser(teacher);
+        }
+        return teacher.getId();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateTea1(Teacher teacher) {
+        Teacher teacher1 = teacherDao.get(teacher.getId());
+        if (null == teacher1) {
+            throw new BizException("教师信息不存在");
+        }
+
+        if (StringUtils.isNotEmpty(teacher.getPhone())) {
+            SysUser sysUser = teacherDao.getUserWithPhone(teacher.getPhone());
+            if (sysUser != null && !sysUser.getId().equals(teacher.getId())) {
+                throw new BizException("手机号已存在");
+            }
+        }
+
+        // 同步更新机构手机号 如果它存在
+        SysUser user = teacherDao.getUser(teacher.getId()); // 138 -> 159
+        if (!Objects.equals(user.getPhone(), teacher1.getPhone())) {
+            tenantInfoService.updatePhone(teacher1.getPhone(), user.getPhone());
+        }
+
+        if (Objects.nonNull(teacher.getEntryDate()) && Objects.nonNull(teacher.getFormalStaffDate())) {
+            if (teacher.getEntryDate().compareTo(teacher.getFormalStaffDate()) > 0) {
+                throw new BizException("入职日期不可晚于转正日期");
+            }
+        }
+        teacher.setUpdateTime(new Date());
+        teacher.setTeacherOrganId(teacher.getOrganId());
+        teacherDao.update(teacher);
+        teacher.setOrganId(null);
+        teacherDao.updateUser(teacher);
+        imGroupDao.updateNickname(teacher.getId(), teacher.getRealName());
+        imGroupDao.updateUserFriendNickname(teacher.getId(), teacher.getRealName());
+        imFeignService.update(new ImUserModel(teacher.getId().toString(), teacher.getRealName(), teacher.getAvatar()));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateTea(Teacher teacher) {
+        Teacher teacher1 = teacherDao.get(teacher.getId());
+        if (null == teacher1) {
+            throw new BizException("教师信息不存在");
+        }
+        if (StringUtils.isNotEmpty(teacher.getPhone())) {
+            SysUser sysUser = teacherDao.getUserWithPhone(teacher.getPhone());
+            if (sysUser != null && !sysUser.getId().equals(teacher.getId())) {
+                throw new BizException("手机号已存在");
+            }
+        }
+        // 同步更新机构手机号 如果它存在
+        SysUser user = teacherDao.getUser(teacher.getId());
+        if (!Objects.equals(user.getPhone(), teacher1.getPhone())) {
+            tenantInfoService.updatePhone(teacher1.getPhone(), user.getPhone());
+        }
+
+        if (Objects.nonNull(teacher.getEntryDate()) && Objects.nonNull(teacher.getFormalStaffDate())) {
+            if (teacher.getEntryDate().compareTo(teacher.getFormalStaffDate()) > 0) {
+                throw new BizException("入职日期不可晚于转正日期");
+            }
+        }
+        teacher.setUpdateTime(new Date());
+        teacher.setTeacherOrganId(teacher.getOrganId());
+        teacherDao.eduUpdateTeacher(teacher);
+        teacher.setOrganId(null);
+        teacherDao.updateUser(teacher);
+        imGroupDao.updateNickname(teacher.getId(), teacher.getRealName());
+        imGroupDao.updateUserFriendNickname(teacher.getId(), teacher.getRealName());
+        imFeignService.update(new ImUserModel(teacher.getId().toString(), teacher.getRealName(), teacher.getAvatar()));
+    }
+
+    @Override
+    public void deleteTeacher(Long userId) {
+        SysUser sysUser = new SysUser();
+        sysUser.setId(userId.intValue());
+        sysUser.setDelFlag(YesOrNoEnum.YES);
+        teacherDao.updateUser(sysUser);
+    }
+
+    @Override
+    public List<ImGroupModel> queryTeacherGroups(Integer userId, String search) {
+        //获取教师所在班级列表
+        List<ImGroupModel> imGroupModels = classGroupDao.queryTeacherGroups(userId, search);
+        if (imGroupModels != null && imGroupModels.size() > 0) {
+            imGroupModels.forEach(e -> {
+                e.setCount(classGroupService.findGroupUsers(Integer.parseInt(e.getId()), null).size());
+            });
+        }
+        return imGroupModels;
+    }
+
+    @Override
+    public List<BasicUserDto> queryGroupStudentList(Integer teacherId, String search) {
+        //获取关联的学员列表
+        Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
+        List<BasicUserDto> teachers = new ArrayList<>();
+        if (studentIds.size() > 0) {
+            teachers.addAll(teacherDao.queryTeacherBaseInfo(studentIds, search));
+        }
+        return teachers.stream().distinct().collect(Collectors.toList());
+    }
+
+    @Override
+    public List<BasicUserDto> queryGroupStudents(Integer teacherId, String search) {
+        //获取关联的学员列表
+        Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
+        //获取关联的老师列表
+        studentIds.addAll(teacherDao.queryCourseClassTeacherIds(teacherId));
+        //获取关联的乐团的管理老师
+        List<String> musicLeaderIds = teacherDao.queryMusicLeaderIds(teacherId);
+        musicLeaderIds.removeAll(Collections.singleton(null));
+        if (musicLeaderIds.size() > 0) {
+            Set<String> leaderIds = new HashSet<>();
+            musicLeaderIds.forEach(e -> {
+                leaderIds.addAll(Arrays.asList(e.split(",")));
+            });
+            leaderIds.forEach(e -> {
+                studentIds.add(Integer.valueOf(e));
+            });
+        }
+        studentIds.removeAll(Collections.singleton(null));
+        List<ImGroupModel> musicGroups = musicGroupDao.queryTeacherGroups(teacherId, search);
+        List<BasicUserDto> teachers = new ArrayList<>();
+        if (musicGroups != null && musicGroups.size() > 0) {
+            Set<String> musicGroupId = musicGroups.stream().map(ImGroupModel::getId).collect(Collectors.toSet());
+            List<MusicGroup> musicGroupList = musicGroupDao.queryListByIds(StringUtils.join(musicGroupId, ","));
+            Set<Integer> teacherIdSet = new HashSet<>();
+            if (musicGroupList != null && musicGroupList.size() > 0) {
+                musicGroupList.forEach(e -> {
+                    teacherIdSet.add(e.getTeamTeacherId());
+                    teacherIdSet.add(e.getEducationalTeacherId());
+                    teacherIdSet.add(e.getDirectorUserId());
+                });
+            }
+            teacherIdSet.remove(teacherId);
+            teacherIdSet.removeAll(Collections.singleton(null));
+            if (teacherIdSet.size() > 0) {
+                teachers = teacherDao.queryMusicGroupStudents(StringUtils.join(teacherIdSet, ","), search);
+            }
+        }
+        List<BasicUserDto> userDtos = teacherDao.queryGroupStudents(teacherId, search);
+        if (userDtos != null && userDtos.size() > 0) {
+            teachers.addAll(userDtos);
+            Set<String> musicGroupIds = userDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+            if (musicGroupIds != null && musicGroupIds.size() > 0) {
+                Map<String, String> musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+                userDtos.forEach(e -> {
+                    e.setMusicGroupName(musicGroupNameMap.get(e.getMusicGroupId()));
+                });
+            }
+        }
+        studentIds.removeAll(userDtos.stream().map(e -> e.getUserId()).collect(Collectors.toSet()));
+        studentIds.remove(teacherId);
+        if (studentIds.size() > 0) {
+            teachers.addAll(teacherDao.queryTeacherBaseInfo(studentIds, search));
+        }
+        return teachers.stream().distinct().collect(Collectors.toList());
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public List<ImUserFriendDto> queryGroupStudents1(Integer teacherId, String search) {
+        Set<BasicUserDto> basicUserDtos = new HashSet<>();
+        //学员关联的通讯录
+        //获取相关课程,班级老师列表
+        Set<Integer> teacherIds = teacherDao.findMusicTeacherIds(teacherId);
+        //获取学员所在乐团列表
+        List<String> musicGroupIds = studentRegistrationDao.queryStudentMusicGroup(teacherId);
+        if (musicGroupIds != null && musicGroupIds.size() > 0) {
+            List<MusicGroup> musicGroups = musicGroupDao.queryListByIds(StringUtils.join(musicGroupIds, ","));
+            musicGroups.forEach(e -> {
+                teacherIds.add(e.getDirectorUserId());
+                teacherIds.add(e.getEducationalTeacherId());
+                teacherIds.add(e.getTeamTeacherId());
+            });
+        }
+        //获取相关vip课老师列表
+        teacherIds.addAll(teacherDao.findVipTeacherIds(teacherId));
+        //获取陪练课老师列表
+        teacherIds.addAll(teacherDao.findPracticeTeacherIds(teacherId));
+        //获取对外课程老师列表
+        teacherIds.addAll(teacherDao.findCloseCourseTeacherIds(teacherId));
+        //获取陪练课课程教务老师
+        teacherIds.addAll(teacherDao.findPracticeEducationalTeacherId(teacherId));
+        //获取VIP课程教务老师
+        teacherIds.addAll(teacherDao.findVipEducationalTeacherId(teacherId));
+        //获取对外课程务老师
+        teacherIds.addAll(teacherDao.findCommEducationalTeacherId(teacherId));
+        //获取关联的指导老师
+        Student student = studentDao.get(teacherId);
+        if (student != null && student.getTeacherId() != null) {
+            teacherIds.add(student.getTeacherId());
+        }
+        if (teacherIds.size() > 0) {
+            basicUserDtos.addAll(teacherDao.queryTeacherBaseInfo(teacherIds, search));
+        }
+
+        //获取关联的学员列表
+        Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
+        //获取关联的老师列表
+        studentIds.addAll(teacherDao.queryCourseClassTeacherIds(teacherId));
+        //获取关联的乐团的管理老师
+        List<String> musicLeaderIds = teacherDao.queryMusicLeaderIds(teacherId);
+        musicLeaderIds.removeAll(Collections.singleton(null));
+        if (musicLeaderIds.size() > 0) {
+            Set<String> leaderIds = new HashSet<>();
+            musicLeaderIds.forEach(e -> {
+                leaderIds.addAll(Arrays.asList(e.split(",")));
+            });
+            leaderIds.forEach(e -> {
+                studentIds.add(Integer.valueOf(e));
+            });
+        }
+        studentIds.removeAll(Collections.singleton(null));
+        List<ImGroupModel> musicGroups = musicGroupDao.queryTeacherGroups(teacherId, search);
+
+        if (musicGroups != null && musicGroups.size() > 0) {
+            Set<String> musicGroupId = musicGroups.stream().map(ImGroupModel::getId).collect(Collectors.toSet());
+            List<MusicGroup> musicGroupList = musicGroupDao.queryListByIds(StringUtils.join(musicGroupId, ","));
+            Set<Integer> teacherIdSet = new HashSet<>();
+            if (musicGroupList != null && musicGroupList.size() > 0) {
+                musicGroupList.forEach(e -> {
+                    teacherIdSet.add(e.getTeamTeacherId());
+                    teacherIdSet.add(e.getEducationalTeacherId());
+                    teacherIdSet.add(e.getDirectorUserId());
+                });
+            }
+            teacherIdSet.remove(teacherId);
+            teacherIdSet.removeAll(Collections.singleton(null));
+            if (teacherIdSet.size() > 0) {
+                basicUserDtos.addAll(teacherDao.queryMusicGroupStudents(StringUtils.join(teacherIdSet, ","), search));
+            }
+        }
+
+        List<BasicUserDto> userDtos = teacherDao.queryGroupStudents(teacherId, search);
+        if (userDtos != null && userDtos.size() > 0) {
+            basicUserDtos.addAll(userDtos);
+            Set<String> musicGroupIds1 = userDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+            if (musicGroupIds1 != null && musicGroupIds1.size() > 0) {
+                Map<String, String> musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds1));
+                userDtos.forEach(e -> {
+                    e.setMusicGroupName(musicGroupNameMap.get(e.getMusicGroupId()));
+                });
+            }
+        }
+        studentIds.removeAll(userDtos.stream().map(e -> e.getUserId()).collect(Collectors.toSet()));
+        studentIds.remove(teacherId);
+        if (studentIds.size() > 0) {
+            basicUserDtos.addAll(teacherDao.queryTeacherBaseInfo(studentIds, search));
+        }
+
+        String syncImUserFriendKey = "syncImUserFriend:" + teacherId;
+        if (basicUserDtos.size() > 0) {
+            for (BasicUserDto basicUserDto : basicUserDtos) {
+                if (basicUserDto.getUserId().equals(teacherId)) {
+                    continue;
+                }
+                // 检查是否已经是好友
+                ImUserFriend userFriend = imUserFriendDao.query(teacherId, basicUserDto.getUserId());
+                if (userFriend != null) {
+                    continue;
+                }
+                imUserFriendDao.insertByBasicUser(basicUserDto, teacherId);
+            }
+            redisTemplate.opsForValue().setIfAbsent(syncImUserFriendKey, teacherId.toString());
+            return imUserFriendDao.queryFriendListByUserId(teacherId, search);
+        }
+        redisTemplate.opsForValue().setIfAbsent(syncImUserFriendKey, teacherId.toString());
+        return new ArrayList<>();
+    }
 
     @Override
     public List<TeacherBasicDto> findTeachers(String organId) {
-		return teacherDao.findByFlowOrganRangeTeachers(organId);
+        return teacherDao.findByFlowOrganRangeTeachers(organId);
     }
 
-	@Override
-	public List<Teacher> findOrganTeacherBySubject(Integer subjectId) {
-		return teacherDao.findOrganTeacherBySubject(subjectId);
-	}
-
-	@Override
-	public PageInfo<TeacherCloseDto> queryCloses(TeacherCloseQueryInfo queryInfo) {
-		PageInfo<TeacherCloseDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<TeacherCloseDto> dataList = null;
-		int count = teacherDao.countCloses(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryCloses(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public BigDecimal findTeacherNoPay(Integer teacherId) {
-		return teacherDao.findTeacherNoPay(teacherId);
-	}
-
-	@Override
-	public PageInfo<MusicGroupTeachersDto> queryMusicGroupTeachers(MusicGroupTeachersQueryInfo queryInfo) {
-		PageInfo<MusicGroupTeachersDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<MusicGroupTeachersDto> dataList = null;
-		int count = teacherDao.countMusicGroupTeachers(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryMusicGroupTeachers(params);
-			//获取教师id列表
-			Set<Integer> teacherIds = dataList.stream().map(e -> e.getTeacherId()).collect(Collectors.toSet());
-			//根据教师编号和班级编号,获取老师签到次数
-			Map<Integer,Integer> signNumMap =  JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(teacherDao.findSignNum(StringUtils.join(teacherIds,","),queryInfo.getMusicGroupId()))),HashMap.class);
-			dataList.forEach(e->{
-				e.setNum(signNumMap.get(e.getTeacherId()));
-			});
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public PageInfo<MusicGroupTeacherAttendanceDto> queryTeacherAttendance(MusicGroupTeacherAttendanceQueryInfo queryInfo) {
-		PageInfo<MusicGroupTeacherAttendanceDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<MusicGroupTeacherAttendanceDto> dataList = null;
-		int count = teacherDao.countTeacherAttendance(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryTeacherAttendance(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public PageInfo<MusicGroupStudentApplyDto> queryMusicGroupStudentApply(queryMusicGroupStudentQueryInfo queryInfo) {
-		PageInfo<MusicGroupStudentApplyDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<MusicGroupStudentApplyDto> dataList = null;
-		int count = teacherDao.countMusicGroupStudentApply(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryMusicGroupStudentApply(params);
-			String paymentStatus = queryInfo.getPaymentStatus();
-			if(StringUtils.isNotEmpty(paymentStatus) && paymentStatus.equals("2")){
-				List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.findStudentPaymentOrder(queryInfo.getMusicGroupId());
-				Map<Integer, List<StudentPaymentOrder>> collect = studentPaymentOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getUserId));
-				dataList.forEach(e->{
-					List<StudentPaymentOrder> paymentOrders = collect.get(e.getUserId());
-					
-					if(paymentOrders != null && paymentOrders.size() > 0){
-						e.setPaymentAmount(paymentOrders.stream().map(t -> t.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
-						e.setPayTime(paymentOrders.get(0).getPayTime());
-					}
-				});
-			}
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public List<Teacher> findTeacherByOrganId(String organId,String subjectIds,String jobNature) {
-		return teacherDao.findTeacherByOrganId(organId,subjectIds,jobNature);
-	}
-
-	@Override
-	public PageInfo<Teacher> queryPageName(TeacherNameQueryInfo queryInfo) {
-		PageInfo<Teacher> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<Teacher> dataList = null;
-		int count = teacherDao.countTeacherName(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryPageName(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public CourseHomework getCourseScheduleHomework(Integer courseScheduleId) {
-		return teacherDao.getCourseScheduleHomework(courseScheduleId);
-	}
-
-	@Override
-	public List<BasicUserDto> queryEducationIpa(Integer userId, String search) {
-		return queryGroupStudents(userId, search);
-	}
-
-	@Override
-	public List<BasicUserDto> queryMusicGroupTeacher(String musicGroupId) {
-		if(Objects.isNull(musicGroupId)){
-			throw new BizException("请指定乐团");
-		}
-		return teacherDao.findTeacherByMusicGroup(musicGroupId);
-	}
-
-	@Override
-	public PageInfo<Teacher> queryPageDetail(TeacherQueryInfo queryInfo) {
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-		PageInfo<Teacher> pageInfo = queryPage(queryInfo);
-		List<Teacher> rows = pageInfo.getRows();
-		if(rows != null && rows.size() > 0){
-			Set<Integer> teachers = rows.stream().map(e -> e.getId()).collect(Collectors.toSet());
-			String teacherIds = StringUtils.join(teachers, ",");
-			//获取小课数量
-			Map<Integer,Integer> vipNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(classGroupDao.countTeacherVipNum(teacherIds))),HashMap.class);
-			//获取试听课数量
-			Map<Integer,Integer> demoNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(demoGroupDao.countTeacherDemoGroupNum(teacherIds))),HashMap.class);
-
-			Set<Integer> organIds = rows.stream().map(e -> e.getTeacherOrganId()).collect(Collectors.toSet());
-			Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
-
-
-			for (Teacher e : rows) {
-				e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
-				e.setOrganName(organNames.get(e.getTeacherOrganId()));
-				if(StringUtils.isNotEmpty(e.getSplitSubjectName())){
-					e.setSubjectName(Arrays.asList(e.getSplitSubjectName().split(",")));
-				}
-				Integer num = vipNumMap.get(e.getId());
-				e.setVipNum(num == null?0:num);
-				Integer demoNum = demoNumMap.get(e.getId());
-				e.setDemoNum(demoNum == null?0:demoNum);
-			}
-		}
-		return pageInfo;
-	}
-
-	@Override
-	public Teacher getDetail(Integer id) {
-		Teacher teacher = teacherDao.get(id);
-		if(teacher != null){
-			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
-			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-			List<TeacherExercisesServiceDto> teacherExercisesServiceSituations = studentExtracurricularExercisesSituationDao.findTeacherExercisesServiceSituations(monDayDate.toString(), Arrays.asList(id));
-			Map<Integer, TeacherExercisesServiceDto> teacherServiceMap = new HashMap<>();
-			if(!CollectionUtils.isEmpty(teacherExercisesServiceSituations)){
-				teacherServiceMap = teacherExercisesServiceSituations.stream().collect(Collectors.toMap(TeacherExercisesServiceDto::getTeacherId, t -> t));
-			}
-
-			Map<Integer,String> operatingStudentsNum = MapUtil.convertMybatisMap(studentDao.getTeacherOperatingStudentsNum(id.toString()));
-			Map<Integer,String> practiceStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(id.toString(), GroupType.PRACTICE));
-			Map<Integer,String> vipStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(id.toString(), GroupType.VIP));
-			Map<Integer,String> practiceAndVipStudentsNum = MapUtil.convertMybatisMap(studentDao.getPracticeAndVipNums(id.toString()));
-
-			//获取老师教学点列表
-			List<School> teacherSchools = schoolDao.findByUserId(id);
-			teacher.setTeacherSchools(teacherSchools);
-			//获取流动范围
-			if(StringUtils.isNotEmpty(teacher.getFlowOrganRange())){
-				teacher.setFlowOrganRangeId(teacher.getFlowOrganRange());
-				List<String> organNames = organizationDao.findByOrganIds(teacher.getFlowOrganRange());
-				teacher.setFlowOrganRange(StringUtils.join(organNames,","));
-			}
-			if(teacher.getTeacherOrganId() != null){
-				Organization organization = organizationDao.get(teacher.getTeacherOrganId());
-				teacher.setOrganName(Objects.nonNull(organization)?organization.getName():null);
-			}
-			//专业技能
-			if(StringUtils.isNotEmpty(teacher.getSubjectId())){
-				teacher.setSubjectName(subjectDao.findBySubIds(teacher.getSubjectId()));
-			}
-
-			//服务指标
-			TeacherExercisesServiceDto teacherService = teacherServiceMap.get(id);
-			if(Objects.nonNull(teacherService)){
-				BigDecimal serviceIndex = new BigDecimal(teacherService.getActualExercisesNum()).multiply(new BigDecimal(100)).divide(new BigDecimal(teacherService.getExpectExercisesNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-				teacher.setServiceIndex(serviceIndex);
-			}else{
-				teacher.setServiceIndex(BigDecimal.ZERO);
-			}
-			//运营指标
-			String studentNum = operatingStudentsNum.get(id);
-			if(studentNum != null){
-				String practiceNum = practiceStudentsNum.get(id) ==null ? "0" : practiceStudentsNum.get(id);
-				String vipNum = vipStudentsNum.get(id) ==null ? "0" : vipStudentsNum.get(id);
-				String practiceAndVipNum = practiceAndVipStudentsNum.get(id) ==null ? "0" : practiceAndVipStudentsNum.get(id);
-				int allNum = Integer.parseInt(practiceNum) + Integer.parseInt(vipNum) - Integer.parseInt(practiceAndVipNum);
-				BigDecimal operatingIndex = new BigDecimal(allNum).multiply(new BigDecimal(100)).divide(new BigDecimal(studentNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-				teacher.setOperatingIndex(operatingIndex);
-			}else {
-				teacher.setOperatingIndex(BigDecimal.ZERO);
-			}
-		}
-		return teacher;
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg) {
-
-		SysUser user = teacherDao.getUser(userId);
-		if (user == null) {
-			throw new BizException("用户不存在");
-		}
-
-		Teacher teacher = teacherDao.get(userId);
-		if (teacher == null) {
-			throw new BizException("用户信息不存在");
-		}
-		// 查询是否已实名认证
-		if (StringUtils.isNotBlank(teacher.getIdcardBackImg()) && StringUtils.isNotBlank(teacher.getIdcardFrontImg())
-				&& StringUtils.isNotBlank(teacher.getIdcardHandImg())) {
-			throw new BizException("已实名认证,不能重复操作");
-		}
-
-		IdcardValidator validator = new IdcardValidator();
-		if (validator.isValidatedAllIdcard(idcardNo) == false) {
-			throw new BizException("身份证校验失败");
-		}
+    @Override
+    public List<Teacher> findOrganTeacherBySubject(Integer subjectId) {
+        return teacherDao.findOrganTeacherBySubject(subjectId);
+    }
+
+    @Override
+    public PageInfo<TeacherCloseDto> queryCloses(TeacherCloseQueryInfo queryInfo) {
+        PageInfo<TeacherCloseDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<TeacherCloseDto> dataList = null;
+        int count = teacherDao.countCloses(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryCloses(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public BigDecimal findTeacherNoPay(Integer teacherId) {
+        return teacherDao.findTeacherNoPay(teacherId);
+    }
+
+    @Override
+    public PageInfo<MusicGroupTeachersDto> queryMusicGroupTeachers(MusicGroupTeachersQueryInfo queryInfo) {
+        PageInfo<MusicGroupTeachersDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<MusicGroupTeachersDto> dataList = null;
+        int count = teacherDao.countMusicGroupTeachers(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryMusicGroupTeachers(params);
+            //获取教师id列表
+            Set<Integer> teacherIds = dataList.stream().map(e -> e.getTeacherId()).collect(Collectors.toSet());
+            //根据教师编号和班级编号,获取老师签到次数
+            Map<Integer, Integer> signNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(teacherDao.findSignNum(StringUtils.join(teacherIds, ","), queryInfo.getMusicGroupId()))), HashMap.class);
+            dataList.forEach(e -> {
+                e.setNum(signNumMap.get(e.getTeacherId()));
+            });
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<MusicGroupTeacherAttendanceDto> queryTeacherAttendance(MusicGroupTeacherAttendanceQueryInfo queryInfo) {
+        PageInfo<MusicGroupTeacherAttendanceDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<MusicGroupTeacherAttendanceDto> dataList = null;
+        int count = teacherDao.countTeacherAttendance(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryTeacherAttendance(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<MusicGroupStudentApplyDto> queryMusicGroupStudentApply(queryMusicGroupStudentQueryInfo queryInfo) {
+        PageInfo<MusicGroupStudentApplyDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<MusicGroupStudentApplyDto> dataList = null;
+        int count = teacherDao.countMusicGroupStudentApply(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryMusicGroupStudentApply(params);
+            String paymentStatus = queryInfo.getPaymentStatus();
+            if (StringUtils.isNotEmpty(paymentStatus) && paymentStatus.equals("2")) {
+                List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.findStudentPaymentOrder(queryInfo.getMusicGroupId());
+                Map<Integer, List<StudentPaymentOrder>> collect = studentPaymentOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getUserId));
+                dataList.forEach(e -> {
+                    List<StudentPaymentOrder> paymentOrders = collect.get(e.getUserId());
+
+                    if (paymentOrders != null && paymentOrders.size() > 0) {
+                        e.setPaymentAmount(paymentOrders.stream().map(t -> t.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
+                        e.setPayTime(paymentOrders.get(0).getPayTime());
+                    }
+                });
+            }
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public List<Teacher> findTeacherByOrganId(String organId, String subjectIds, String jobNature) {
+        return teacherDao.findTeacherByOrganId(organId, subjectIds, jobNature);
+    }
+
+    @Override
+    public PageInfo<Teacher> queryPageName(TeacherNameQueryInfo queryInfo) {
+        PageInfo<Teacher> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<Teacher> dataList = null;
+        int count = teacherDao.countTeacherName(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryPageName(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public CourseHomework getCourseScheduleHomework(Integer courseScheduleId) {
+        return teacherDao.getCourseScheduleHomework(courseScheduleId);
+    }
+
+    @Override
+    public List<BasicUserDto> queryEducationIpa(Integer userId, String search) {
+        return queryGroupStudents(userId, search);
+    }
+
+    @Override
+    public List<BasicUserDto> queryMusicGroupTeacher(String musicGroupId) {
+        if (Objects.isNull(musicGroupId)) {
+            throw new BizException("请指定乐团");
+        }
+        return teacherDao.findTeacherByMusicGroup(musicGroupId);
+    }
+
+    @Override
+    public PageInfo<Teacher> queryPageDetail(TeacherQueryInfo queryInfo) {
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        PageInfo<Teacher> pageInfo = queryPage(queryInfo);
+        List<Teacher> rows = pageInfo.getRows();
+        if (rows != null && rows.size() > 0) {
+            Set<Integer> teachers = rows.stream().map(e -> e.getId()).collect(Collectors.toSet());
+            String teacherIds = StringUtils.join(teachers, ",");
+            //获取小课数量
+            Map<Integer, Integer> vipNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(classGroupDao.countTeacherVipNum(teacherIds))), HashMap.class);
+            //获取试听课数量
+            Map<Integer, Integer> demoNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(demoGroupDao.countTeacherDemoGroupNum(teacherIds))), HashMap.class);
+
+            Set<Integer> organIds = rows.stream().map(e -> e.getTeacherOrganId()).collect(Collectors.toSet());
+            Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
+
+
+            for (Teacher e : rows) {
+                e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
+                e.setOrganName(organNames.get(e.getTeacherOrganId()));
+                if (StringUtils.isNotEmpty(e.getSplitSubjectName())) {
+                    e.setSubjectName(Arrays.asList(e.getSplitSubjectName().split(",")));
+                }
+                Integer num = vipNumMap.get(e.getId());
+                e.setVipNum(num == null ? 0 : num);
+                Integer demoNum = demoNumMap.get(e.getId());
+                e.setDemoNum(demoNum == null ? 0 : demoNum);
+            }
+        }
+        return pageInfo;
+    }
+
+    @Override
+    public Teacher getDetail(Integer id) {
+        Teacher teacher = teacherDao.get(id);
+        if (teacher != null) {
+            LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
+            LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+            List<TeacherExercisesServiceDto> teacherExercisesServiceSituations = studentExtracurricularExercisesSituationDao.findTeacherExercisesServiceSituations(monDayDate.toString(), Arrays.asList(id));
+            Map<Integer, TeacherExercisesServiceDto> teacherServiceMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(teacherExercisesServiceSituations)) {
+                teacherServiceMap = teacherExercisesServiceSituations.stream().collect(Collectors.toMap(TeacherExercisesServiceDto::getTeacherId, t -> t));
+            }
+
+            Map<Integer, String> operatingStudentsNum = MapUtil.convertMybatisMap(studentDao.getTeacherOperatingStudentsNum(id.toString()));
+            Map<Integer, String> practiceStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(id.toString(), GroupType.PRACTICE));
+            Map<Integer, String> vipStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(id.toString(), GroupType.VIP));
+            Map<Integer, String> practiceAndVipStudentsNum = MapUtil.convertMybatisMap(studentDao.getPracticeAndVipNums(id.toString()));
+
+            //获取老师教学点列表
+            List<School> teacherSchools = schoolDao.findByUserId(id);
+            teacher.setTeacherSchools(teacherSchools);
+            //获取流动范围
+            if (StringUtils.isNotEmpty(teacher.getFlowOrganRange())) {
+                teacher.setFlowOrganRangeId(teacher.getFlowOrganRange());
+                List<String> organNames = organizationDao.findByOrganIds(teacher.getFlowOrganRange());
+                teacher.setFlowOrganRange(StringUtils.join(organNames, ","));
+            }
+            if (teacher.getTeacherOrganId() != null) {
+                Organization organization = organizationDao.get(teacher.getTeacherOrganId());
+                teacher.setOrganName(Objects.nonNull(organization) ? organization.getName() : null);
+            }
+            //专业技能
+            if (StringUtils.isNotEmpty(teacher.getSubjectId())) {
+                teacher.setSubjectName(subjectDao.findBySubIds(teacher.getSubjectId()));
+            }
+
+            //服务指标
+            TeacherExercisesServiceDto teacherService = teacherServiceMap.get(id);
+            if (Objects.nonNull(teacherService)) {
+                BigDecimal serviceIndex = new BigDecimal(teacherService.getActualExercisesNum()).multiply(new BigDecimal(100)).divide(new BigDecimal(teacherService.getExpectExercisesNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+                teacher.setServiceIndex(serviceIndex);
+            } else {
+                teacher.setServiceIndex(BigDecimal.ZERO);
+            }
+            //运营指标
+            String studentNum = operatingStudentsNum.get(id);
+            if (studentNum != null) {
+                String practiceNum = practiceStudentsNum.get(id) == null ? "0" : practiceStudentsNum.get(id);
+                String vipNum = vipStudentsNum.get(id) == null ? "0" : vipStudentsNum.get(id);
+                String practiceAndVipNum = practiceAndVipStudentsNum.get(id) == null ? "0" : practiceAndVipStudentsNum.get(id);
+                int allNum = Integer.parseInt(practiceNum) + Integer.parseInt(vipNum) - Integer.parseInt(practiceAndVipNum);
+                BigDecimal operatingIndex = new BigDecimal(allNum).multiply(new BigDecimal(100)).divide(new BigDecimal(studentNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+                teacher.setOperatingIndex(operatingIndex);
+            } else {
+                teacher.setOperatingIndex(BigDecimal.ZERO);
+            }
+        }
+        return teacher;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg) {
+
+        SysUser user = teacherDao.getUser(userId);
+        if (user == null) {
+            throw new BizException("用户不存在");
+        }
+
+        Teacher teacher = teacherDao.get(userId);
+        if (teacher == null) {
+            throw new BizException("用户信息不存在");
+        }
+        // 查询是否已实名认证
+        if (StringUtils.isNotBlank(teacher.getIdcardBackImg()) && StringUtils.isNotBlank(teacher.getIdcardFrontImg())
+                && StringUtils.isNotBlank(teacher.getIdcardHandImg())) {
+            throw new BizException("已实名认证,不能重复操作");
+        }
+
+        IdcardValidator validator = new IdcardValidator();
+        if (validator.isValidatedAllIdcard(idcardNo) == false) {
+            throw new BizException("身份证校验失败");
+        }
 
         realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idcardNo);
 
-		Date date = new Date();
-
-		teacher.setIdcardBackImg(idcardBackImg);
-		teacher.setIdcardFrontImg(idcardFrontImg);
-		teacher.setIdcardHandImg(idcardHandImg);
-		teacher.setUpdateTime(date);
-		teacherDao.update(teacher);
-		
-		user.setRealName(realName);
-		user.setIdCardNo(idcardNo);
-		user.setUpdateTime(date);
-		teacherDao.updateUser(user);
-		
-		return true;
-	}
-
-	@Override
-	public PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo) {
-		PageInfo<BasicUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<BasicUserDto> dataList = null;
-		int count = teacherDao.countStudent(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryStudent(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList) {
-		return teacherDao.queryTeacherDefaultSalary(organIdList,TenantContextHolder.getTenantId());
-	}
-
-	@Override
-	public PageInfo<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo) {
-		PageInfo<TeacherMusicStudentOverViewDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<TeacherMusicStudentOverViewDto> dataList = null;
-		int count = teacherDao.countTeacherMusics(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			List<String> musicGroupIds = teacherDao.queryTeacherMusicIds(params);
-			dataList = musicGroupDao.queryTeacherMusicStudentOverView(musicGroupIds);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	public PageInfo<TeacherStudentDataDto> queryMemberStudentData(TeacherServeQueryInfo queryInfo) {
-		PageInfo<TeacherStudentDataDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<TeacherStudentDataDto> dataList = new ArrayList<>();
-		int count = teacherDao.countMemberStudentData(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryMemberStudentData(params);
-			List<Integer> teacherIds = dataList.stream().map(TeacherStudentDataDto::getTeacherId).collect(Collectors.toList());
-
-			List<Map<Integer, Integer>> teachersStudentNumMapList = studentDao.getOrganTeacherStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
-			Map<Integer, Long> teachersStudentNumMap = new HashMap<>();
-			if(!CollectionUtils.isEmpty(teachersStudentNumMapList)){
-				teachersStudentNumMap = MapUtil.convertIntegerMap(teachersStudentNumMapList);
-			}
-
-			List<Map<Integer, Integer>> teachersMemberStudentNumMapList = cloudTeacherDao.getTeachersMemberStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
-			Map<Integer, Long> teachersMemberStudentNumMap = new HashMap<>();
-			if(!CollectionUtils.isEmpty(teachersMemberStudentNumMapList)){
-				teachersMemberStudentNumMap = MapUtil.convertIntegerMap(teachersMemberStudentNumMapList);
-			}
-			List<Map<Integer, Integer>> teacherExperienceMemberStudentNumMapList = studentDao.getTeacherExperienceMemberStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
-			Map<Integer, Long> teacherExperienceMemberStudentNumMap = new HashMap<>();
-			if(!CollectionUtils.isEmpty(teacherExperienceMemberStudentNumMapList)){
-				teacherExperienceMemberStudentNumMap = MapUtil.convertIntegerMap(teacherExperienceMemberStudentNumMapList);
-			}
-			List<Map<Integer, Integer>> organTeacherCloudStudyStudentNumMapList = studentDao.getOrganTeacherCloudStudyStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
-			Map<String, Long> organTeacherCloudStudyStudentNumMap = new HashMap<>();
-			if(!CollectionUtils.isEmpty(organTeacherCloudStudyStudentNumMapList)){
-				organTeacherCloudStudyStudentNumMap = MapUtil.convertIntegerMap(organTeacherCloudStudyStudentNumMapList);
-			}
-			for (TeacherStudentDataDto teacherStudentDataDto : dataList) {
-				if(teachersStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
-					teacherStudentDataDto.setTotalStudentNum(teachersStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
-				}
-				if(teachersMemberStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
-					teacherStudentDataDto.setVipStudentNum(teachersMemberStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
-				}
-				if(teacherExperienceMemberStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
-					teacherStudentDataDto.seteVipStudentNum(teacherExperienceMemberStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
-				}
-				if(teacherStudentDataDto.getVipStudentNum()>0&&teacherStudentDataDto.getTotalStudentNum()>0){
-					teacherStudentDataDto.setVipStudentDuty(new BigDecimal(teacherStudentDataDto.getVipStudentNum()).divide(new BigDecimal(teacherStudentDataDto.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
-				}
-				if(organTeacherCloudStudyStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
-					teacherStudentDataDto.setCloudStudyUseStudentNum(organTeacherCloudStudyStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
-				}
-				if(teacherStudentDataDto.getCloudStudyUseStudentNum()>0&&teacherStudentDataDto.getTotalStudentNum()>0){
-					teacherStudentDataDto.setCloudStudyUseStudentDuty(new BigDecimal(teacherStudentDataDto.getCloudStudyUseStudentNum()).divide(new BigDecimal(teacherStudentDataDto.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
-				}
-			}
-		}
-		pageInfo.setStatInfo(new HashMap<String, Object>(){{put("noTeacherStudentNum", studentDao.getOrganNoTeacherStudentNum(Integer.valueOf(queryInfo.getOrganId())));}});
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
+        Date date = new Date();
+
+        teacher.setIdcardBackImg(idcardBackImg);
+        teacher.setIdcardFrontImg(idcardFrontImg);
+        teacher.setIdcardHandImg(idcardHandImg);
+        teacher.setUpdateTime(date);
+        teacherDao.update(teacher);
+
+        user.setRealName(realName);
+        user.setIdCardNo(idcardNo);
+        user.setUpdateTime(date);
+        teacherDao.updateUser(user);
+
+        return true;
+    }
+
+    @Override
+    public PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo) {
+        PageInfo<BasicUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<BasicUserDto> dataList = null;
+        int count = teacherDao.countStudent(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryStudent(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList) {
+        return teacherDao.queryTeacherDefaultSalary(organIdList, TenantContextHolder.getTenantId());
+    }
+
+    @Override
+    public PageInfo<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo) {
+        PageInfo<TeacherMusicStudentOverViewDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<TeacherMusicStudentOverViewDto> dataList = null;
+        int count = teacherDao.countTeacherMusics(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            List<String> musicGroupIds = teacherDao.queryTeacherMusicIds(params);
+            dataList = musicGroupDao.queryTeacherMusicStudentOverView(musicGroupIds);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<TeacherStudentDataDto> queryMemberStudentData(TeacherServeQueryInfo queryInfo) {
+        PageInfo<TeacherStudentDataDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<TeacherStudentDataDto> dataList = new ArrayList<>();
+        int count = teacherDao.countMemberStudentData(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryMemberStudentData(params);
+            List<Integer> teacherIds = dataList.stream().map(TeacherStudentDataDto::getTeacherId).collect(Collectors.toList());
+
+            List<Map<Integer, Integer>> teachersStudentNumMapList = studentDao.getOrganTeacherStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
+            Map<Integer, Long> teachersStudentNumMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(teachersStudentNumMapList)) {
+                teachersStudentNumMap = MapUtil.convertIntegerMap(teachersStudentNumMapList);
+            }
+
+            List<Map<Integer, Integer>> teachersMemberStudentNumMapList = cloudTeacherDao.getTeachersMemberStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
+            Map<Integer, Long> teachersMemberStudentNumMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(teachersMemberStudentNumMapList)) {
+                teachersMemberStudentNumMap = MapUtil.convertIntegerMap(teachersMemberStudentNumMapList);
+            }
+            List<Map<Integer, Integer>> teacherExperienceMemberStudentNumMapList = studentDao.getTeacherExperienceMemberStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
+            Map<Integer, Long> teacherExperienceMemberStudentNumMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(teacherExperienceMemberStudentNumMapList)) {
+                teacherExperienceMemberStudentNumMap = MapUtil.convertIntegerMap(teacherExperienceMemberStudentNumMapList);
+            }
+            List<Map<Integer, Integer>> organTeacherCloudStudyStudentNumMapList = studentDao.getOrganTeacherCloudStudyStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
+            Map<String, Long> organTeacherCloudStudyStudentNumMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(organTeacherCloudStudyStudentNumMapList)) {
+                organTeacherCloudStudyStudentNumMap = MapUtil.convertIntegerMap(organTeacherCloudStudyStudentNumMapList);
+            }
+            for (TeacherStudentDataDto teacherStudentDataDto : dataList) {
+                if (teachersStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())) {
+                    teacherStudentDataDto.setTotalStudentNum(teachersStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+                }
+                if (teachersMemberStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())) {
+                    teacherStudentDataDto.setVipStudentNum(teachersMemberStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+                }
+                if (teacherExperienceMemberStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())) {
+                    teacherStudentDataDto.seteVipStudentNum(teacherExperienceMemberStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+                }
+                if (teacherStudentDataDto.getVipStudentNum() > 0 && teacherStudentDataDto.getTotalStudentNum() > 0) {
+                    teacherStudentDataDto.setVipStudentDuty(new BigDecimal(teacherStudentDataDto.getVipStudentNum()).divide(new BigDecimal(teacherStudentDataDto.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+                }
+                if (organTeacherCloudStudyStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())) {
+                    teacherStudentDataDto.setCloudStudyUseStudentNum(organTeacherCloudStudyStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+                }
+                if (teacherStudentDataDto.getCloudStudyUseStudentNum() > 0 && teacherStudentDataDto.getTotalStudentNum() > 0) {
+                    teacherStudentDataDto.setCloudStudyUseStudentDuty(new BigDecimal(teacherStudentDataDto.getCloudStudyUseStudentNum()).divide(new BigDecimal(teacherStudentDataDto.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+                }
+            }
+        }
+        pageInfo.setStatInfo(new HashMap<String, Object>() {{
+            put("noTeacherStudentNum", studentDao.getOrganNoTeacherStudentNum(Integer.valueOf(queryInfo.getOrganId())));
+        }});
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 
     @Override
     public PageInfo<SysUserDto> queryTeacherBasicInfo(UserBasicQueryInfo queryInfo) {
-		PageInfo<SysUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<SysUserDto> dataList = null;
-		int count = teacherDao.countTeacherBasicInfo(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = teacherDao.queryTeacherBasicInfo(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
+        PageInfo<SysUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<SysUserDto> dataList = null;
+        int count = teacherDao.countTeacherBasicInfo(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryTeacherBasicInfo(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    /**
+     * 查询老师主分部下所有学生
+     *
+     * @param param 参数
+     *              <p>  search 模糊搜索
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    @Override
+    public PageInfo<BasicUserDto> getStudentsByTeacherOrgan(Map<String, Object> param) {
+        Page<BasicUserDto> pageInfo = PageUtil.getPageInfo(param);
+        pageInfo.setAsc("b.id_");
+        return PageUtil.pageInfo(teacherDao.getStudentsByTeacherOrgan(pageInfo, param));
     }
+
 }

+ 24 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1473,4 +1473,28 @@
             </if>
         </where>
     </sql>
+
+    <select id="getStudentsByTeacherOrgan" resultType="com.ym.mec.biz.dal.dto.BasicUserDto">
+        select b.id_ as userId,
+        b.organ_id_ as organId,
+        b.username_ as name,
+        b.avatar_ as headUrl,
+        b.phone_ as phone,
+        b.user_type_ as userType
+        from teacher as a
+        left join sys_user as b on a.organ_id_ = b.organ_id_
+        <where>
+            a.id_ = #{param.teacherId}
+            and b.id_ <![CDATA[ <> ]]>  #{param.teacherId}
+                and find_in_set('STUDENT', user_type_)
+            <if test="param.search != null and param.search != ''">
+                AND (b.id_ LIKE CONCAT('%', #{param.search}, '%')
+                OR b.username_ LIKE CONCAT('%', #{param.search}, '%')
+                OR b.phone_ LIKE CONCAT('%', #{param.search}, '%')
+                )
+            </if>
+        </where>
+
+    </select>
+
 </mapper>

+ 26 - 26
mec-teacher/src/main/java/com/ym/mec/teacher/config/ResourceServerConfig.java

@@ -1,5 +1,7 @@
 package com.ym.mec.teacher.config;
 
+import com.ym.mec.common.security.BaseAccessDeniedHandler;
+import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@@ -8,36 +10,34 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.E
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
 
-import com.ym.mec.common.security.BaseAccessDeniedHandler;
-import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
-
 @Configuration
 @EnableResourceServer
 @EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
-	@Autowired
-	private BaseAccessDeniedHandler baseAccessDeniedHandler;
-
-	@Autowired
-	private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
-
-	@Override
-	public void configure(HttpSecurity http) throws Exception {
-		http.csrf()
-				.disable()
-				.exceptionHandling()
-				.accessDeniedHandler(baseAccessDeniedHandler)
-				.authenticationEntryPoint(baseAuthenticationEntryPoint)
-				.and()
-				.authorizeRequests()
-				.antMatchers("/v2/api-docs", "/code/*", "/teacher/queryStudentApply", "/teacher/querySubByMusicGroupId", "/studentRegistration/updateSubject",
-						"/studyReport/createEvaluate", "/teacherOrder/*","/teacher/getRegisterOrPreList","/teacherContract/callback").permitAll().anyRequest().authenticated().and().httpBasic();
-	}
-
-	@Override
-	public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
-		resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
-	}
+    @Autowired
+    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+
+    @Autowired
+    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.csrf()
+                .disable()
+                .exceptionHandling()
+                .accessDeniedHandler(baseAccessDeniedHandler)
+                .authenticationEntryPoint(baseAuthenticationEntryPoint)
+                .and()
+                .authorizeRequests()
+                .antMatchers("/v2/api-docs", "/code/*", "/teacher/queryStudentApply", "/teacher/querySubByMusicGroupId", "/studentRegistration/updateSubject",
+                        "/studyReport/createEvaluate", "/teacherOrder/*", "/teacher/getRegisterOrPreList", "/teacherContract/callback", "/eduPracticeGroup/queryOrderInfo")
+                .permitAll().anyRequest().authenticated().and().httpBasic();
+    }
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+    }
 
 }

+ 43 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/EduContractsController.java

@@ -0,0 +1,43 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.09.24
+ */
+@RequestMapping("eduContracts")
+@Api(tags = "协议服务")
+@RestController
+public class EduContractsController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private ContractService contractService;
+
+    @ApiOperation("查询产品协议")
+    @GetMapping(value = "queryProduceContract")
+    public Object queryProduceContract(Integer userId, String musicGroupId, CourseViewTypeEnum courseViewType) {
+        if(Objects.isNull(userId)){
+            SysUser sysUser = sysUserFeignService.queryUserInfo();
+            if (sysUser == null) {
+                return failed("获取用户信息失败");
+            }
+            userId = sysUser.getId();
+        }
+        return succeed(contractService.queryProductContract(userId,musicGroupId, courseViewType));
+    }
+}

+ 31 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/EduPracticeGroupController.java

@@ -0,0 +1,31 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.service.PracticeGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/1/31
+ */
+@RequestMapping("eduPracticeGroup")
+@Api(tags = "陪练课服务")
+@RestController
+public class EduPracticeGroupController extends BaseController {
+
+    @Autowired
+    private PracticeGroupService practiceGroupService;
+
+    @ApiOperation("查询订单信息")
+    @GetMapping(value = "/queryOrderInfo")
+    public HttpResponseResult queryOrderInfo(String orderNo) {
+        return succeed(practiceGroupService.queryOrderInfo(orderNo));
+    }
+
+}

+ 134 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/EduRepairController.java

@@ -0,0 +1,134 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.entity.StudentGoodsSell;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.page.GoodsCategoryQueryInfo;
+import com.ym.mec.biz.dal.page.GoodsQueryInfo;
+import com.ym.mec.biz.dal.page.GoodsSellQueryInfo;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@RequestMapping("eduRepair")
+@Api(tags = "教务维修服务")
+@RestController
+public class EduRepairController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private StudentRepairService studentRepairService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private GoodsCategoryService goodsCategoryService;
+    @Autowired
+    private StudentGoodsSellService studentGoodsSellService;
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "关键字"),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("查询老师主分部下所有学生")
+    @PostMapping(value = "/getStudentsByTeacherOrgan")
+    public HttpResponseResult<PageInfo<BasicUserDto>> getStudentsByTeacherOrgan(@RequestBody Map<String, Object> param) {
+        return succeed(studentRepairService.getStudentsByTeacherOrgan(param));
+    }
+
+    @ApiOperation("添加商品销售订单")
+    @PostMapping(value = "/addGoodsSellOrder")
+    public HttpResponseResult addGoodsSellOrder(@RequestBody StudentGoodsSell studentGoodsSell) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("请登录");
+        }
+        if (studentGoodsSell.getIsRepeatPay() == false) {
+            List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.GOODS_SELL, null, studentGoodsSell.getUserId(), DealStatusEnum.ING,
+                    OrderTypeEnum.RENEW);
+            if (list.size() > 0) {
+                return failed(HttpStatus.CONTINUE, "该学员有待支付的订单");
+            }
+        }
+        studentGoodsSell.setTeacherId(sysUser.getId());
+        studentGoodsSell.setAuthorUser(sysUser.getId());
+        Map map = studentRepairService.addGoodsSellOrder(studentGoodsSell);
+        if (map.containsKey("tradeState")) {
+            return failed(HttpStatus.CREATED, map, "恭喜您,购买成功!");
+        }
+        return succeed(map);
+    }
+
+    @ApiOperation("获取学生信息")
+    @GetMapping(value = "/getStudentInfo")
+    public HttpResponseResult getStudentInfo(Integer studentId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(studentRepairService.getStudentInfo(studentId));
+    }
+
+    @ApiOperation(value = "分页查询商品(教材、辅件)列表")
+    @GetMapping("/queryGoodsPage")
+    public Object queryPage(GoodsQueryInfo queryInfo) {
+        queryInfo.setOrganId(null);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Teacher teacher = teacherService.get(sysUser.getId());
+        if (queryInfo.getStudentShowOrganId() == null &&
+                queryInfo.getEducationShowOrganId() == null &&
+                queryInfo.getCourseFeeShowOrganId() == null &&
+                queryInfo.getMemberFeeShowOrganId() == null &&
+                queryInfo.getReplacementShowOrganId() == null) {
+            queryInfo.setEducationShowOrganId(teacher.getOrganId().toString());
+        } else if (Objects.isNull(teacher.getOrganId())) {
+            return failed("用户所在分部异常");
+        }
+        return succeed(goodsService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "分页查询商品分类列表")
+    @GetMapping("/queryGoodsCategoryPage")
+    public Object queryGoodsCategoryPage(GoodsCategoryQueryInfo queryInfo) {
+        return succeed(goodsCategoryService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "分页查询教务老师关联的学员商品订单")
+    @GetMapping("/queryStudentGoodsOrders")
+    public Object queryStudentGoodsOrders(GoodsSellQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(studentGoodsSellService.queryStudentGoodsOrders(queryInfo));
+    }
+
+}

+ 32 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/EduSysCouponCodeController.java

@@ -0,0 +1,32 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
+import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
+import com.ym.mec.biz.service.SysCouponCodeService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("eduSysCouponCode")
+@Api(tags = "优惠券明细")
+@RestController
+public class EduSysCouponCodeController extends BaseController {
+
+	@Autowired
+	private SysCouponCodeService sysCouponCodeService;
+
+	@ApiOperation("分页查询")
+	@RequestMapping(value = "queryPage")
+	public HttpResponseResult<PageInfo<SysCouponCodeDto>> queryPage(SysCouponCodeQueryInfo queryInfo) {
+		if(queryInfo.getUserId() == null){
+			throw new BizException("请指定学员");
+		}
+		return succeed(sysCouponCodeService.querySysCouponUseList(queryInfo));
+	}
+}

+ 40 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/GoodsController.java

@@ -0,0 +1,40 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.GoodsCategory;
+import com.ym.mec.biz.service.GoodsCategoryService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+@RequestMapping("goods")
+@Api(tags = "商品(教材、辅件)服务")
+@RestController
+public class GoodsController extends BaseController {
+
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private GoodsCategoryService goodsCategoryService;
+
+    @ApiOperation(value = "根据商品(教材、辅件)编号查询商品(教材、辅件)")
+    @GetMapping("/get/{id}")
+    public Object get(@ApiParam(value = "商品(教材、辅件)编号", required = true) @PathVariable("id") Integer id) {
+        Goods goods = goodsService.getDetail(id);
+        GoodsCategory goodsCategory = goodsCategoryService.get(goods.getGoodsCategoryId());
+        if (Objects.nonNull(goodsCategory)) {
+            goods.setGoodsCategoryName(goodsCategory.getName());
+        }
+        return succeed(goods);
+    }
+
+}

+ 30 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudentController.java

@@ -0,0 +1,30 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Optional;
+
+@Api(tags = "学生管理")
+@RequestMapping("/student")
+@RestController
+public class StudentController extends BaseController {
+
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
+
+    @ApiOperation(value = "获取学员账户信息")
+    @GetMapping("/userCashAccount/get")
+    public Object getStudentCashAccount(Integer id) {
+        Optional.ofNullable(id).orElseThrow(() -> new BizException("学生id不能为空!"));
+        return succeed(sysUserCashAccountService.get(id));
+    }
+
+}