소스 검색

Merge branch 'feature/0721-tenant' of http://git.dayaedu.com/yonge/cooleshow into feature/0721-tenant

liujc 2 년 전
부모
커밋
395284bdc1
31개의 변경된 파일500개의 추가작업 그리고 85개의 파일을 삭제
  1. 3 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantInfoController.java
  2. 27 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindRecordController.java
  3. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMusicCompareRecordDao.java
  4. 5 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherSearch.java
  5. 0 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindRecord.java
  6. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantInfoMapper.java
  7. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java
  8. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMusicCompareRecordService.java
  9. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantInfoService.java
  10. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  11. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java
  12. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  13. 34 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  14. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
  15. 16 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/StudentWrapper.java
  16. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantInfoWrapper.java
  17. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindRecordWrapper.java
  18. 31 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java
  19. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  20. 24 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  21. 5 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  22. 10 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  23. 68 12
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  24. 54 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  25. 4 28
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/IndexController.java
  26. 4 4
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  27. 52 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/SysMusicCompareRecordController.java
  28. 24 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java
  29. 54 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/WechatMusicCompareRecordController.java
  30. 3 2
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  31. 6 3
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/StudentVo.java

+ 3 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantInfoController.java

@@ -51,7 +51,8 @@ public class TenantInfoController extends BaseController {
     @ApiOperation(value = "修改", notes = "传入TenantInfo")
     @PreAuthorize("@pcs.hasPermissions('tenantInfo/update')")
     public HttpResponseResult<Boolean> updateTenantInfo(@Valid @RequestBody  TenantInfo info) {
-        return tenantInfoService.updateTenantInfo(info);
+
+        return succeed(tenantInfoService.updateTenantInfo(info));
     }
 
 
@@ -62,7 +63,7 @@ public class TenantInfoController extends BaseController {
     @ApiOperation(value = "更新", notes = "传入TenantInfo")
     @PreAuthorize("@pcs.hasPermissions('tenantInfo/insert')")
     public HttpResponseResult<Boolean> insertTenantInfo(@Validated(TenantInfo.class) @RequestBody TenantInfo info) {
-        return tenantInfoService.add(info);
+        return succeed(tenantInfoService.add(info));
     }
 
 

+ 27 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindRecordController.java

@@ -4,10 +4,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
 import com.yonge.cooleshow.biz.dal.service.EmployeeService;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
 import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
@@ -52,6 +57,12 @@ public class TenantUnbindRecordController extends BaseController {
     @Autowired
     private EmployeeService employeeService;
 
+    @Autowired
+    private StudentService studentService;
+
+    @Autowired
+    private TeacherService teacherService;
+
 
     @ApiOperation(value = "查询分页", notes = "机构解绑申请记录- 传入 TenantUnbindRecordVo.TenantUnbindRecordQuery")
     @PostMapping("/page")
@@ -85,7 +96,8 @@ public class TenantUnbindRecordController extends BaseController {
     @ApiOperation(value = "审核")
     @PostMapping("/audit")
     public HttpResponseResult<Boolean> audit(@RequestBody TenantUnbindRecordWrapper.Audio audio) {
-        if (sysUserFeignService.queryUserInfo() == null) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
             throw new BizException("请登录");
         }
         EmployeeVo employeeVo = employeeService.detail(sysUserFeignService.queryUserInfo().getId());
@@ -106,6 +118,20 @@ public class TenantUnbindRecordController extends BaseController {
         if (!update) {
             throw new BizException("审核失败,请刷新后重试");
         }
+
+        if (audio.getStatus()) {
+            TenantUnbindRecord unbindRecord = tenantUnbindRecordService.getById(audio.getId());
+            String userType = unbindRecord.getUserType();
+            if ("STUDENT".equals(userType)) {
+                studentService.lambdaUpdate()
+                        .set(Student::getTenantId, -1L)
+                        .eq(Student::getUserId, unbindRecord.getUserId()).update();
+            } else if ("TEACHER".equals(userType)) {
+                teacherService.lambdaUpdate()
+                        .set(Teacher::getTenantId, -1L)
+                        .eq(Teacher::getUserId, unbindRecord.getUserId()).update();
+            }
+        }
         return succeed();
     }
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -57,4 +57,7 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
 	int countStudentTrain(Map<String, Object> params);
 
 	SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordStat studentMusicCompareRecordStat(@Param("query") SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query);
+
+	//学生端训练统计
+	SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordDto studentTrainStat(@Param("query") SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query);
 }

+ 5 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherSearch.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.ESettlementFrom;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
@@ -65,8 +66,11 @@ public class TeacherSearch extends QueryInfo{
 	@ApiModelProperty("机构ID")
 	private Long tenantId;
 
+	@ApiModelProperty("机构名称")
+	private String tenantName;
+
 	@ApiModelProperty("结算方式")
-	private String settlementFrom;
+	private ESettlementFrom settlementFrom;
 
 	@ApiModelProperty(value = "排序方式, 默认 create_time_ desc", hidden = true)
 	private String orderBy;

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

@@ -34,10 +34,6 @@ public class TenantUnbindRecord implements Serializable {
     @TableField(value = "user_id_")
     private Long userId;
 
-    @ApiModelProperty("手机号")
-    @TableField(value = "phone_")
-    private String phone;
-
     @ApiModelProperty("用户类型")
     @TableField(value = "user_type_")
     private String userType;

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantInfoMapper.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.mapper;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -41,4 +42,8 @@ public interface TenantInfoMapper extends BaseMapper<TenantInfo> {
 	Boolean updateMethod(@Param("id") Integer id);
 
 	Boolean insertInfo(@Param("param") TenantInfo tenantInfo);
+
+	List<Integer> queryTeacherCounts(@Param("listId") List<Integer> listId);
+
+	List<Integer> queryStudentCounts(@Param("listId") List<Integer> listId);
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java

@@ -177,4 +177,19 @@ public class SysMusicCompareRecordQueryInfo {
         @ApiModelProperty("练习天数")
         private int trainDays;
     }
+    @Data
+    public static class StudentMusicCompareRecordDto{
+
+        @ApiModelProperty("平均练习时长(秒)")
+        private Integer avgTrainTime = 0;
+
+        @ApiModelProperty("练习时长(秒)")
+        private Integer trainTime = 0;
+
+        @ApiModelProperty("练习天数")
+        private Integer trainDays = 0;
+
+        @ApiModelProperty("练习次数")
+        private Integer trainNum = 0;
+    }
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMusicCompareRecordService.java

@@ -55,4 +55,7 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
 
     //学员训练统计以及基本信息查询
     SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordStat studentMusicCompareRecordStat(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query);
+
+    //学生端,学员训练统计
+    SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordDto studentTrainStat(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query);
 }

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

@@ -35,14 +35,14 @@ public interface TenantInfoService extends IService<TenantInfo>  {
      * @param tenantInfo TenantInfoWrapper.TenantInfo
      * @return Boolean
      */
-    HttpResponseResult<Boolean> add(TenantInfo tenantInfo);
+    Boolean add(TenantInfo tenantInfo);
 
     /**
      * 更新
      * @param info TenantInfoWrapper.TenantInfo
      * @return Boolean
      */
-    HttpResponseResult<Boolean> updateTenantInfo(TenantInfo info);
+    Boolean updateTenantInfo(TenantInfo info);
 
     /**
      * 机构信息

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

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
@@ -47,6 +48,7 @@ import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -441,6 +443,10 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             sysUser.setGender(studentInfo.getGender());
             sysUser.setUserType("STUDENT");
             sysUser.setBirthdate(studentInfo.getBirthdate());
+
+            String newPassword = MessageFormat.format("klx{0}", studentInfo.getPhone().substring(7));
+            String password = new BCryptPasswordEncoder().encode(newPassword);
+            sysUser.setPassword(password);
             sysUserMapper.insert(sysUser);
         }
         return sysUser;

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

@@ -436,6 +436,15 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		return vo;
 	}
 
+	@Override
+	public SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordDto studentTrainStat(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query) {
+		SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordDto dto = sysMusicCompareRecordDao.studentTrainStat(query);
+		if(Objects.nonNull(dto) && dto.getTrainTime() > 0 && dto.getTrainDays() > 0){
+			dto.setAvgTrainTime((int)(dto.getTrainTime() / dto.getTrainDays().doubleValue() * 100));
+		}
+		return sysMusicCompareRecordDao.studentTrainStat(query);
+	}
+
 
 	private String getExpireTime() {
 

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

@@ -131,6 +131,15 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         String teacherType = TeacherTypeEnum.getTeacherType(detail.getEntryFlag(), detail.getMusicianFlag());
         detail.setTeacherType(teacherType);
+        Long tenantId = detail.getTenantId();
+        if (tenantId != null) {
+            if (tenantId == -1) {
+                detail.setTenantName("平台老师");
+            } else {
+                TenantInfo tenantInfo = tenantInfoService.detail(tenantId);
+                detail.setTenantName(tenantInfo == null ? "" : tenantInfo.getName());
+            }
+        }
         return detail;
     }
 
@@ -356,6 +365,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (null == teacher) {
             teacher = new Teacher();
             teacher.setUserId(teacherSubmitReq.getUserId());
+            // 新增老师默认结算给机构
+            teacherSubmitReq.setSettlementFrom(ESettlementFrom.TENANT);
             teacher = getTeacherDetil(teacher, teacherSubmitReq);
             baseMapper.insert(teacher);
 
@@ -464,7 +475,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacher.setTenantId(teacherSubmitReq.getTenantId() == null ? -1L : teacherSubmitReq.getTenantId());
         if (teacher.getTenantId() == -1L) {
             teacher.setSettlementFrom(ESettlementFrom.TEACHER);
-        } else {
+        } else if (teacherSubmitReq.getIsSettlement() != null) {
             teacher.setSettlementFrom(teacherSubmitReq.getSettlementFrom());
         }
         if (StringUtil.isEmpty(teacherSubmitReq.getTeacherType())) {

+ 34 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantInfoWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantInfoMapper;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -60,6 +61,34 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
 
         //分页查询
         List<TenantInfoWrapper.TenantInfo> tenantInfos = baseMapper.selectPage(page, query);
+        //获取id
+        ArrayList<Integer> listId = new ArrayList<>();
+        for (int i = 0; i < tenantInfos.size(); i++) {
+            TenantInfoWrapper.TenantInfo info = tenantInfos.get(i);
+            Integer id = info.getId();
+            listId.add(i,id);
+        }
+        //查询对应机构的老师数量
+        List<Integer> listTeacher = new ArrayList<>();
+        //查询对应机构的学生数量
+        List<Integer> listStudent = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(listId)){
+             listTeacher = tenantInfoMapper.queryTeacherCounts(listId);
+             listStudent = tenantInfoMapper.queryStudentCounts(listId);
+        }
+
+
+        for (int j = 0; j < tenantInfos.size(); j++) {
+            TenantInfoWrapper.TenantInfo tenantInfo = tenantInfos.get(j);
+            for (int z = 0; z < listTeacher.size(); z++) {
+                tenantInfo.setTeacherCounts(listTeacher.get(z).toString());
+            }
+            for (int t = 0; t < listStudent.size(); t++) {
+                tenantInfo.setStudentCounts(listStudent.get(t).toString());
+            }
+        }
+
+
         //获取省市区信息
         List<Integer> areaCodeList = tenantInfos.stream().map(next -> {
             Set<Integer> codes = new HashSet<>();
@@ -81,7 +110,6 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             next.setProvinceName(codeNameMap.getOrDefault(next.getProvinceCode(), ""));
             next.setCityName(codeNameMap.getOrDefault(next.getCityCode(), ""));
             next.setRegionName(codeNameMap.getOrDefault(next.getRegionCode(), ""));
-//            next.setSchoolName(schoolIdNameMap.getOrDefault(next.getSchoolId(), ""));
         }
         return page.setRecords(tenantInfos);
     }
@@ -92,9 +120,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
      * @return Boolean
      */
     @Override
-    public HttpResponseResult<Boolean> add(TenantInfo tenantInfo) {
+    public Boolean add(TenantInfo tenantInfo) {
         Boolean bool = tenantInfoMapper.insertInfo(tenantInfo);
-        return HttpResponseResult.succeed(bool);
+        return bool;
     }
 	
 
@@ -140,6 +168,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
      * @param query TenantInfoWrapper.TenantInfo
      * @return Boolean
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean state(TenantInfoWrapper.TenantInfoQuery query) {
         Boolean flag;
@@ -177,9 +206,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
      * @return Boolean
      */
     @Override
-    public HttpResponseResult<Boolean> updateTenantInfo(TenantInfo info) {
+    public Boolean updateTenantInfo(TenantInfo info) {
         Boolean bool = tenantInfoMapper.updateInfo(info);
-        return HttpResponseResult.succeed(bool);
+        return bool;
     }
 
 

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java

@@ -23,6 +23,8 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     private static final long serialVersionUID = 1L;
     @ApiModelProperty("头像地址")
     private String heardUrl;
+    @ApiModelProperty("机构名称")
+    private String tenantName;
     @ApiModelProperty("老师昵称")
     private String username;
     @ApiModelProperty("星级")
@@ -85,6 +87,13 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     @ApiModelProperty(value = "IM用户ID")
     private String imUserId;
 
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
 
     public String getDefaultSubjectName() {
         return defaultSubjectName;

+ 16 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/StudentWrapper.java

@@ -91,7 +91,7 @@ public class StudentWrapper {
         @ApiModelProperty("id")
         private Long id;
 
-        @ApiModelProperty("机构ID")
+        @ApiModelProperty("所属机构,开放接口必填")
         private Long tenantId;
 
         @ApiModelProperty("姓名")
@@ -106,11 +106,25 @@ public class StudentWrapper {
         @ApiModelProperty("手机号码")
         private String phone;
 
+        @ApiModelProperty("头像")
+        private String avatar;
+
         @ApiModelProperty("声部,多个用逗号隔开")
         private String subjectId;
 
-        @ApiModelProperty("是否绑定机构,0:解绑,1:不解绑")
+        @ApiModelProperty("是否解绑")
         private Boolean bindTenant;
 
     }
+
+    @Data
+    @ApiModel("解绑机构")
+    public static class UnbindTenant{
+
+        @ApiModelProperty("短信验证码")
+        private String code;
+
+        @ApiModelProperty("解绑原因")
+        private String unbindReason;
+    }
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantInfoWrapper.java

@@ -73,6 +73,9 @@ public class TenantInfoWrapper {
     @AllArgsConstructor
     @ApiModel(" TenantInfo-机构表分页响应")
     public static class TenantInfo {
+        @ApiModelProperty("id")
+        private Integer id;
+
         @ApiModelProperty("机构名称")
         private String name;
 
@@ -115,6 +118,12 @@ public class TenantInfoWrapper {
         @ApiModelProperty("地区街道名称")
         private String regionName;
 
+        @ApiModelProperty("当前页")
+        private int page;
+
+        @ApiModelProperty("分页行数")
+        private int rows;
+
 
         
         public String jsonString() {

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindRecordWrapper.java

@@ -154,7 +154,7 @@ public class TenantUnbindRecordWrapper {
         @ApiModelProperty("审核记录的ID")
         private Long id;
 
-        @ApiModelProperty("审核状态")
+        @ApiModelProperty("审核状态,true:通过,false:驳回")
         private Boolean status;
 
         @ApiModelProperty("审核理由")

+ 31 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.biz.dal.wrapper.teacher;
 
 import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.common.enums.ESettlementFrom;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -11,6 +14,8 @@ import java.io.Serializable;
 /**
  * Created by Eric.Shang on 2022/10/8.
  */
+@Data
+@ApiModel("TeacherWrapper")
 public class TeacherWrapper {
 
     /**
@@ -74,4 +79,30 @@ public class TeacherWrapper {
         }
 
     }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("老师设置结算方式模型")
+    public static class TeacherSetSettlement {
+
+        @ApiModelProperty("老师ID")
+        private Long userId;
+
+        @ApiModelProperty("结算方式")
+        private ESettlementFrom settlementFrom;
+    }
+
+    @Data
+    @ApiModel("解绑机构")
+    public static class UnbindTenant{
+
+        @ApiModelProperty("短信验证码")
+        private String code;
+
+        @ApiModelProperty("解绑原因")
+        private String unbindReason;
+    }
 }

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

@@ -156,12 +156,12 @@
                 and t.tenant_id_ = #{param.tenantId}
             </if>
             <if test="param.tenantName != null and param.tenantName.trim() != ''">
-                and te.name_ like concat('%',#{param.tenantName},'%')
+                and ti.name_ like concat('%',#{param.tenantName},'%')
             </if>
         </where>
         <choose>
             <when test="param.orderBy != null and param.orderBy.trim() != ''">
-                order by #{param.orderBy}
+                order by ${param.orderBy}
             </when>
             <otherwise>
                 order by t.create_time_ desc

+ 24 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -415,21 +415,41 @@
 			smcr.create_time_ as createTime
 		from sys_music_compare_record smcr
 		left join music_sheet ms ON ms.id_ = smcr.music_sheet_id_
-		where smcr.user_id_ = #{userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{month} AND smcr.tenant_id_ = #{tenantId} AND smcr.score IS NOT NULL
+		where smcr.user_id_ = #{userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{month} AND smcr.score IS NOT NULL
+		<if test="tenantId != null">
+			AND smcr.tenant_id_ = #{tenantId}
+		</if>
 		order by smcr.id_ DESC
 	</select>
 	<select id="countStudentTrain" resultType="java.lang.Integer">
 		select COUNT(smcr.id_)
 		from sys_music_compare_record smcr
-		where smcr.user_id_ = #{userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{month} AND smcr.tenant_id_ = #{tenantId} AND smcr.score IS NOT NULL
+		where smcr.user_id_ = #{userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{month}
+		AND smcr.score IS NOT NULL
+		<if test="tenantId != null">
+			AND smcr.tenant_id_ = #{tenantId}
+		</if>
 	</select>
 	<select id="studentMusicCompareRecordStat"
 			resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$StudentMusicCompareRecordStat">
 		select smcr.user_id_ userId,su.avatar_ avatar,su.username_ username,SUM(smcr.play_time_) trainTime,
 		       COUNT(DISTINCT DATE_FORMAT(smcr.create_time_,'%Y-%m-%d')) trainDays
 		from sys_music_compare_record smcr
-				 left join sys_user su ON su.id_ = smcr.user_id_
-		where smcr.user_id_ = #{query.userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{query.month} AND smcr.tenant_id_ = #{query.tenantId}
+		left join sys_user su ON su.id_ = smcr.user_id_
+		where smcr.user_id_ = #{query.userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{query.month}
+		<if test="query.tenantId != null">
+			AND smcr.tenant_id_ = #{query.tenantId}
+		</if>
+		group by smcr.user_id_
+	</select>
+	<select id="studentTrainStat"
+			resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$StudentMusicCompareRecordDto">
+		select SUM(smcr.play_time_) trainTime,COUNT(DISTINCT DATE_FORMAT(smcr.create_time_,'%Y-%m-%d')) trainDays,COUNT(smcr.id_) trainNum
+		from sys_music_compare_record smcr
+		where smcr.user_id_ = #{query.userId} and DATE_FORMAT(smcr.create_time_,'%Y-%m') = #{query.month}
+		<if test="query.tenantId != null">
+			AND smcr.tenant_id_ = #{query.tenantId}
+		</if>
 		group by smcr.user_id_
 	</select>
 	<!--曲目练习统计-->

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

@@ -172,19 +172,19 @@
             <if test="param.evaluateFlag != null">
                 AND t.evaluate_time_ > 0
             </if>
-            <if test="param.tenantId ! =null">
-                AND t.tenantId_ = #{param.tenantId}
+            <if test="param.tenantId != null">
+                AND t.tenant_id_ = #{param.tenantId}
             </if>
-            <if test="param.settlementFrom ! =null and param.settlementFrom.trim() != ''">
+            <if test="param.settlementFrom != null">
                 AND t.settlement_from_ = #{param.settlementFrom}
             </if>
             <if test="param.tenantName != null and param.tenantName.trim() != ''">
-                and te.name_ like concat('%',#{param.tenantName},'%')
+                and ti.name_ like concat('%',#{param.tenantName},'%')
             </if>
         </where>
         <choose>
             <when test="param.orderBy != null and param.orderBy.trim() != ''">
-                order by #{param.orderBy}
+                order by ${param.orderBy}
             </when>
             <otherwise>
                 order by t.create_time_ desc

+ 10 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -69,7 +69,8 @@
     </update>
 
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantInfoWrapper$TenantInfo">
-		SELECT         
+		SELECT
+            id_ as id,
         	name_ AS name,
         	logo_ AS logo,
         	brief_Introduction_ AS briefIntroduction,
@@ -77,9 +78,7 @@
         	phone_ AS phone,
             province_code_ AS provinceCode,
             city_code_ AS cityCode,
-            region_code_ AS regionCode,
-           (SELECT count(t.tenant_id_) FROM teacher t INNER JOIN  tenant_info i on t.tenant_id_ = i.id_ GROUP BY i.id_) AS teacherCounts,
-           (SELECT count(s.tenant_id_) FROM student s INNER JOIN  tenant_info i on s.tenant_id_ = i.id_ GROUP BY i.id_) AS studentCounts
+            region_code_ AS regionCode
 		FROM tenant_info t
 		where 1=1
         <if test="param.keyword != null and param.keyword  != ''">
@@ -100,5 +99,11 @@
             t.region_code_ = #{param.regionCode}
         </if>
 	</select>
-    
+    <select id="queryTeacherCounts" resultType="java.lang.Integer">
+        SELECT count(t.tenant_id_) FROM teacher t where t.tenant_id_ IN (<foreach collection="listId" separator="," item="Id">#{Id}</foreach>)
+    </select>
+    <select id="queryStudentCounts" resultType="java.lang.Integer">
+        SELECT count(s.tenant_id_) FROM student s where s.tenant_id_ IN (<foreach collection="listId" separator="," item="Id">#{Id}</foreach>)
+    </select>
+
 </mapper>

+ 68 - 12
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -5,28 +5,36 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.QueryMyFollowSearch;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
-import com.yonge.cooleshow.biz.dal.vo.StudentVo;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
 import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
+import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.util.StringUtil;
-import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.idcard.IdcardValidator;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
-
-import com.yonge.cooleshow.biz.dal.entity.Student;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.List;
@@ -43,10 +51,16 @@ public class StudentController extends BaseController {
     @Autowired
     private SysUserService sysUserService;
 
+    @Autowired
+    private TenantUnbindRecordService tenantUnbindRecordService;
+
+    @Autowired
+    private SmsCodeService smsCodeService;
+
 
     @ApiOperation(value = "查询指定学员信息")
     @GetMapping("/queryUserById")
-    public HttpResponseResult<StudentVo> queryUserById(String rongCloudUserId) {
+    public HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.StudentVo> queryUserById(String rongCloudUserId) {
 
         if (StringUtil.isEmpty(rongCloudUserId)) {
             return failed("用户信息获取失败");
@@ -130,9 +144,51 @@ public class StudentController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user,ClientEnum.STUDENT);
+        IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user,
+                ClientEnum.STUDENT);
         return succeed(idcardInfoExtractor);
     }
 
+    @PostMapping("/unbindTenant")
+    @ApiOperation(value = "解绑机构申请")
+    public HttpResponseResult<Boolean> unbindTenant(@RequestBody StudentWrapper.UnbindTenant unbindTenant) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (StringUtils.isEmpty(unbindTenant.getCode())) {
+            return failed("验证码不能为空");
+        }
+        boolean validCode = smsCodeService.verifyValidCode(user.getPhone(), unbindTenant.getCode(), "");
+        if (validCode) {
+            return failed("验证码错误");
+        }
+        if (user.getTenantId() == null || user.getTenantId() == -1) {
+            return failed("非机构用户不需要解绑");
+        }
+
+        Student student = studentService.getById(user.getId());
+        if (student == null) {
+            return failed("未查询到学生的信息");
+        }
+
+        TenantUnbindRecord one = tenantUnbindRecordService.lambdaQuery()
+                .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
+                .eq(TenantUnbindRecord::getUserType, "STUDENT")
+                .eq(TenantUnbindRecord::getUserId, user.getId())
+                .eq(TenantUnbindRecord::getStatus, "DOING")
+                .last("limit 1").one();
+        if (one != null) {
+            return failed("请勿重复申请");
+        }
+        TenantUnbindRecord tenantUnbindRecord = new TenantUnbindRecord();
+        tenantUnbindRecord.setTenantId(user.getTenantId());
+        tenantUnbindRecord.setUserId(user.getId());
+        tenantUnbindRecord.setUserType("STUDENT");
+        tenantUnbindRecord.setUnbindReason(unbindTenant.getUnbindReason());
+        tenantUnbindRecord.setStatus("DOING");
+        tenantUnbindRecordService.save(tenantUnbindRecord);
+        return succeed();
+    }
 
 }

+ 54 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -2,8 +2,13 @@ package com.yonge.cooleshow.teacher.controller;
 
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
+import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -11,6 +16,7 @@ import io.swagger.annotations.ApiParam;
 
 import java.util.List;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
@@ -45,6 +51,12 @@ public class TeacherController extends BaseController {
     @Autowired
     private SysUserService sysUserService;
 
+    @Autowired
+    private SmsCodeService smsCodeService;
+
+    @Autowired
+    private TenantUnbindRecordService tenantUnbindRecordService;
+
     @ApiOperation(value = "我的-查询教师基本信息")
     @GetMapping("/queryUserInfo")
     public HttpResponseResult<TeacherHomeVo> queryUserInfo() {
@@ -172,4 +184,46 @@ public class TeacherController extends BaseController {
         IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user, ClientEnum.TEACHER);
         return succeed(idcardInfoExtractor);
     }
+
+    @PostMapping("/unbindTenant")
+    @ApiOperation(value = "解绑机构申请")
+    public HttpResponseResult<Boolean> unbindTenant(@RequestBody TeacherWrapper.UnbindTenant unbindTenant) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (StringUtils.isEmpty(unbindTenant.getCode())) {
+            return failed("验证码不能为空");
+        }
+        boolean validCode = smsCodeService.verifyValidCode(user.getPhone(), unbindTenant.getCode(), "");
+        if (validCode) {
+            return failed("验证码错误");
+        }
+        if (user.getTenantId() == null || user.getTenantId() == -1) {
+            return failed("非机构用户不需要解绑");
+        }
+
+        Teacher teacher = teacherService.getById(user.getId());
+        if (teacher == null) {
+            return failed("未查询到老师的信息");
+        }
+
+        TenantUnbindRecord one = tenantUnbindRecordService.lambdaQuery()
+                .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
+                .eq(TenantUnbindRecord::getUserType, "TEACHER")
+                .eq(TenantUnbindRecord::getUserId, user.getId())
+                .eq(TenantUnbindRecord::getStatus, "DOING")
+                .last("limit 1").one();
+        if (one != null) {
+            return failed("请勿重复申请");
+        }
+        TenantUnbindRecord tenantUnbindRecord = new TenantUnbindRecord();
+        tenantUnbindRecord.setTenantId(user.getTenantId());
+        tenantUnbindRecord.setUserId(user.getId());
+        tenantUnbindRecord.setUserType("TEACHER");
+        tenantUnbindRecord.setUnbindReason(unbindTenant.getUnbindReason());
+        tenantUnbindRecord.setStatus("DOING");
+        tenantUnbindRecordService.save(tenantUnbindRecord);
+        return succeed();
+    }
 }

+ 4 - 28
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/IndexController.java

@@ -12,9 +12,10 @@ import com.yonge.toolset.base.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.*;
-
-import java.util.List;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 @Api(tags = "首页统计")
 @RequestMapping("index")
@@ -69,29 +70,4 @@ public class IndexController extends BaseController {
         query.setTenantId(sysUser.getTenantId());
         return succeed(tenantPersonStatService.indexSum(query));
     }
-
-    @ApiOperation("学员练习记录")
-    @PostMapping("queryStudentTrain")
-    public HttpResponseResult<PageInfo<SysMusicCompareRecordQueryInfo.StudentMusicCompareRecord>>
-    queryStudentTrain(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("获取用户信息失败");
-        }
-        query.setTenantId(sysUser.getTenantId());
-        return succeed(sysMusicCompareRecordService.queryStudentTrain(query));
-    }
-
-    @ApiOperation("学员训练统计以及基本信息查询")
-    @PostMapping("studentTrainStat")
-    public HttpResponseResult<SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordStat>
-    studentMusicCompareRecordStat(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("获取用户信息失败");
-        }
-        query.setTenantId(sysUser.getTenantId());
-        return succeed(sysMusicCompareRecordService.studentMusicCompareRecordStat(query));
-    }
-
 }

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

@@ -7,7 +7,6 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
@@ -29,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 @RestController
@@ -38,7 +38,7 @@ public class StudentController extends BaseController {
     @Autowired
     private StudentService studentService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
@@ -57,7 +57,7 @@ public class StudentController extends BaseController {
         TenantInfo tenantInfo = getTenantInfo();
         query.setTenantId(tenantInfo.getId());
         query.setDelFlag(YesOrNoEnum.NO);
-        query.setOrderBy("t.username desc");
+        query.setOrderBy("u.username_ asc");
 
         IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);
         List<StudentVo> rows = pages.getRecords();
@@ -80,8 +80,8 @@ public class StudentController extends BaseController {
     @ApiOperation(value = "新增/修改", notes = "传入Student")
     public HttpResponseResult<Boolean> save(
             @Validated @RequestBody com.yonge.cooleshow.tenant.vo.StudentVo.Student student) {
-        TenantInfo tenantInfo = getTenantInfo();
         StudentWrapper.Student studentInfo = JSON.parseObject(JSON.toJSONString(student), StudentWrapper.Student.class);
+        TenantInfo tenantInfo = getTenantInfo();
         studentInfo.setTenantId(tenantInfo.getId());
         studentService.save(studentInfo);
         return succeed();

+ 52 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/SysMusicCompareRecordController.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "学生端训练记录")
+@RequestMapping("studentMusicCompareRecord")
+@RestController
+public class SysMusicCompareRecordController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+
+    @ApiOperation("学生端学员评测记录")
+    @PostMapping("queryStudentTrain")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecordQueryInfo.StudentMusicCompareRecord>>
+    queryStudentTrain(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        query.setUserId(sysUser.getId());
+        return succeed(sysMusicCompareRecordService.queryStudentTrain(query));
+    }
+
+    @ApiOperation("学员训练统计以及基本信息查询")
+    @PostMapping("studentTrainStat")
+    public HttpResponseResult<SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordDto>
+    studentTrainStat(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        query.setUserId(sysUser.getId());
+        return succeed(sysMusicCompareRecordService.studentTrainStat(query));
+    }
+
+}

+ 24 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
@@ -82,7 +83,7 @@ public class TeacherController extends BaseController {
         TenantInfo tenantInfo = getTenantInfo();
         query.setTenantId(tenantInfo.getId());
         query.setDelFlag(YesOrNoEnum.NO);
-        query.setOrderBy("t.username desc");
+        query.setOrderBy("u.username_ asc");
 
         IPage<TeacherVo> pages = teacherService.selectPage(PageUtil.getPage(query), query);
         List<TeacherVo> rows = pages.getRecords();
@@ -119,6 +120,28 @@ public class TeacherController extends BaseController {
         return teacherService.submit(teacherSubmitReq);
     }
 
+    @PostMapping("/setSettlement")
+    @ApiOperation(value = "设置结算方式")
+    public HttpResponseResult<Boolean> setSettlement(@Valid @RequestBody TeacherWrapper.TeacherSetSettlement setSettlement) {
+        TenantInfo tenantInfo = getTenantInfo();
+        teacherService.lambdaUpdate()
+                .set(Teacher::getSettlementFrom, setSettlement.getSettlementFrom())
+                .eq(Teacher::getTenantId, tenantInfo.getId())
+                .eq(Teacher::getUserId, setSettlement.getUserId()).update();
+        return succeed();
+    }
+
+    @PostMapping("/batchSetSettlement")
+    @ApiOperation(value = "批量设置结算方式")
+    public HttpResponseResult<Boolean> batchSetSettlement(@Valid @RequestBody TeacherWrapper.TeacherSetSettlement setSettlement) {
+        TenantInfo tenantInfo = getTenantInfo();
+        teacherService.lambdaUpdate()
+                .set(Teacher::getSettlementFrom, setSettlement.getSettlementFrom())
+                .eq(Teacher::getTenantId, tenantInfo.getId())
+                .update();
+        return succeed();
+    }
+
     private TenantInfo getTenantInfo() {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         TenantInfo tenantInfo = tenantInfoService.lambdaQuery().eq(TenantInfo::getUserId, sysUser.getId())

+ 54 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/WechatMusicCompareRecordController.java

@@ -0,0 +1,54 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
+import com.yonge.cooleshow.biz.dal.service.TenantPersonStatService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "机构端训练记录")
+@RequestMapping("wechatMusicCompareRecord")
+@RestController
+public class WechatMusicCompareRecordController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+
+    @ApiOperation("学员评测记录")
+    @PostMapping("queryStudentTrain")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecordQueryInfo.StudentMusicCompareRecord>>
+    queryStudentTrain(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        query.setTenantId(sysUser.getTenantId());
+        return succeed(sysMusicCompareRecordService.queryStudentTrain(query));
+    }
+
+
+    @ApiOperation("学员训练统计以及基本信息查询")
+    @PostMapping("studentTrainStat")
+    public HttpResponseResult<SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordStat>
+    studentMusicCompareRecordStat(SysMusicCompareRecordQueryInfo.StudentMusicCompareRecordQuery query){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        query.setTenantId(sysUser.getTenantId());
+        return succeed(sysMusicCompareRecordService.studentMusicCompareRecordStat(query));
+    }
+
+}

+ 3 - 2
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.tenant.vo.StudentVo;
 import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -29,8 +30,7 @@ public class OpenStudentController extends BaseController {
 
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student")
-    public HttpResponseResult<Boolean> save(
-            @Validated @RequestBody com.yonge.cooleshow.tenant.vo.StudentVo.Student student) {
+    public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
         Long tenantId = student.getTenantId();
         if (tenantId == null) {
             throw new BizException("未指定机构");
@@ -39,6 +39,7 @@ public class OpenStudentController extends BaseController {
         if (tenantInfo == null) {
             throw new BizException("机构不存在");
         }
+        student.setId(null);
         StudentWrapper.Student studentInfo = JSON.parseObject(JSON.toJSONString(student), StudentWrapper.Student.class);
         studentInfo.setTenantId(tenantInfo.getId());
         studentService.save(studentInfo);

+ 6 - 3
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/StudentVo.java

@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
-import java.util.Date;
+import java.time.LocalDate;
 
 @ApiModel("学生入参模型")
 @Data
@@ -27,15 +27,18 @@ public class StudentVo {
 
         @ApiModelProperty("性别。0:女 1:男")
         @NotNull
-        private Boolean gender;
+        private Integer gender;
 
         @ApiModelProperty("生日")
-        private Date birthdate;
+        private LocalDate birthdate;
 
         @ApiModelProperty("手机号码")
         @NotNull
         private String phone;
 
+        @ApiModelProperty("头像")
+        private String avatar;
+
         @ApiModelProperty("声部,多个用逗号隔开")
         private String subjectId;